From 171fda11694427db53ac842096baee776de8fe87 Mon Sep 17 00:00:00 2001
From: James Talbert <jtalbert@iastate.edu>
Date: Mon, 1 Oct 2018 16:06:23 -0500
Subject: [PATCH] Setup vivado scripts for automated testing

---
 .../get_simulation_result.tcl                 |  6 +++
 .../pwm_recorder_1.0/hdl/kernel_tester.vhd    | 42 +++++++++++++++----
 quad/ip_repo/pwm_recorder_1.0/kernel_test.prj |  2 +
 quad/ip_repo/pwm_recorder_1.0/kernel_test.sh  |  4 ++
 4 files changed, 46 insertions(+), 8 deletions(-)
 create mode 100644 quad/ip_repo/pwm_recorder_1.0/get_simulation_result.tcl
 create mode 100644 quad/ip_repo/pwm_recorder_1.0/kernel_test.prj
 create mode 100755 quad/ip_repo/pwm_recorder_1.0/kernel_test.sh

diff --git a/quad/ip_repo/pwm_recorder_1.0/get_simulation_result.tcl b/quad/ip_repo/pwm_recorder_1.0/get_simulation_result.tcl
new file mode 100644
index 000000000..6d73376cb
--- /dev/null
+++ b/quad/ip_repo/pwm_recorder_1.0/get_simulation_result.tcl
@@ -0,0 +1,6 @@
+#!/bin/bash
+set signal [get_objects /*_tester/passing]
+set fd [open "result.log" "w"]
+run all
+puts $fd [get_value $signal]
+quit
\ No newline at end of file
diff --git a/quad/ip_repo/pwm_recorder_1.0/hdl/kernel_tester.vhd b/quad/ip_repo/pwm_recorder_1.0/hdl/kernel_tester.vhd
index a9f79d2e3..7b65c6cc9 100644
--- a/quad/ip_repo/pwm_recorder_1.0/hdl/kernel_tester.vhd
+++ b/quad/ip_repo/pwm_recorder_1.0/hdl/kernel_tester.vhd
@@ -53,6 +53,7 @@ architecture testbench of kernel_tester is
     signal count : std_logic_vector(31 downto 0);
     signal write : std_logic;
     signal done : std_logic := '0';
+    signal passing : std_logic := '0';
     
 begin
     UUT: pwm_rec
@@ -67,6 +68,8 @@ begin
         variable period : integer;
         
     begin
+        passing <='1';
+        
         reset_n <='0';
         wait for 2*CLK_HPER;
         reset_n <='1';
@@ -78,7 +81,10 @@ begin
         wait for period*2*CLK_HPER;
         pwm <= '0';
         wait until write='1';
-        ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
+        if (count /= std_logic_vector(to_unsigned(period, 32))) then
+          REPORT "Incorrect COUNT result" SEVERITY FAILURE;
+          passing <='0';
+        end if;
         
         period := 200;
         pwm <= '0';
@@ -87,8 +93,11 @@ begin
         wait for period*2*CLK_HPER;
         pwm <= '0';
         wait until write='1';
-        ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
-        
+        if (count /= std_logic_vector(to_unsigned(period, 32))) then
+          REPORT "Incorrect COUNT result" SEVERITY FAILURE;
+          passing <='0';
+        end if;
+                
         period := 300;
         pwm <= '0';
         wait for CLK_HPER*2*20;
@@ -96,7 +105,10 @@ begin
         wait for period*2*CLK_HPER;
         pwm <= '0';
         wait until write='1';
-        ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
+        if (count /= std_logic_vector(to_unsigned(period, 32))) then
+          REPORT "Incorrect COUNT result" SEVERITY FAILURE;
+          passing <='0';
+        end if;
         
         period := 400;
         pwm <= '0';
@@ -105,7 +117,10 @@ begin
         wait for period*2*CLK_HPER;
         pwm <= '0';
         wait until write='1';
-        ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
+        if (count /= std_logic_vector(to_unsigned(period, 32))) then
+          REPORT "Incorrect COUNT result" SEVERITY FAILURE;
+          passing <='0';
+        end if;
         
         period := 10;
         pwm <= '0';
@@ -115,7 +130,10 @@ begin
         pwm <= '0';
         for t in 0 to 100 loop
             wait for 2*CLK_HPER;
-            ASSERT write='0' REPORT "Glitch not Ignored" SEVERITY FAILURE;
+            if (write /= '0') then
+              REPORT "Glitch not Ignored" SEVERITY FAILURE;
+              passing <='0';
+            end if;
         end loop;
         
         -- Run for 45, glitch for 10, then run for 45, expect a result of 100
@@ -130,12 +148,20 @@ begin
         wait for 45*2*CLK_HPER;
         pwm <= '0';
         wait until write='1';
-        ASSERT count=std_logic_vector(to_unsigned(period, 32)) REPORT "Incorrect COUNT result" SEVERITY FAILURE;
+        if (count /= std_logic_vector(to_unsigned(period, 32))) then
+          REPORT "Incorrect COUNT result" SEVERITY FAILURE;
+          passing <='0';
+        end if;
         
         done <='1';
+        
+        if (passing = '0') then
+            -- output test faulure?
+        end if;
+        
         wait;
     end process;
-    
+        
     clock_proc: process
     begin
         clk <= '0';
diff --git a/quad/ip_repo/pwm_recorder_1.0/kernel_test.prj b/quad/ip_repo/pwm_recorder_1.0/kernel_test.prj
new file mode 100644
index 000000000..82dec23a2
--- /dev/null
+++ b/quad/ip_repo/pwm_recorder_1.0/kernel_test.prj
@@ -0,0 +1,2 @@
+vhdl work src/pwm_rec.vhd
+vhdl work hdl/kernel_tester.vhd
diff --git a/quad/ip_repo/pwm_recorder_1.0/kernel_test.sh b/quad/ip_repo/pwm_recorder_1.0/kernel_test.sh
new file mode 100755
index 000000000..f5f495bb1
--- /dev/null
+++ b/quad/ip_repo/pwm_recorder_1.0/kernel_test.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+xelab --debug wave -prj kernel_test.prj -s run_kernel_test work.kernel_tester
+xsim run_kernel_test -wdb pwm_record_kernel_test.wdb --t get_simulation_result.tcl
+
-- 
GitLab