2015-07-15 3 views
0

Я пишу testbench для интерфейса SPI. Интерфейс в основном состоит из четырех сигналов:Testbench и unconstrained std_logic_vector

  1. spi_clk: тактовый сигнал provvided мастером
  2. spi_cs: сигнал выбора чипа с приводом от ведущего
  3. spi_miso: Входной сигнал Master (выходной сигнал ведомый)
  4. spi_mosi: Выходной сигнал Master (входной сигнал ведомого)

    Я проследил SPI шину с анализатором, и я получаю файл, который показывает каждую операцию выполняется по шине. Каждая операция начинается с падения фронта выборки микросхемы и заканчивается нарастающим фронтом выбора микросхемы. Файл:

.................. 
03fff57000000000 
03fff57400000000 
03fff57800000000 
03fff57c00000000 
02f0fffec0a3 
02f0fffcfc0c 
03fff54000000000 
03fff54400000000 
03fff54800000000 
03fff54c00000000 
03fff57c00000000 
03f0fffc0000 
03f0fffe0000 
03fff55000000000 
03fff55400000000 
03fff55800000000 
..... and so on 

Каждая строка представляет собой операцию СПИ на шине. Моя проблема написать testbench - это длина операции 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 бит), но когда размер отличается, он не работает. У кого-нибудь есть предложения?

спасибо

ответ

2

После hread() потребили линию, которую вы не знаете, сколько байт были первоначально в нем. Вы должны сохранить miso_line'length перед вызовом hread(), а затем используйте свой тестовый баннер, чтобы определить, какие части вектора нужно отправить.

+0

Ух, я могу получить длину, большое вам спасибо, он должен избегать много проблем !!! – haster8558

Смежные вопросы