Fix multiply_tb
authorAnton Blanchard <anton@linux.ibm.com>
Fri, 13 Sep 2019 10:35:08 +0000 (20:35 +1000)
committerAnton Blanchard <anton@ozlabs.org>
Sun, 15 Sep 2019 12:44:01 +0000 (22:44 +1000)
Signed-off-by: Anton Blanchard <anton@linux.ibm.com>
Makefile
multiply_tb.vhdl

index 431170f2dc267b415460323e83a0d526a4e70a03..40797e691cf609551be31c80f9be0c30b0f3dd5d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@ GHDL=ghdl
 GHDLFLAGS=--std=08
 CFLAGS=-O2 -Wall
 
-all = core_tb simple_ram_behavioural_tb soc_reset_tb icache_tb
+all = core_tb simple_ram_behavioural_tb soc_reset_tb icache_tb multiply_tb
 # XXX
 # loadstore_tb fetch_tb
 
@@ -61,6 +61,9 @@ icache_tb: icache_tb.o
 loadstore_tb: loadstore_tb.o
        $(GHDL) -e $(GHDLFLAGS) $@
 
+multiply_tb: multiply_tb.o
+       $(GHDL) -e $(GHDLFLAGS) $@
+
 simple_ram_tb: simple_ram_tb.o
        $(GHDL) -e $(GHDLFLAGS) $@
 
index 1eb90db74fcd793ac0fcdd5adc60c4f212b89b9a..ee448a0d722059937c4e3acd473808b70dbb614c 100644 (file)
@@ -3,6 +3,7 @@ use ieee.std_logic_1164.all;
 use ieee.numeric_std.all;
 
 library work;
+use work.decode_types.all;
 use work.common.all;
 use work.glibc_random.all;
 use work.ppc_fx_insns.all;
@@ -14,9 +15,9 @@ architecture behave of multiply_tb is
        signal clk          : std_ulogic;
        constant clk_period : time := 10 ns;
 
-       constant pipeline_depth: integer := 6;
+       constant pipeline_depth: integer := 4;
 
-       signal m1           : DecodeToMultiplyType;
+       signal m1           : Decode2ToMultiplyType;
        signal m2           : MultiplyToWritebackType;
 begin
        multiply_0: entity work.multiply
@@ -38,8 +39,7 @@ begin
                wait for clk_period;
 
                m1.valid <= '1';
-               m1.mul_type <= LOWER_64;
-               m1.nia <= (others => '0');
+               m1.insn_type <= OP_MUL_L64;
                m1.write_reg <= "10001";
                m1.data1 <= '0' & x"0000000000001000";
                m1.data2 <= '0' & x"0000000000001111";
@@ -58,9 +58,9 @@ begin
 
                wait for clk_period;
                assert m2.valid = '1';
-               assert m2.write_enable = '1';
-               assert m2.write_reg = "10001";
-               assert m2.write_data = x"0000000001111000";
+               assert m2.write_reg_enable = '1';
+               assert m2.write_reg_nr = "10001";
+               assert m2.write_reg_data = x"0000000001111000";
                assert m2.write_cr_enable = '0';
 
                wait for clk_period;
@@ -76,11 +76,11 @@ begin
 
                wait for clk_period * (pipeline_depth-1);
                assert m2.valid = '1';
-               assert m2.write_enable = '1';
-               assert m2.write_reg = "10001";
-               assert m2.write_data = x"0000000001111000";
+               assert m2.write_reg_enable = '1';
+               assert m2.write_reg_nr = "10001";
+               assert m2.write_reg_data = x"0000000001111000";
                assert m2.write_cr_enable = '1';
-               assert m2.cr = x"4";
+               assert m2.write_cr_data = x"40000000";
 
                -- test mulld
                mulld_loop : for i in 0 to 1000 loop
@@ -92,7 +92,7 @@ begin
                        m1.data1 <= '0' & ra;
                        m1.data2 <= '0' & rb;
                        m1.valid <= '1';
-                       m1.mul_type <= LOWER_64;
+                       m1.insn_type <= OP_MUL_L64;
 
                        wait for clk_period;
 
@@ -102,8 +102,8 @@ begin
 
                        assert m2.valid = '1';
 
-                       assert to_hstring(behave_rt) = to_hstring(m2.write_data)
-                               report "bad mulld expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_data);
+                       assert to_hstring(behave_rt) = to_hstring(m2.write_reg_data)
+                               report "bad mulld expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_reg_data);
                end loop;
 
                -- test mulhdu
