diff options
Diffstat (limited to 'testsuite/gna/issue376/util.vhdl')
-rw-r--r-- | testsuite/gna/issue376/util.vhdl | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/testsuite/gna/issue376/util.vhdl b/testsuite/gna/issue376/util.vhdl new file mode 100644 index 000000000..94100ce8f --- /dev/null +++ b/testsuite/gna/issue376/util.vhdl @@ -0,0 +1,191 @@ +library ieee ; + use ieee.std_logic_1164.all ; + +library std; + use std.textio.all; + + +-- Utility package +package util is + + procedure nop( signal clock : in std_logic ; count : in natural ) ; + +end package ; + +package body util is + + procedure nop( signal clock : in std_logic ; count : in natural ) is + begin + for i in 1 to count loop + wait until rising_edge( clock ) ; + end loop ; + end procedure ; + +end package body ; + +library ieee ; + use ieee.std_logic_1164.all ; + use ieee.numeric_std.all; +library std; + use std.textio.all; + + +entity data_saver is + generic( + FILENAME : string := "file.dat"; + DATA_WIDTH : natural := 16 + ); + port( + reset : in std_logic; + clock : in std_logic; + data : std_logic_vector(DATA_WIDTH-1 downto 0); + data_valid : std_logic + ); +end entity; + + +architecture arch of data_saver is +begin + + handler : process + FILE fp : text; + variable line_data : line; + begin + -- + wait until falling_edge(reset); + + file_open(fp, FILENAME, WRITE_MODE); + + while (reset = '0') loop + wait until rising_edge(data_valid); + write(line_data, data); + writeline(fp,line_data); + end loop; + file_close(fp); + end process; +end architecture; + + +library ieee ; + use ieee.std_logic_1164.all ; + use ieee.numeric_std.all; +library std; + use std.textio.all; + + +entity signed_saver is + generic( + FILENAME : string := "file.dat"; + DATA_WIDTH : natural := 16 + ); + port( + reset : in std_logic; + clock : in std_logic; + data : signed(DATA_WIDTH-1 downto 0); + data_valid : std_logic + ); +end entity; + + +architecture arch of signed_saver is +begin + + handler : process + FILE fp : text; + variable line_data : line; + begin + -- + wait until falling_edge(reset); + + file_open(fp, FILENAME, WRITE_MODE); + + while (reset = '0') loop + wait until rising_edge(clock); + + if data_valid = '1' then + write(line_data, (to_integer(data))); + writeline(fp,line_data); + end if; + end loop; + file_close(fp); + end process; +end architecture; + + + +library ieee ; + use ieee.std_logic_1164.all ; + use ieee.numeric_std.all; +library std; + use std.textio.all; + + +entity data_reader is + generic( + FILENAME : string := "file.dat"; + DATA_WIDTH : natural := 16 + ); + port( + reset : in std_logic; + clock : in std_logic; + data_request : in std_logic; + data : out std_logic_vector(DATA_WIDTH-1 downto 0); + data_valid : out std_logic + ); +end entity; + + +architecture arch of data_reader is + + type character_array_t is array (natural range <>) of character; +begin + + handler : process + variable line_data : line; + variable tmp : integer; + variable c : character;--_array_t(0 to 3); + + type bin_t is file of character ; + file fp : bin_t ; + variable fs : file_open_status ; + begin + -- + data <= (others => '0'); + data_valid <= '0'; + wait until falling_edge(reset); + + file_open(fs, fp, FILENAME, READ_MODE); + + if( fs /= OPEN_OK ) then + report "File open issues" severity failure ; + end if ; + + --readline(fp,line_data); + while (reset = '0') loop + + wait until rising_edge(clock); + data_valid <= '0'; + + if data_request = '1' then + read(fp, c); + tmp := integer(natural(character'pos(c))); + data(7 downto 0) <= std_logic_vector(to_unsigned(tmp,8)); + read(fp, c); + tmp := integer(natural(character'pos(c))); + data(15 downto 8) <= std_logic_vector(to_unsigned(tmp,8)); + read(fp, c); + tmp := integer(natural(character'pos(c))); + data(23 downto 16) <= std_logic_vector(to_unsigned(tmp,8)); + read(fp, c); + tmp := integer(natural(character'pos(c))); + data(31 downto 24) <= std_logic_vector(to_unsigned(tmp,8)); + + data_valid <= '1'; + wait until rising_edge(clock); + data_valid <= '0'; + end if; + + end loop; + file_close(fp); + end process; +end architecture; |