From 07c30b37ebb7a3a63158990e1e327a62305cec3a Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Sun, 11 Jan 2015 06:19:01 +0100 Subject: Add testcase for ticket29. --- testsuite/gna/ticket29/debugtools.vhdl | 84 ++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 testsuite/gna/ticket29/debugtools.vhdl (limited to 'testsuite/gna/ticket29/debugtools.vhdl') 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; -- cgit