summaryrefslogtreecommitdiff
path: root/testsuite/gna/ticket20/morten1.vhdl
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/gna/ticket20/morten1.vhdl')
-rw-r--r--testsuite/gna/ticket20/morten1.vhdl91
1 files changed, 91 insertions, 0 deletions
diff --git a/testsuite/gna/ticket20/morten1.vhdl b/testsuite/gna/ticket20/morten1.vhdl
new file mode 100644
index 0000000..3881f65
--- /dev/null
+++ b/testsuite/gna/ticket20/morten1.vhdl
@@ -0,0 +1,91 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+-- library std;
+use std.textio.all;
+
+entity morten is
+end entity;
+
+architecture foo of morten is
+
+ signal clk: std_logic := '0';
+ signal rst: std_logic := '1';
+ signal cnt_1: unsigned (7 downto 0);
+ signal cnt_3: unsigned (7 downto 0);
+
+ function to_bstring(sl : std_logic) return string is
+ begin
+ return "" & std_logic'image(sl)(2); -- "" & character to get string
+ end function;
+
+ function to_bstring(slv : std_logic_vector) return string is
+ alias slv_norm : std_logic_vector(1 to slv'length) is slv;
+ begin
+ if slv_norm'length = 0 then
+ return "";
+ elsif slv_norm'length = 1 then
+ return to_bstring(slv_norm(1));
+ else -- slv_norm'length > 0
+ return to_bstring(slv_norm(1)) & to_bstring(slv_norm(2 to slv_norm'length));
+ end if;
+ end function;
+
+begin
+
+
+PRINT:
+ process (clk) is
+ variable line_v : line;
+ file out_file : text open write_mode is "out.txt";
+ begin
+ if rising_edge(clk) then
+ write(line_v, to_bstring(rst) & " " &
+ to_bstring(std_logic_vector(cnt_1)) & " " &
+ to_bstring(std_logic_vector(cnt_3))
+ );
+ writeline(out_file, line_v);
+ end if;
+ end process;
+
+COUNTER1:
+ process (clk,rst)
+ begin
+ if rst = '1' then
+ cnt_1 <= (others => '0');
+ elsif rising_edge(clk) then
+ cnt_1 <= cnt_1 + 1;
+ end if;
+ end process;
+
+COUNTER3:
+ process (clk,rst)
+ begin
+ if rst = '1' then
+ cnt_3 <= (others => '0');
+ elsif rising_edge(clk) then
+ cnt_3 <= cnt_3 + 3;
+ end if;
+ end process;
+
+RESET:
+ process
+ begin
+ wait until rising_edge(clk);
+ wait until rising_edge(clk);
+ wait until rising_edge(clk);
+ rst <= '0';
+ wait;
+ end process;
+
+CLOCK:
+ process
+ begin
+ wait for 10 ns;
+ clk <= not clk;
+ if Now > 210 ns then
+ wait;
+ end if;
+ end process;
+
+end architecture; \ No newline at end of file