summaryrefslogtreecommitdiff
path: root/testsuite/gna/ticket29/debugtools.vhdl
diff options
context:
space:
mode:
authorTristan Gingold2015-01-11 06:19:01 +0100
committerTristan Gingold2015-01-11 06:19:01 +0100
commit07c30b37ebb7a3a63158990e1e327a62305cec3a (patch)
treeb22393ff72d6de4c11991ae7cf922e2edc223b14 /testsuite/gna/ticket29/debugtools.vhdl
parenta17d3d80a095bf4e9daa8815aeca42af0fcc5fd5 (diff)
downloadghdl-07c30b37ebb7a3a63158990e1e327a62305cec3a.tar.gz
ghdl-07c30b37ebb7a3a63158990e1e327a62305cec3a.tar.bz2
ghdl-07c30b37ebb7a3a63158990e1e327a62305cec3a.zip
Add testcase for ticket29.
Diffstat (limited to 'testsuite/gna/ticket29/debugtools.vhdl')
-rw-r--r--testsuite/gna/ticket29/debugtools.vhdl84
1 files changed, 84 insertions, 0 deletions
diff --git a/testsuite/gna/ticket29/debugtools.vhdl b/testsuite/gna/ticket29/debugtools.vhdl
new file mode 100644
index 0000000..0665a70
--- /dev/null
+++ b/testsuite/gna/ticket29/debugtools.vhdl
@@ -0,0 +1,84 @@
+library ieee;
+use Std.TextIO.all;
+use ieee.STD_LOGIC_1164.all;
+use ieee.numeric_std.all;
+
+package debugtools is
+
+ function to_string(sv: Std_Logic_Vector) return string;
+ function to_hstring(sv: Std_Logic_Vector) return string;
+ function to_hstring(sv: unsigned) return string;
+ procedure HWRITE(L:inout LINE; VALUE:in BIT_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0);
+
+end debugtools;
+
+package body debugtools is
+
+ procedure HWRITE(L:inout LINE; VALUE:in BIT_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ variable quad: bit_vector(0 to 3);
+ constant ne: integer := value'length/4;
+ variable bv: bit_vector(0 to value'length-1) := value;
+ variable s: string(1 to ne);
+ begin
+ if value'length mod 4 /= 0 then
+ assert FALSE report
+ "HWRITE Error: Trying to read vector " &
+ "with an odd (non multiple of 4) length";
+ return;
+ end if;
+
+ for i in 0 to ne-1 loop
+ quad := bv(4*i to 4*i+3);
+ case quad is
+ when x"0" => s(i+1) := '0';
+ when x"1" => s(i+1) := '1';
+ when x"2" => s(i+1) := '2';
+ when x"3" => s(i+1) := '3';
+ when x"4" => s(i+1) := '4';
+ when x"5" => s(i+1) := '5';
+ when x"6" => s(i+1) := '6';
+ when x"7" => s(i+1) := '7';
+ when x"8" => s(i+1) := '8';
+ when x"9" => s(i+1) := '9';
+ when x"A" => s(i+1) := 'A';
+ when x"B" => s(i+1) := 'B';
+ when x"C" => s(i+1) := 'C';
+ when x"D" => s(i+1) := 'D';
+ when x"E" => s(i+1) := 'E';
+ when x"F" => s(i+1) := 'F';
+ end case;
+ end loop;
+ write(L, s, JUSTIFIED, FIELD);
+ end HWRITE;
+
+ function to_string(sv: Std_Logic_Vector) return string is
+ use Std.TextIO.all;
+
+ variable bv: bit_vector(sv'range) := to_bitvector(sv);
+ variable lp: line;
+ begin
+ write(lp, bv);
+ return lp.all;
+ end;
+
+ function to_hstring(sv: Std_Logic_Vector) return string is
+ use Std.TextIO.all;
+
+ variable bv: bit_vector(sv'range) := to_bitvector(sv);
+ variable lp: line;
+ begin
+ hwrite(lp, bv);
+ return lp.all;
+ end;
+
+ function to_hstring(sv: unsigned) return string is
+ use Std.TextIO.all;
+
+ begin
+ return to_hstring(std_logic_vector(sv));
+ end;
+
+
+end debugtools;