测试台和无约束 std_logic_vector
Testbench and unconstrained std_logic_vector
我正在为 SPI 接口编写测试平台。该界面基本上由四个信号组成os:
spi_clk : 主机提供的信号时钟
spi_cs :芯片select信号由master
驱动
spi_miso:主机输入信号(从机输出信号)
spi_mosi:主机输出信号(从机输入信号)
我用分析仪跟踪了 SPI 总线,我得到了显示在总线上执行的每个操作的文件。每个操作都以芯片 select 的下降沿开始,并以芯片 select 的上升沿 os 结束。文件是:
..................
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 位)组成时,此代码有效os,但当大小不同时,它不起作用。有人有什么建议吗?
非常感谢
一旦 hread()
消耗了该行,您将不知道其中最初有多少字节。您需要在调用 hread()
之前保存 miso_line'length
,然后让您的测试台使用它来确定要发送向量的哪些部分。
我正在为 SPI 接口编写测试平台。该界面基本上由四个信号组成os:
spi_clk : 主机提供的信号时钟
spi_cs :芯片select信号由master
驱动spi_miso:主机输入信号(从机输出信号)
spi_mosi:主机输出信号(从机输入信号)
我用分析仪跟踪了 SPI 总线,我得到了显示在总线上执行的每个操作的文件。每个操作都以芯片 select 的下降沿开始,并以芯片 select 的上升沿 os 结束。文件是:
.................. 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 位)组成时,此代码有效os,但当大小不同时,它不起作用。有人有什么建议吗?
非常感谢
一旦 hread()
消耗了该行,您将不知道其中最初有多少字节。您需要在调用 hread()
之前保存 miso_line'length
,然后让您的测试台使用它来确定要发送向量的哪些部分。