测试台和无约束 std_logic_vector

Testbench and unconstrained std_logic_vector

我正在为 SPI 接口编写测试平台。该界面基本上由四个信号组成os:

  1. spi_clk : 主机提供的信号时钟

  2. spi_cs :芯片select信号由master

    驱动
  3. spi_miso:主机输入信号(从机输出信号)

  4. 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 操作的长度。很容易看出一次操作中传输的字节是可变的。我的意愿是使用函数 readlinehread逐行获取值并提供给我的模块,例如:

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,然后让您的测试台使用它来确定要发送向量的哪些部分。