Testbench和无约束的std_logic_vector

时间:2015-07-15 16:08:52

标签: vhdl spi

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

  1. spi_clk:主人提供的信号时钟
  2. spi_cs:主机驱动的片选信号
  3. spi_miso:主设备的输入信号(从设备的输出信号)
  4. spi_mosi:主设备的输出信号(从设备的输入信号)

    我用分析仪跟踪了SPI总线,我得到的文件显示了通过总线执行的每个操作。每个操作都从芯片选择的下降沿开始,并以芯片选择的上升沿结束。该文件是:

  5. ..................
    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位)组成时,此代码有效,但是当大小不同时,它不起作用。有没有人有建议?

    非常感谢

1 个答案:

答案 0 :(得分:2)

一旦hread()占用了该行,您就不知道其中最初有多少字节。您需要在调用miso_line'length之前保存hread(),然后让测试平台使用它来确定要发送的矢量的哪些部分。