Tony Benham said:
I'm tring to read/write bytes from a binary file in a modelsim simulation.
Here's an example to get you started.
Byte ordering and file offsets may vary.
Good luck.
-- Mike Treseler
-------------------------------------------------------------------------------
-- Binary file demo using 32 bit integers
-- Fri Jul 9 15:30:53 2004 Mike Treseler
-- Invoke with vsim -c bin_file -do "run 1";
-------------------------------------------------------------------------------
entity bin_file is
end entity bin_file;
architecture sim of bin_file is
type int_file is file of integer; -- 4 bytes each order=4,3,2,1,8,7,6,5...
file my_file : int_file;
type int_array is array(natural range <>) of integer;
function spew(i_arg : integer) return int_array is
variable result : int_array(0 to i_arg-1);
begin
result(0) := 16#0abc_0123#;
for i in 1 to i_arg-1 loop
result(i) := result(i-1) + 1;
end loop;
return result;
end;
constant box_o_ints : int_array := spew(100);
begin -- architecture sim
what : process is
variable my_int_v : integer;
begin
file_open(my_file, "my_file.bin", write_mode);
for i in box_o_ints'range loop
write(my_file, box_o_ints(i));
end loop; -- i
file_close(my_file);
file_open(my_file, "my_file.bin", read_mode);
for i in box_o_ints'range loop
-- report integer'image(box_o_ints(i));
read(my_file, my_int_v);
assert my_int_v = box_o_ints(i)
report "read error" severity warning;
end loop; -- i
file_close(my_file);
report("view my_file.bin in emacs hexl-mode");
wait;
end process what;
end architecture sim;
--58 steptoe /evtfs/home/tres/vhdl/play > vsim -c bin_file -do "run 1";
--# Loading /steptoe/usr1/modeltech/linux/../std.standard
--# Loading work.bin_file(sim)
--# run 1
--# ** Note: view my_file.bin in emacs hexl-mode
--# Time: 0 ns Iteration: 0 Instance: /bin_file
--VSIM 2> exit
--58 steptoe Fri Jul 09 /evtfs/home/tres/vhdl/play > emacs my_file.bin
-------------------------------------------------------------------------------
-- file: my_file.bin (hexl)
-------------------------------------------------------------------------------
--00000000: 2301 bc0a 2401 bc0a 2501 bc0a 2601 bc0a #...$...%...&...
--00000010: 2701 bc0a 2801 bc0a 2901 bc0a 2a01 bc0a '...(...)...*...
--00000020: 2b01 bc0a 2c01 bc0a 2d01 bc0a 2e01 bc0a +...,...-.......
--00000030: 2f01 bc0a 3001 bc0a 3101 bc0a 3201 bc0a /...0...1...2...
--00000040: 3301 bc0a 3401 bc0a 3501 bc0a 3601 bc0a 3...4...5...6...
--00000050: 3701 bc0a 3801 bc0a 3901 bc0a 3a01 bc0a 7...8...9...:...
--00000060: 3b01 bc0a 3c01 bc0a 3d01 bc0a 3e01 bc0a ;...<...=...>...
--00000070: 3f01 bc0a 4001 bc0a 4101 bc0a 4201 bc0a
[email protected]...
--00000080: 4301 bc0a 4401 bc0a 4501 bc0a 4601 bc0a C...D...E...F...
--00000090: 4701 bc0a 4801 bc0a 4901 bc0a 4a01 bc0a G...H...I...J...
--000000a0: 4b01 bc0a 4c01 bc0a 4d01 bc0a 4e01 bc0a K...L...M...N...
--000000b0: 4f01 bc0a 5001 bc0a 5101 bc0a 5201 bc0a O...P...Q...R...
--000000c0: 5301 bc0a 5401 bc0a 5501 bc0a 5601 bc0a S...T...U...V...
--000000d0: 5701 bc0a 5801 bc0a 5901 bc0a 5a01 bc0a W...X...Y...Z...
--000000e0: 5b01 bc0a 5c01 bc0a 5d01 bc0a 5e01 bc0a [...\...]...^...
--000000f0: 5f01 bc0a 6001 bc0a 6101 bc0a 6201 bc0a _...`...a...b...
--00000100: 6301 bc0a 6401 bc0a 6501 bc0a 6601 bc0a c...d...e...f...
--00000110: 6701 bc0a 6801 bc0a 6901 bc0a 6a01 bc0a g...h...i...j...
--00000120: 6b01 bc0a 6c01 bc0a 6d01 bc0a 6e01 bc0a k...l...m...n...
--00000130: 6f01 bc0a 7001 bc0a 7101 bc0a 7201 bc0a o...p...q...r...
--00000140: 7301 bc0a 7401 bc0a 7501 bc0a 7601 bc0a s...t...u...v...
--00000150: 7701 bc0a 7801 bc0a 7901 bc0a 7a01 bc0a w...x...y...z...
--00000160: 7b01 bc0a 7c01 bc0a 7d01 bc0a 7e01 bc0a {...|...}...~...
--00000170: 7f01 bc0a 8001 bc0a 8101 bc0a 8201 bc0a ................
--00000180: 8301 bc0a 8401 bc0a 8501 bc0a 8601 bc0a ................
--00000000: 2301 bc0a 2201 bc0a 2101 bc0a 2001 bc0a #..."...!... ...
--00000010: 1f01 bc0a 1e01 bc0a 1d01 bc0a 1c01 bc0a ................
--00000020: 1b01 bc0a 1a01 bc0a 1901 bc0a 1801 bc0a ................
--00000030: 1701 bc0a 1601 bc0a 1501 bc0a 1401 bc0a ................
--00000040: 1301 bc0a 1201 bc0a 1101 bc0a 1001 bc0a ................
--00000050: 0f01 bc0a 0e01 bc0a 0d01 bc0a 0c01 bc0a ................
--00000060: 0b01 bc0a 0a01 bc0a 0901 bc0a 0801 bc0a ................
--00000070: 0701 bc0a 0601 bc0a 0501 bc0a 0401 bc0a ................
--00000080: 0301 bc0a 0201 bc0a 0101 bc0a 0001 bc0a ................
--00000090: ff00 bc0a fe00 bc0a fd00 bc0a fc00 bc0a ................
--000000a0: fb00 bc0a fa00 bc0a f900 bc0a f800 bc0a ................
--000000b0: f700 bc0a f600 bc0a f500 bc0a f400 bc0a ................
--000000c0: f300 bc0a f200 bc0a f100 bc0a f000 bc0a ................
--000000d0: ef00 bc0a ee00 bc0a ed00 bc0a ec00 bc0a ................
--000000e0: eb00 bc0a ea00 bc0a e900 bc0a e800 bc0a ................
--000000f0: e700 bc0a e600 bc0a e500 bc0a e400 bc0a ................
--00000100: e300 bc0a e200 bc0a e100 bc0a e000 bc0a ................
--00000110: df00 bc0a de00 bc0a dd00 bc0a dc00 bc0a ................
--00000120: db00 bc0a da00 bc0a d900 bc0a d800 bc0a ................
--00000130: d700 bc0a d600 bc0a d500 bc0a d400 bc0a ................
--00000140: d300 bc0a d200 bc0a d100 bc0a d000 bc0a ................
--00000150: cf00 bc0a ce00 bc0a cd00 bc0a cc00 bc0a ................
--00000160: cb00 bc0a ca00 bc0a c900 bc0a c800 bc0a ................
--00000170: c700 bc0a c600 bc0a c500 bc0a c400 bc0a ................
--00000180: c300 bc0a c200 bc0a c100 bc0a c000 bc0a ...
-- Mike Treseler