From 0817aac6f2e0a78e03c492de65f1ec12bc76cc06 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Sun, 25 Apr 2010 16:30:09 +0200 Subject: [PATCH] tb/alu: ueberpruefe ob wirklich alle testfaelle erfolgreich waren --- spec/TODO | 1 + src/beh_alu_tb.vhd | 13 ++++++++++--- src/post_alu_tb.vhd | 10 ++++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/spec/TODO b/spec/TODO index 3a6ec90..adcfcaf 100644 --- 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) diff --git a/src/beh_alu_tb.vhd b/src/beh_alu_tb.vhd index fb9382c..f4f77c3 100644 --- a/src/beh_alu_tb.vhd +++ b/src/beh_alu_tb.vhd @@ -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; diff --git a/src/post_alu_tb.vhd b/src/post_alu_tb.vhd index 7a96078..a91426a 100644 --- a/src/post_alu_tb.vhd +++ b/src/post_alu_tb.vhd @@ -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; -- 2.25.1