diff options
Diffstat (limited to 'testsuite/gna/issue795/ex.vhdl')
-rw-r--r-- | testsuite/gna/issue795/ex.vhdl | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/testsuite/gna/issue795/ex.vhdl b/testsuite/gna/issue795/ex.vhdl new file mode 100644 index 000000000..4a8654ff5 --- /dev/null +++ b/testsuite/gna/issue795/ex.vhdl @@ -0,0 +1,71 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.csv_file_reader_pkg.all; +-- csv file should be in format +-- sync period,v1hexvalue,v2integervalue,v3hexvalue,comment +-- eg 123445,AD45,234,F00D,"test line, for crash example" +-- +entity crashExample is + port ( + vctrFlNm : in string; + fEnd : out boolean; + syncCount : out integer; + syncPulse : out std_logic; + v1 : out std_logic_vector(15 downto 0); + v2 : out std_logic_vector(15 downto 0); + v3 : out std_logic_vector(15 downto 0); + vctrCmt : out string + ); +end entity crashExample; + +architecture BEHAVIORAL of crashExample is + signal commentString : string(1 to LINE_LENGTH_MAX); + signal syncCntInt : integer; + constant SYN_PLSE_PRD : time := 4000 ns; +begin + + -- comment map + vctrCmt <= commentString; + + -- Vector Process + prcs_VctrRead : process + variable csv : csv_file_reader_type; + variable syncPeriod : time; + begin + -- initialse end flag + fEnd <= false; + -- open file + csv.initialize(vctrFlNm); + -- read first line of file which should be a comment + csv.readline; + -- initalise variables/signals + syncCntInt <= 0; + -- while (not end of file) + while not csv.end_of_file loop + -- read information until next SYN command is found + csv.readline; + -- read Sync period + syncPeriod := csv.read_integer * 1 ns; + -- read Hex integer + v1 <= std_logic_vector(to_unsigned(csv.read_hex, v1'length)); + -- read normal integer + v2 <= std_logic_vector(to_unsigned(csv.read_integer, v2'length)); + -- read Hex integer + v3 <= std_logic_vector(to_unsigned(csv.read_hex, v3'length)); + -- read String comment + commentString <= csv.read_string; + -- Make sync pulse + syncPulse <= '1'; + syncCount <= syncCntInt; + wait for SYN_PLSE_PRD; + syncPulse <= '0'; + -- wait for the sync period + wait for (syncPeriod - SYN_PLSE_PRD); + syncCntInt <= syncCntInt + 1; + end loop; + fEnd <= true; + wait; -- end simulation + end process prcs_VctrRead; + +end BEHAVIORAL; |