diff options
author | Jonsba <jonasb@tranquille.ch> | 2016-07-26 18:59:08 +0200 |
---|---|---|
committer | tgingold <tgingold@users.noreply.github.com> | 2016-07-26 18:59:08 +0200 |
commit | cc352d278fcce918d374406ff64c27cde0a59402 (patch) | |
tree | 74372f5905b98a854324431761aa9b002915894b /src/grt/grt-waves.adb | |
parent | 7776856c175ed776c7606ad48f8170dcb79243a9 (diff) | |
download | ghdl-cc352d278fcce918d374406ff64c27cde0a59402.tar.gz ghdl-cc352d278fcce918d374406ff64c27cde0a59402.tar.bz2 ghdl-cc352d278fcce918d374406ff64c27cde0a59402.zip |
Adding support for a wave option file that selects signals to be displayed (#121)
Adding support for a wave option file that selects signals to be displayed on the waveform (currently only works with the ghw wave format). Only full signal paths are supported now (no wildcards). Wave option file version set to 1.0.
Diffstat (limited to 'src/grt/grt-waves.adb')
-rw-r--r-- | src/grt/grt-waves.adb | 114 |
1 files changed, 70 insertions, 44 deletions
diff --git a/src/grt/grt-waves.adb b/src/grt/grt-waves.adb index d14d2b0c4..11caef838 100644 --- a/src/grt/grt-waves.adb +++ b/src/grt/grt-waves.adb @@ -44,6 +44,8 @@ with Grt.Signals; use Grt.Signals; with System; use System; with Grt.Vstrings; use Grt.Vstrings; with Grt.Ghw; use Grt.Ghw; +with Grt.Wave_Opt_File; use Grt.Wave_Opt_File; +with Grt.Wave_Opt_File.Tree_Reading; use Grt.Wave_Opt_File.Tree_Reading; pragma Elaborate_All (Grt.Rtis_Utils); pragma Elaborate_All (Grt.Table); @@ -911,13 +913,17 @@ package body Grt.Waves is end Write_Hierarchy_El; -- Create a hierarchy block. - procedure Wave_Put_Hierarchy_Block (Inst : VhpiHandleT; Step : Step_Type); + procedure Wave_Put_Hierarchy_Block (Inst : VhpiHandleT; + Step : Step_Type; + Wave_Elem : Wave_Opt_File.Elem_Acc); - procedure Wave_Put_Hierarchy_1 (Inst : VhpiHandleT; Step : Step_Type) + procedure Wave_Put_Hierarchy_1 + (Inst : VhpiHandleT; Step : Step_Type; Wave_Elem : Wave_Opt_File.Elem_Acc) is Decl_It : VhpiHandleT; Decl : VhpiHandleT; Error : AvhpiErrorT; + Wave_Elem_Child : Wave_Opt_File.Elem_Acc; begin Vhpi_Iterator (VhpiDecls, Inst, Decl_It, Error); if Error /= AvhpiErrorOk then @@ -934,22 +940,26 @@ package body Grt.Waves is return; end if; - case Vhpi_Get_Kind (Decl) is - when VhpiPortDeclK - | VhpiSigDeclK => - case Step is - when Step_Name => - Create_String_Id (Avhpi_Get_Base_Name (Decl)); - Nbr_Scope_Signals := Nbr_Scope_Signals + 1; - Create_Object_Type (Decl); - when Step_Hierarchy => - Write_Hierarchy_El (Decl); - end case; - --Wave_Put_Name (Decl); - --Wave_Newline; - when others => - null; - end case; + Wave_Elem_Child := Get_Cursor (Avhpi_Get_Base_Name (Decl), Wave_Elem, + Is_Signal => True); + if Is_Displayed (Wave_Elem_Child) then + case Vhpi_Get_Kind (Decl) is + when VhpiPortDeclK + | VhpiSigDeclK => + case Step is + when Step_Name => + Create_String_Id (Avhpi_Get_Base_Name (Decl)); + Nbr_Scope_Signals := Nbr_Scope_Signals + 1; + Create_Object_Type (Decl); + when Step_Hierarchy => + Write_Hierarchy_El (Decl); + end case; + --Wave_Put_Name (Decl); + --Wave_Newline; + when others => + null; + end case; + end if; end loop; -- No sub-scopes for packages. @@ -974,30 +984,34 @@ package body Grt.Waves is Nbr_Scopes := Nbr_Scopes + 1; - case Vhpi_Get_Kind (Decl) is - when VhpiIfGenerateK - | VhpiForGenerateK - | VhpiBlockStmtK - | VhpiCompInstStmtK => - Wave_Put_Hierarchy_Block (Decl, Step); - when VhpiProcessStmtK => - case Step is - when Step_Name => - Create_String_Id (Avhpi_Get_Base_Name (Decl)); - when Step_Hierarchy => - Write_Hierarchy_El (Decl); - end case; - when others => - Internal_Error ("wave_put_hierarchy_1"); --- Wave_Put ("unknown "); --- Wave_Put (VhpiClassKindT'Image (Vhpi_Get_Kind (Decl))); --- Wave_Newline; - end case; + Wave_Elem_Child := Get_Cursor (Avhpi_Get_Base_Name (Decl), Wave_Elem); + if Is_Displayed (Wave_Elem_Child) then + case Vhpi_Get_Kind (Decl) is + when VhpiIfGenerateK + | VhpiForGenerateK + | VhpiBlockStmtK + | VhpiCompInstStmtK => + Wave_Put_Hierarchy_Block (Decl, Step, Wave_Elem_Child); + when VhpiProcessStmtK => + case Step is + when Step_Name => + Create_String_Id (Avhpi_Get_Base_Name (Decl)); + when Step_Hierarchy => + Write_Hierarchy_El (Decl); + end case; + when others => + Internal_Error ("wave_put_hierarchy_1"); + -- Wave_Put ("unknown "); + -- Wave_Put (VhpiClassKindT'Image (Vhpi_Get_Kind (Decl))); + -- Wave_Newline; + end case; + end if; end loop; end Wave_Put_Hierarchy_1; - procedure Wave_Put_Hierarchy_Block (Inst : VhpiHandleT; Step : Step_Type) - is + procedure Wave_Put_Hierarchy_Block (Inst : VhpiHandleT; + Step : Step_Type; + Wave_Elem : Wave_Opt_File.Elem_Acc) is begin case Step is when Step_Name => @@ -1009,7 +1023,7 @@ package body Grt.Waves is Write_Hierarchy_El (Inst); end case; - Wave_Put_Hierarchy_1 (Inst, Step); + Wave_Put_Hierarchy_1 (Inst, Step, Wave_Elem); if Step = Step_Hierarchy then Wave_Put_Byte (Ghw_Hie_Eos); @@ -1021,6 +1035,7 @@ package body Grt.Waves is Pack_It : VhpiHandleT; Pack : VhpiHandleT; Error : AvhpiErrorT; + Wave_Elem : Wave_Opt_File.Elem_Acc; begin -- First packages. Get_Package_Inst (Pack_It); @@ -1031,12 +1046,17 @@ package body Grt.Waves is Avhpi_Error (Error); return; end if; - - Wave_Put_Hierarchy_Block (Pack, Step); + Wave_Elem := Get_Top_Cursor (Avhpi_Get_Base_Name (Pack), Pkg); + if Is_Displayed (Wave_Elem) then + Wave_Put_Hierarchy_Block (Pack, Step, Wave_Elem); + end if; end loop; -- Then top entity. - Wave_Put_Hierarchy_Block (Root, Step); + Wave_Elem := Get_Top_Cursor (Avhpi_Get_Base_Name (Root), Entity); + if Is_Displayed (Wave_Elem) then + Wave_Put_Hierarchy_Block (Root, Step, Wave_Elem); + end if; end Wave_Put_Hierarchy; procedure Disp_Str_AVL (Str : AVL_Nid; Indent : Natural) @@ -1557,7 +1577,13 @@ package body Grt.Waves is -- Vcd_Search_Packages; Wave_Put_Hierarchy (Root, Step_Name); - Freeze_Strings; + Wave_Opt_File.Tree_Reading.Check_If_All_Found; + -- TODO : The tree of the wave option file should be deallocated here, + -- but the memory gain shouldn't be significative + + if Str_Table.Last > 0 then + Freeze_Strings; + end if; -- Register_Cycle_Hook (Vcd_Cycle'Access); Write_Strings_Compress; |