我正在为SPI接口编写测试平台。界面基本上由四个信号组成:
spi_mosi:主设备的输出信号(从设备的输入信号)
我用分析仪跟踪了SPI总线,我得到的文件显示了通过总线执行的每个操作。每个操作都从芯片选择的下降沿开始,并以芯片选择的上升沿结束。该文件是:
.................. 03fff57000000000 03fff57400000000 03fff57800000000 03fff57c00000000 02f0fffec0a3 02f0fffcfc0c 03fff54000000000 03fff54400000000 03fff54800000000 03fff54c00000000 03fff57c00000000 03f0fffc0000 03f0fffe0000 03fff55000000000 03fff55400000000 03fff55800000000 ..... and so on
每一行代表总线上的spi操作。编写测试平台的问题在于SPI操作的长度。很容易看出在一个操作中传输的字节是可变的。我的目的是使用 readline 和 hread 这些功能逐行获取值并输入我的模块,例如:
process
file miso_file : TEXT is in "TestBench/MISO_DATA.txt";
variable miso_line : LINE;
variable VAR_miso : std_logic_vector(63 downto 0) := (others => '0');
file mosi_file : TEXT is in "TestBench/MOSI_DATA.txt";
variable mosi_line : LINE;
variable VAR_mosi : std_logic_vector(63 downto 0) := (others => '0');
variable mosi_good : boolean;
variable miso_good : boolean;
begin
... some code ...
while not(endfile(miso_file)) loop
readline(miso_file,miso_line);
hread(miso_line,VAR_miso,miso_good);
...some code...
end loop;
wait;
end process;
当行由16个字符(64位)组成时,此代码有效,但是当大小不同时,它不起作用。有没有人有建议?
非常感谢
答案 0 :(得分:2)
一旦hread()
占用了该行,您就不知道其中最初有多少字节。您需要在调用miso_line'length
之前保存hread()
,然后让测试平台使用它来确定要发送的矢量的哪些部分。