Интересен как "ученые мужи"

пишущие на VHDLе подходят к вопросу тестирования дизайна когда нужно гнать большие объемы входных данных через test-bench.
В более приземленом плане - есть дизайн в области видео, нужно его прогонять объемами входных данных хотя-бы на несколько кадров что е реалиях будет немалое кол-во данных (скажем сигналы синхронизации, данные и т.д. на несколько кадров, в каждом кадре около 300 строк, в каждой строке - около 1600 побайтовых единиц инфы (т.е. около 1600 клоков).
Т.е. на кадр входных данных получается более 400 000 тест векторов.
Я так понимаю что в таком случае наверно работают с текстовыми файлами векторов которые читаются в test bench, так ?
Maverick
Mar 5 2008, 08:25
Пример VHDL испытательного стенда (VHDL Test Bench)
VHDL испытательный стенд - программа VHDL, которая описывает ввод моделирования, использующего процедуры языка
стандартного VHDL. Данный пример VHDL испытательного стенда позволяет читать из текстового файла и записывать
результаты моделирования в текстовый файл, находящиеся в папке проекта. Код рабочий!!! Файлы для записи и чтения должны находится в папке проекта
Извините код правильно не вставил - получилось и к тому же спешил
[code]
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
use ieee.std_logic_arith.all;
use std.textio.all;
LIBRARY UNISIM;
USE UNISIM.Vcomponents.ALL;
ENTITY shema_shema_sch_tb IS
END shema_shema_sch_tb;
ARCHITECTURE behavioral OF shema_shema_sch_tb IS
COMPONENT shema
PORT( Clock : IN STD_LOGIC;
DOOR : IN STD_LOGIC_VECTOR (11 DOWNTO 0);
I : OUT STD_LOGIC_VECTOR (9 DOWNTO 0);
J : OUT STD_LOGIC_VECTOR (9 DOWNTO 0);
PIXEL : OUT STD_LOGIC_VECTOR (11 DOWNTO 0);
Reset : IN STD_LOGIC;
W : OUT STD_LOGIC;
constt : IN STD_LOGIC_VECTOR (11 DOWNTO 0);
xx : OUT STD_LOGIC_VECTOR (2 DOWNTO 0);
c1 : OUT STD_LOGIC;
c2 : OUT STD_LOGIC;
c3 : OUT STD_LOGIC;
c4 : OUT STD_LOGIC;
z1 : OUT STD_LOGIC;
z2 : OUT STD_LOGIC;
z3 : OUT STD_LOGIC;
z4 : OUT STD_LOGIC;
ih : OUT STD_LOGIC;
jh : OUT STD_LOGIC;
jl : OUT STD_LOGIC;
ssjl : OUT STD_LOGIC_VECTOR (9 DOWNTO 0);
cchk : OUT STD_LOGIC);
END COMPONENT;
SIGNAL Clock : STD_LOGIC;
SIGNAL DOOR : STD_LOGIC_VECTOR (11 DOWNTO 0);
SIGNAL PIXEL : STD_LOGIC_VECTOR (11 DOWNTO 0);
SIGNAL Reset : STD_LOGIC;
SIGNAL constt : STD_LOGIC_VECTOR (11 DOWNTO 0);
SIGNAL z1 : STD_LOGIC;
SIGNAL z2 : STD_LOGIC;
SIGNAL z3 : STD_LOGIC;
SIGNAL z4 : STD_LOGIC;
SIGNAL I : STD_LOGIC_VECTOR (9 DOWNTO 0);
SIGNAL J : STD_LOGIC_VECTOR (9 DOWNTO 0);
SIGNAL xx : STD_LOGIC_VECTOR (2 DOWNTO 0);
SIGNAL c1 : STD_LOGIC;
SIGNAL c2 : STD_LOGIC;
SIGNAL c3 : STD_LOGIC;
SIGNAL c4 : STD_LOGIC;
SIGNAL w : STD_LOGIC;
SIGNAL ih : STD_LOGIC;
SIGNAL jh : STD_LOGIC;
SIGNAL jl : STD_LOGIC;
SIGNAL ssjl : STD_LOGIC_VECTOR (9 DOWNTO 0);
SIGNAL cchk : STD_LOGIC;
BEGIN
UUT: shema PORT MAP(
Clock => Clock,
DOOR => DOOR,
PIXEL => PIXEL,
Reset => Reset,
constt => constt,
z1 => z1,
z2 => z2,
z3 => z3,
z4 => z4,
I => I,
J => J,
w => w,
xx => xx,
c1 => c1,
c2 => c2,
c3 => c3,
c4 => c4,
ih => ih,
jh => jh,
jl => jl,
ssjl =>ssjl,
cchk => cchk );
read_from_file: process(Clock)
variable indata_line: line;
variable indata: integer;
file input_data_file: text open read_mode is "DATA.txt";
begin
if rising_edge(Clock) then
readline(input_data_file,indata_line);
read(indata_line,indata);
DOOR <= conv_std_logic_vector(indata,12);
if endfile(input_data_file) then
report "end of file -- looping back to start of file";
file_close(input_data_file);
file_open(input_data_file,"DATA.txt");
end if;
end if;
end process;
write_to_file: process(Clock)
variable outdata_line: line;
variable outdata: integer :=0;
file output_data_file: text open write_mode is "vhdl_output.txt";
begin
if rising_edge(Clock) then
outdata :=
1*CONV_INTEGER(To_X01Z(z1))+2*CONV_INTEGER(To_X01Z(z2))+4*CONV_INTEGER(To_X01Z(z
3))+8
*CONV_INTEGER(To_X01Z(z4));
write(outdata_line,outdata);
writeline(output_data_file,outdata_line);
end if;
end process;
clock_gen: process
begin
Clock <= '0';
wait for 50 ns;
Clock <= '1';
wait for 50 ns;
end process;
reset_gen: process
begin
Reset <= '0';
wait for 10 ns;
Reset <= '1';
wait;
end process;
const_gen: process
begin
constt <= "000000000000";
wait for 10 ns;
constt <= "000000010100";
wait;
end process;
END;
[\code]
DmitryR
Mar 5 2008, 09:36
Цитата(Саша Z @ Mar 4 2008, 18:12)

Интересен как "ученые мужи"

пишущие на VHDLе подходят к вопросу тестирования дизайна когда нужно гнать большие объемы входных данных через test-bench.
В более приземленом плане - есть дизайн в области видео, нужно его прогонять объемами входных данных хотя-бы на несколько кадров что е реалиях будет немалое кол-во данных
Если в общем случае (какие-то не поддающиеся формализации данные) - то да, из файла. В более приземленном плане - простым циклом генерируется одеяло из цветных квадратов и синхронизация.
Понял, всем спасибо.
По началу, буду генерировать синхронизацию циклами в benchе, для данных уже буду ломать голову файлом...