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;  | 
