tb/alu: ueberpruefe ob wirklich alle testfaelle erfolgreich waren
authorBernhard Urban <lewurm@gmail.com>
Sun, 25 Apr 2010 14:30:09 +0000 (16:30 +0200)
committerBernhard Urban <lewurm@gmail.com>
Sun, 25 Apr 2010 14:30:09 +0000 (16:30 +0200)
spec/TODO
src/beh_alu_tb.vhd
src/post_alu_tb.vhd

index 3a6ec90015dd767531a1488217207861d1a1e304..adcfcafb1b2c1203a6ae2659e00c9cfb132205e3 100644 (file)
--- a/spec/TODO
+++ b/spec/TODO
@@ -2,3 +2,4 @@
 - signale einheitlicher benennen
 - buttonmodul (mit debouncing) fuer reset und rs232 dump
 - am liebsten haette ich (das gilt auch fuer unsere spezifikation) moore-state-machines.
+- ALU braucht noch ein error flag (fuer division durch null und overflow)
index fb9382cbbc09667de2dcad15298c35e109c4989c..f4f77c3073db6a070d1ff3a44b5640e55db71033 100644 (file)
@@ -59,7 +59,7 @@ begin
                end record alu_testv;
 
                -- ggf. groesse des arrays erhoehen
-               type alu_testv_array is array (natural range 0 to 20) of alu_testv;
+               type alu_testv_array is array (natural range 0 to 30) of alu_testv;
 
                variable testmatrix : alu_testv_array :=
                        ( 0 => (-5, ALU_DIV, 3, -1),
@@ -82,7 +82,7 @@ begin
                          17 => (-153156, ALU_DIV, -3543, 43),
                          others => (0, ALU_ADD, 0, 0)
                        );
-
+               variable checkall : boolean := true;
        begin
                -- init & reset
                sys_res_n <= '0';
@@ -114,13 +114,20 @@ begin
                                "/= " & integer'image(to_integer(op3)) &
                                " -- erwartet: " & cinteger'image(testmatrix(i).expected);
 
+                       if op3 /= to_signed(testmatrix(i).expected,CBITS) then
+                               checkall := false;
+                       end if;
+
                        icwait(sys_clk, 2);
                        -- ack it!
                        do_calc <= '0';
                end loop;
 
-               assert false
+               if checkall then
                        report "alle testfaelle der ALU waren erfolgreich!";
+               else
+                       report "nicht alle testfaelle der ALU waren erfolgreich!";
+               end if;
                stop <= true;
                wait;
        end process;
index 7a960787ac4ac5a4af685898ada14ce7d43d551b..a91426aee1f32fbf92e747507155af0e696f17e5 100644 (file)
@@ -82,7 +82,7 @@ begin
                          17 => (-153156, ALU_DIV, -3543, 43),
                          others => (0, ALU_ADD, 0, 0)
                        );
-
+               variable checkall : boolean := true;
        begin
                -- init & reset
                sys_res_n <= '0';
@@ -113,14 +113,20 @@ begin
                                " " & cinteger'image(testmatrix(i).o2) &
                                "/= " & integer'image(to_integer(signed(op3))) &
                                " -- erwartet: " & cinteger'image(testmatrix(i).expected);
+                       if op3 /= std_logic_vector(to_signed(testmatrix(i).expected,CBITS)) then
+                               checkall := false;
+                       end if;
 
                        icwait(sys_clk, 2);
                        -- ack it!
                        do_calc <= '0';
                end loop;
 
-               assert false
+               if checkall then
                        report "alle testfaelle der ALU waren erfolgreich!";
+               else
+                       report "nicht alle testfaelle der ALU waren erfolgreich!";
+               end if;
                stop <= true;
                wait;
        end process;