Difference between revisions of "Simple examples of VHDL visitor pattern"
From Verific Design Automation FAQ
(Created page with " <nowiki> [hoa@awing0 220512b]$ cat test.cpp #include "vhdl_file.h" #include "VhdlUnits.h" #include "VhdlIdDef.h" #include "VhdlValue_Elab.h" #include "Strings.h" #ifdef VERI...") |
|||
| (One intermediate revision by the same user not shown) | |||
| Line 1: | Line 1: | ||
<nowiki> | <nowiki> | ||
| − | + | $ cat test.cpp | |
#include "vhdl_file.h" | #include "vhdl_file.h" | ||
#include "VhdlUnits.h" | #include "VhdlUnits.h" | ||
| Line 36: | Line 36: | ||
if (pPrimaryUnit) pPrimaryUnit->Accept(mv); | if (pPrimaryUnit) pPrimaryUnit->Accept(mv); | ||
} | } | ||
| − | + | ||
| + | $ cat test.vhd | ||
library ieee; | library ieee; | ||
use ieee.std_logic_1164.all; | use ieee.std_logic_1164.all; | ||
| Line 70: | Line 71: | ||
end process mux; | end process mux; | ||
end behave; | end behave; | ||
| − | + | ||
| + | $ test-linux | ||
-- Analyzing VHDL file "test.vhd" into library work (VHDL-9003) | -- Analyzing VHDL file "test.vhd" into library work (VHDL-9003) | ||
INFO: analyzing entity 'test' (VHDL-1012) | INFO: analyzing entity 'test' (VHDL-1012) | ||
| − | |||
INFO: analyzing architecture 'behave' of entity 'test' (VHDL-9006) | INFO: analyzing architecture 'behave' of entity 'test' (VHDL-9006) | ||
test.vhd(4): INFO: processing 'test(behave)' (VHDL-1067) | test.vhd(4): INFO: processing 'test(behave)' (VHDL-1067) | ||
| Line 80: | Line 81: | ||
test.vhd(15): INFO: ConstantId: two, value: "10" | test.vhd(15): INFO: ConstantId: two, value: "10" | ||
test.vhd(16): INFO: ConstantId: three, value: "11" | test.vhd(16): INFO: ConstantId: three, value: "11" | ||
| − | + | ||
| + | $ | ||
</nowiki> | </nowiki> | ||
Latest revision as of 16:21, 12 May 2022
$ cat test.cpp
#include "vhdl_file.h"
#include "VhdlUnits.h"
#include "VhdlIdDef.h"
#include "VhdlValue_Elab.h"
#include "Strings.h"
#ifdef VERIFIC_NAMESPACE
using namespace Verific ;
#endif
class MyVisitor : public VhdlVisitor
{
public:
MyVisitor() : VhdlVisitor() { }
virtual ~MyVisitor() { }
virtual void VHDL_VISIT(VhdlConstantId, node)
{
VhdlValue *value = node.Value();
if (value) {
node.Info("ConstantId: %s, value: %s", node.GetPrettyPrintedString(), value->Image()) ;
}
}
} ;
int main ()
{
vhdl_file::SetDefaultLibraryPath("../vdbs");
vhdl_file::Analyze("test.vhd", "work");
vhdl_file::ElaborateAll("work", 1 /* static only */);
MyVisitor mv ;
VhdlLibrary *pLib = vhdl_file::GetLibrary("work") ;
VhdlPrimaryUnit *pPrimaryUnit = pLib->GetPrimUnit("test") ;
if (pPrimaryUnit) pPrimaryUnit->Accept(mv);
}
$ cat test.vhd
library ieee;
use ieee.std_logic_1164.all;
entity test is
port (
d0, d1, d2, d3 : in std_logic_vector (3 downto 0);
myselect : in std_logic_vector (1 downto 0);
y : out std_logic_vector (3 downto 0)
);
end test;
architecture behave of test is
constant zero : std_logic_vector (1 downto 0) := "00";
constant one : std_logic_vector (1 downto 0) := "01";
constant two : std_logic_vector (1 downto 0) := "10";
constant three : std_logic_vector (1 downto 0) := "11";
begin
mux: process (myselect, d0, d1, d2, d3)
begin
case myselect is
when zero =>
y <= d0;
when one =>
y <= d1;
when two =>
y <= d2;
when three =>
y <= d3;
when others =>
y <= (others => 'X');
end case;
end process mux;
end behave;
$ test-linux
-- Analyzing VHDL file "test.vhd" into library work (VHDL-9003)
INFO: analyzing entity 'test' (VHDL-1012)
INFO: analyzing architecture 'behave' of entity 'test' (VHDL-9006)
test.vhd(4): INFO: processing 'test(behave)' (VHDL-1067)
test.vhd(13): INFO: ConstantId: zero, value: "00"
test.vhd(14): INFO: ConstantId: one, value: "01"
test.vhd(15): INFO: ConstantId: two, value: "10"
test.vhd(16): INFO: ConstantId: three, value: "11"
$