B
Beanut
Guest
I've been playing around with reading binary data into a testbench. I
noticed a lot of people asking questions on the user group over the
years, but didn't see a simple expample, so here's some code that might
help:
constant N : integer := 28671; --Number of bytes in file minus
one
subtype file_element is std_logic_vector(7 downto 0);
type mem_array is array(N downto 0) of file_element;
shared variable memory : mem_array;
begin
----------------------------------------------------------------------------
-- This code reads a raw binary file one byte at a time.
load_memory : process is
type bit_vector_file is file of bit_vector;
file vectors : bit_vector_file open read_mode is "calconst.bin";
variable next_vector : bit_vector (0 downto 0);
variable actual_len : natural;
variable index : integer := 0;
begin
while not endfile(vectors) loop
read(vectors, next_vector, actual_len);
if actual_len > next_vector'length then
report "vector too long";
else
memory(index) :=
conv_std_logic_vector(bit'pos(next_vector(0)),8);
index := index + 1;
end if;
end loop;
wait;
end process load_memory;
-----------------------------------------------------------------------------
Enjoy,
Beanut
noticed a lot of people asking questions on the user group over the
years, but didn't see a simple expample, so here's some code that might
help:
constant N : integer := 28671; --Number of bytes in file minus
one
subtype file_element is std_logic_vector(7 downto 0);
type mem_array is array(N downto 0) of file_element;
shared variable memory : mem_array;
begin
----------------------------------------------------------------------------
-- This code reads a raw binary file one byte at a time.
load_memory : process is
type bit_vector_file is file of bit_vector;
file vectors : bit_vector_file open read_mode is "calconst.bin";
variable next_vector : bit_vector (0 downto 0);
variable actual_len : natural;
variable index : integer := 0;
begin
while not endfile(vectors) loop
read(vectors, next_vector, actual_len);
if actual_len > next_vector'length then
report "vector too long";
else
memory(index) :=
conv_std_logic_vector(bit'pos(next_vector(0)),8);
index := index + 1;
end if;
end loop;
wait;
end process load_memory;
-----------------------------------------------------------------------------
Enjoy,
Beanut