Я пишу testbench для интерфейса SPI. Интерфейс в основном состоит из четырех сигналов:Testbench и unconstrained std_logic_vector
- spi_clk: тактовый сигнал provvided мастером
- spi_cs: сигнал выбора чипа с приводом от ведущего
- spi_miso: Входной сигнал Master (выходной сигнал ведомый)
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 бит), но когда размер отличается, он не работает. У кого-нибудь есть предложения?
спасибо
Ух, я могу получить длину, большое вам спасибо, он должен избегать много проблем !!! – haster8558