diff options
author | Tristan Gingold <tgingold@free.fr> | 2021-09-29 06:25:23 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2021-09-29 06:25:23 +0200 |
commit | e3ed9e2315c26c1262ba4360fca731fc69b9ad5b (patch) | |
tree | c1b5ba79a8824532f43daa79b6c70d99ad003ea6 | |
parent | fb2f80bacac9285970b6b406563a1d6495e3bb67 (diff) | |
download | ghdl-e3ed9e2315c26c1262ba4360fca731fc69b9ad5b.tar.gz ghdl-e3ed9e2315c26c1262ba4360fca731fc69b9ad5b.tar.bz2 ghdl-e3ed9e2315c26c1262ba4360fca731fc69b9ad5b.zip |
grt-vcd: exclude arrays from dump. Fix #1881
-rw-r--r-- | src/grt/grt-vcd.adb | 126 |
1 files changed, 67 insertions, 59 deletions
diff --git a/src/grt/grt-vcd.adb b/src/grt/grt-vcd.adb index 85b149141..7d59701d4 100644 --- a/src/grt/grt-vcd.adb +++ b/src/grt/grt-vcd.adb @@ -268,7 +268,6 @@ package body Grt.Vcd is pragma Unreferenced (Err); begin Put_Line ("Vcd.Avhpi_Error!"); - null; end Avhpi_Error; function Rti_To_Vcd_Kind (Rti : Ghdl_Rti_Access) return Vcd_Var_Type is @@ -516,68 +515,77 @@ package body Grt.Vcd is begin Get_Verilog_Wire (Sig, Vcd_El); - if Vcd_El.Vtype = Vcd_Bad - or else Vcd_El.Vtype = Vcd_Enum8 - then + case Vcd_El.Vtype is + when Vcd_Integer32 + | Vcd_Float64 + | Vcd_Bool + | Vcd_Bit + | Vcd_Stdlogic + | Vcd_Bitvector + | Vcd_Stdlogic_Vector => + -- Handled below. + null; + when others => + -- Not handled. + Vcd_Put ("$comment "); + Vcd_Put_Name (Sig); + Vcd_Put (" is not handled"); + --Vcd_Put (Ghdl_Type_Kind'Image (Desc.Kind)); + Vcd_Putc (' '); + Vcd_Put_End; + return; + end case; + + Vcd_Table.Increment_Last; + N := Vcd_Table.Last; + + Vcd_Table.Table (N) := Vcd_El; + Vcd_Put ("$var "); + case Vcd_El.Vtype is + when Vcd_Integer32 => + Vcd_Put ("integer 32"); + when Vcd_Float64 => + Vcd_Put ("real 64"); + when Vcd_Bool + | Vcd_Bit + | Vcd_Stdlogic => + Vcd_Put ("reg 1"); + when Vcd_Bitvector + | Vcd_Stdlogic_Vector => + Vcd_Put ("reg "); + Vcd_Put_I32 (Ghdl_I32 (Vcd_El.Vec_Range.I32.Len)); + when Vcd_Bad + | Vcd_Array + | Vcd_Struct + | Vcd_Enum8 => + raise Program_Error; + end case; + Vcd_Putc (' '); + Vcd_Put_Idcode (N); + Vcd_Putc (' '); + Vcd_Put_Name (Sig); + if Vcd_El.Vtype in Vcd_Var_Vectors then + Vcd_Putc ('['); + Vcd_Put_I32 (Vcd_El.Vec_Range.I32.Left); + Vcd_Putc (':'); + Vcd_Put_I32 (Vcd_El.Vec_Range.I32.Right); + Vcd_Putc (']'); + end if; + Vcd_Putc (' '); + Vcd_Put_End; + if Boolean'(False) then Vcd_Put ("$comment "); Vcd_Put_Name (Sig); - Vcd_Put (" is not handled"); - --Vcd_Put (Ghdl_Type_Kind'Image (Desc.Kind)); - Vcd_Putc (' '); - Vcd_Put_End; - return; - else - Vcd_Table.Increment_Last; - N := Vcd_Table.Last; - - Vcd_Table.Table (N) := Vcd_El; - Vcd_Put ("$var "); - case Vcd_El.Vtype is - when Vcd_Integer32 => - Vcd_Put ("integer 32"); - when Vcd_Float64 => - Vcd_Put ("real 64"); - when Vcd_Bool - | Vcd_Bit - | Vcd_Stdlogic => - Vcd_Put ("reg 1"); - when Vcd_Bitvector - | Vcd_Stdlogic_Vector => - Vcd_Put ("reg "); - Vcd_Put_I32 (Ghdl_I32 (Vcd_El.Vec_Range.I32.Len)); - when Vcd_Bad - | Vcd_Array - | Vcd_Struct - | Vcd_Enum8 => - null; + Vcd_Put (" is "); + case Vcd_Value_Valid (Vcd_El.Val) is + when Vcd_Effective => + Vcd_Put ("effective "); + when Vcd_Driving => + Vcd_Put ("driving "); + when Vcd_Variable => + Vcd_Put ("variable "); end case; - Vcd_Putc (' '); - Vcd_Put_Idcode (N); - Vcd_Putc (' '); - Vcd_Put_Name (Sig); - if Vcd_El.Vtype in Vcd_Var_Vectors then - Vcd_Putc ('['); - Vcd_Put_I32 (Vcd_El.Vec_Range.I32.Left); - Vcd_Putc (':'); - Vcd_Put_I32 (Vcd_El.Vec_Range.I32.Right); - Vcd_Putc (']'); - end if; - Vcd_Putc (' '); Vcd_Put_End; - if Boolean'(False) then - Vcd_Put ("$comment "); - Vcd_Put_Name (Sig); - Vcd_Put (" is "); - case Vcd_Value_Valid (Vcd_El.Val) is - when Vcd_Effective => - Vcd_Put ("effective "); - when Vcd_Driving => - Vcd_Put ("driving "); - when Vcd_Variable => - Vcd_Put ("variable "); - end case; - Vcd_Put_End; - end if; end if; end Add_Signal; |