aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/formal/gates/test_asr.vhd
diff options
context:
space:
mode:
authorXiretza <xiretza@xiretza.xyz>2020-03-21 20:48:32 +0100
committertgingold <tgingold@users.noreply.github.com>2020-03-22 08:13:31 +0100
commit63bb08a0893209bd0b1f13e9ab5c3e585ed43514 (patch)
tree854ae38d5202ee361ad2389e26b3fb84a9e6517c /testsuite/formal/gates/test_asr.vhd
parentd11471a86eebd0e041032bce74672744ec48ee61 (diff)
downloadghdl-yosys-plugin-63bb08a0893209bd0b1f13e9ab5c3e585ed43514.tar.gz
ghdl-yosys-plugin-63bb08a0893209bd0b1f13e9ab5c3e585ed43514.tar.bz2
ghdl-yosys-plugin-63bb08a0893209bd0b1f13e9ab5c3e585ed43514.zip
Move formal tests for gates into single subdirectory
Diffstat (limited to 'testsuite/formal/gates/test_asr.vhd')
-rw-r--r--testsuite/formal/gates/test_asr.vhd79
1 files changed, 79 insertions, 0 deletions
diff --git a/testsuite/formal/gates/test_asr.vhd b/testsuite/formal/gates/test_asr.vhd
new file mode 100644
index 0000000..dac8cd2
--- /dev/null
+++ b/testsuite/formal/gates/test_asr.vhd
@@ -0,0 +1,79 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+
+entity test_asr is
+ port (
+ -- globals
+ reset : in std_logic;
+ clk : in std_logic;
+ -- inputs
+ sig : in signed(7 downto 0);
+ -- outputs
+ asr : out signed(7 downto 0)
+ );
+end entity test_asr;
+
+
+architecture rtl of test_asr is
+
+ signal index : natural;
+
+begin
+
+ process (clk) is
+ begin
+ if rising_edge(clk) then
+ if reset = '1' then
+ index <= 0;
+ asr <= x"00";
+ else
+ asr <= shift_right(sig, index);
+ if index < natural'high then
+ index <= index + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+ Formal : block is
+
+ signal sig_d : signed(7 downto 0);
+ signal sig_d_7 : signed(7 downto 0);
+
+ begin
+
+ default clock is rising_edge(clk);
+ restrict {reset[*1]; not reset[+]}[*1];
+
+ -- Register inputs
+ -- Workaround for missing prev() PSL function
+ process (clk) is
+ begin
+ if rising_edge(clk) then
+ sig_d <= sig;
+ end if;
+ end process;
+
+ -- helper signal for sign extension
+ sig_d_7 <= (others => sig_d(7));
+
+ assert reset -> next asr = "00000000";
+ -- Workaround for missing IIR_PREDEFINED_IEEE_NUMERIC_STD_EQ_SGN_INT
+ -- Comparing with hex literals like x"00" in PSL code generates an error:
+ -- no declaration for ""
+
+ shift_aright_0 : assert always not reset and index = 0 -> next asr = sig_d;
+ shift_aright_1 : assert always not reset and index = 1 -> next asr = sig_d_7(7) & sig_d(7 downto 1);
+ shift_aright_2 : assert always not reset and index = 2 -> next asr = sig_d_7(7 downto 6) & sig_d(7 downto 2);
+ shift_aright_3 : assert always not reset and index = 3 -> next asr = sig_d_7(7 downto 5) & sig_d(7 downto 3);
+ shift_aright_4 : assert always not reset and index = 4 -> next asr = sig_d_7(7 downto 4) & sig_d(7 downto 4);
+ shift_aright_5 : assert always not reset and index = 5 -> next asr = sig_d_7(7 downto 3) & sig_d(7 downto 5);
+ shift_aright_6 : assert always not reset and index = 6 -> next asr = sig_d_7(7 downto 2) & sig_d(7 downto 6);
+ shift_aright_7 : assert always not reset and index = 7 -> next asr = sig_d_7(7 downto 1) & sig_d(7);
+ shift_aright_8 : assert always not reset and index >= 8 -> next asr = sig_d_7;
+
+ end block Formal;
+
+end architecture rtl;