@@ -116,7 +116,7 @@ begin
                        m1.data1 <= '0' & ra;
                        m1.data2 <= '0' & rb;
                        m1.valid <= '1';
-                       m1.mul_type <= UPPER_64;
+                       m1.insn_type <= OP_MUL_H64;
 
                        wait for clk_period;
 
@@ -126,8 +126,8 @@ begin
 
                        assert m2.valid = '1';
 
-                       assert to_hstring(behave_rt) = to_hstring(m2.write_data)
-                               report "bad mulhdu expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_data);
+                       assert to_hstring(behave_rt) = to_hstring(m2.write_reg_data)
+                               report "bad mulhdu expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_reg_data);
                end loop;
 
                -- test mulhd
@@ -140,7 +140,7 @@ begin
                        m1.data1 <= ra(63) & ra;
                        m1.data2 <= rb(63) & rb;
                        m1.valid <= '1';
-                       m1.mul_type <= UPPER_64;
+                       m1.insn_type <= OP_MUL_H64;
 
                        wait for clk_period;
 
@@ -150,8 +150,8 @@ begin
 
                        assert m2.valid = '1';
 
-                       assert to_hstring(behave_rt) = to_hstring(m2.write_data)
-                               report "bad mulhd expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_data);
+                       assert to_hstring(behave_rt) = to_hstring(m2.write_reg_data)
+                               report "bad mulhd expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_reg_data);
                end loop;
 
                -- test mullw
@@ -166,7 +166,7 @@ begin
                        m1.data2 <= (others => rb(31));
                        m1.data2(31 downto 0) <= rb(31 downto 0);
                        m1.valid <= '1';
-                       m1.mul_type <= LOWER_64;
+                       m1.insn_type <= OP_MUL_L64;
 
                        wait for clk_period;
 
@@ -176,8 +176,8 @@ begin
 
                        assert m2.valid = '1';
 
-                       assert to_hstring(behave_rt) = to_hstring(m2.write_data)
-                               report "bad mullw expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_data);
+                       assert to_hstring(behave_rt) = to_hstring(m2.write_reg_data)
+                               report "bad mullw expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_reg_data);
                end loop;
 
                -- test mulhw
@@ -192,7 +192,7 @@ begin
                        m1.data2 <= (others => rb(31));
                        m1.data2(31 downto 0) <= rb(31 downto 0);
                        m1.valid <= '1';
-                       m1.mul_type <= UPPER_32;
+                       m1.insn_type <= OP_MUL_H32;
 
                        wait for clk_period;
 
@@ -202,8 +202,8 @@ begin
 
                        assert m2.valid = '1';
 
-                       assert to_hstring(behave_rt) = to_hstring(m2.write_data)
-                               report "bad mulhw expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_data);
+                       assert to_hstring(behave_rt) = to_hstring(m2.write_reg_data)
+                               report "bad mulhw expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_reg_data);
                end loop;
 
                -- test mulhwu
@@ -218,7 +218,7 @@ begin
                        m1.data2 <= (others => '0');
                        m1.data2(31 downto 0) <= rb(31 downto 0);
                        m1.valid <= '1';
-                       m1.mul_type <= UPPER_32;
+                       m1.insn_type <= OP_MUL_H32;
 
                        wait for clk_period;
 
@@ -228,8 +228,8 @@ begin
 
                        assert m2.valid = '1';
 
-                       assert to_hstring(behave_rt) = to_hstring(m2.write_data)
-                               report "bad mulhwu expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_data);
+                       assert to_hstring(behave_rt) = to_hstring(m2.write_reg_data)
+                               report "bad mulhwu expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_reg_data);
                end loop;
 
                -- test mulli
@@ -243,7 +243,7 @@ begin
                        m1.data2 <= (others => si(15));
                        m1.data2(15 downto 0) <= si;
                        m1.valid <= '1';
-                       m1.mul_type <= LOWER_64;
+                       m1.insn_type <= OP_MUL_L64;
 
                        wait for clk_period;
 
@@ -253,8 +253,8 @@ begin
 
                        assert m2.valid = '1';
 
-                       assert to_hstring(behave_rt) = to_hstring(m2.write_data)
-                               report "bad mulli expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_data);
+                       assert to_hstring(behave_rt) = to_hstring(m2.write_reg_data)
+                               report "bad mulli expected " & to_hstring(behave_rt) & " got " & to_hstring(m2.write_reg_data);
                end loop;
 
                assert false report "end of test" severity failure;