<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://www.verific.com/faq/index.php?action=history&amp;feed=atom&amp;title=Macro_Callback_example</id>
		<title>Macro Callback example - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://www.verific.com/faq/index.php?action=history&amp;feed=atom&amp;title=Macro_Callback_example"/>
		<link rel="alternate" type="text/html" href="https://www.verific.com/faq/index.php?title=Macro_Callback_example&amp;action=history"/>
		<updated>2026-05-02T12:41:05Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.26.3</generator>

	<entry>
		<id>https://www.verific.com/faq/index.php?title=Macro_Callback_example&amp;diff=479&amp;oldid=prev</id>
		<title>Hoa at 20:03, 6 May 2020</title>
		<link rel="alternate" type="text/html" href="https://www.verific.com/faq/index.php?title=Macro_Callback_example&amp;diff=479&amp;oldid=prev"/>
				<updated>2020-05-06T20:03:02Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 20:03, 6 May 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l41&quot; &gt;Line 41:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 41:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; virtual void PredefinedMacroRef(const char *macro_name, unsigned from_active_area, const linefile_type lf) &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; virtual void PredefinedMacroRef(const char *macro_name, unsigned from_active_area, const linefile_type lf) &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; {&amp;#160;  &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; {&amp;#160;  &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; //Message::Msg(VERIFIC_INFO, 0, lf, &amp;quot;Macro %s is being &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;refrenced &lt;/del&gt;from %s area&amp;quot;, macro_name, ((from_active_area)?&amp;quot;ACTIVE&amp;quot;:&amp;quot;INACTIVE&amp;quot;)) ;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; //Message::Msg(VERIFIC_INFO, 0, lf, &amp;quot;Macro %s is being &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;referenced &lt;/ins&gt;from %s area&amp;quot;, macro_name, ((from_active_area)?&amp;quot;ACTIVE&amp;quot;:&amp;quot;INACTIVE&amp;quot;)) ;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if (from_active_area) {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if (from_active_area) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if (_last_inactive_line) ReportInactiveArea() ;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; if (_last_inactive_line) ReportInactiveArea() ;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Hoa</name></author>	</entry>

	<entry>
		<id>https://www.verific.com/faq/index.php?title=Macro_Callback_example&amp;diff=410&amp;oldid=prev</id>
		<title>Amber: Created page with &quot;C++:  &lt;nowiki&gt; #include &lt;iostream&gt;  #include &quot;veri_file.h&quot; #include &quot;VeriModule.h&quot; #include &quot;VeriVisitor.h&quot;  #include &quot;Strings.h&quot; #include &quot;LineFile.h&quot; #include &quot;Message.h&quot; #i...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.verific.com/faq/index.php?title=Macro_Callback_example&amp;diff=410&amp;oldid=prev"/>
				<updated>2019-07-16T23:30:27Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;C++:  &amp;lt;nowiki&amp;gt; #include &amp;lt;iostream&amp;gt;  #include &amp;quot;veri_file.h&amp;quot; #include &amp;quot;VeriModule.h&amp;quot; #include &amp;quot;VeriVisitor.h&amp;quot;  #include &amp;quot;Strings.h&amp;quot; #include &amp;quot;LineFile.h&amp;quot; #include &amp;quot;Message.h&amp;quot; #i...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;C++:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;veri_file.h&amp;quot;&lt;br /&gt;
#include &amp;quot;VeriModule.h&amp;quot;&lt;br /&gt;
#include &amp;quot;VeriVisitor.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Strings.h&amp;quot;&lt;br /&gt;
#include &amp;quot;LineFile.h&amp;quot;&lt;br /&gt;
#include &amp;quot;Message.h&amp;quot;&lt;br /&gt;
#include &amp;quot;TextBasedDesignMod.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Array.h&amp;quot;&lt;br /&gt;
#include &amp;quot;Map.h&amp;quot;&lt;br /&gt;
#include &amp;quot;Set.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
using namespace std ;&lt;br /&gt;
&lt;br /&gt;
#ifdef VERIFIC_NAMESPACE&lt;br /&gt;
using namespace Verific ;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
class MyMacroCallBack : public MacroCallBackHandler&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    MyMacroCallBack() : MacroCallBackHandler(), _last_active_line(0), _last_inactive_line(0) { } &lt;br /&gt;
    virtual ~MyMacroCallBack() { ReportInactiveArea() ; } &lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
    void ReportInactiveArea()&lt;br /&gt;
    {   &lt;br /&gt;
        if (!_last_active_line || !_last_inactive_line || (_last_active_line &amp;gt; _last_inactive_line)) return ;&lt;br /&gt;
&lt;br /&gt;
        Message::Msg(VERIFIC_INFO, 0, 0, &amp;quot;Inactive area [%d-%d]&amp;quot;, _last_active_line, _last_inactive_line) ;&lt;br /&gt;
&lt;br /&gt;
        _last_active_line = 0 ; &lt;br /&gt;
        _last_active_line = 0 ; &lt;br /&gt;
    }   &lt;br /&gt;
&lt;br /&gt;
    virtual void PredefinedMacroRef(const char *macro_name, unsigned from_active_area, const linefile_type lf) &lt;br /&gt;
    {   &lt;br /&gt;
        //Message::Msg(VERIFIC_INFO, 0, lf, &amp;quot;Macro %s is being refrenced from %s area&amp;quot;, macro_name, ((from_active_area)?&amp;quot;ACTIVE&amp;quot;:&amp;quot;INACTIVE&amp;quot;)) ;&lt;br /&gt;
        if (from_active_area) {&lt;br /&gt;
            if (_last_inactive_line) ReportInactiveArea() ;&lt;br /&gt;
            _last_active_line = LineFile::GetLineNo(lf) ; &lt;br /&gt;
        } else if (_last_active_line) {&lt;br /&gt;
            _last_inactive_line = LineFile::GetLineNo(lf) ;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
    unsigned _last_active_line ;&lt;br /&gt;
    unsigned _last_inactive_line ;&lt;br /&gt;
} ;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, const char **argv)&lt;br /&gt;
{&lt;br /&gt;
    MyMacroCallBack mc ;&lt;br /&gt;
    veri_file::RegisterCallBackMacro(&amp;amp;mc) ;&lt;br /&gt;
&lt;br /&gt;
    veri_file::DefineCmdLineMacro(&amp;quot;FORCE_STR&amp;quot;) ;&lt;br /&gt;
&lt;br /&gt;
    Array files(1) ;&lt;br /&gt;
    files.Insert(&amp;quot;test.v&amp;quot;) ;&lt;br /&gt;
    if (!veri_file::AnalyzeMultipleFiles(&amp;amp;files)) return 1 ;&lt;br /&gt;
&lt;br /&gt;
    return 0 ;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Input Verilog:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
module test (in, sel, clk, out);&lt;br /&gt;
    input [1:0] in;&lt;br /&gt;
    input clk,sel;&lt;br /&gt;
    output [1:0] out;&lt;br /&gt;
&lt;br /&gt;
`ifdef FORCE_STR&lt;br /&gt;
    reg [1:0] a0;&lt;br /&gt;
    reg [1:0] a1;&lt;br /&gt;
    always @(posedge clk)&lt;br /&gt;
    begin&lt;br /&gt;
        a0 &amp;lt;= in+1;&lt;br /&gt;
        a1 &amp;lt;= in-1;&lt;br /&gt;
    end&lt;br /&gt;
    assign out = sel?a0:a1;&lt;br /&gt;
&lt;br /&gt;
`else&lt;br /&gt;
    reg [1:0] b0;&lt;br /&gt;
    reg [1:0] b1;&lt;br /&gt;
    always @(posedge clk)&lt;br /&gt;
    begin&lt;br /&gt;
        b0 &amp;lt;= in+2;&lt;br /&gt;
        b1 &amp;lt;= in-2;&lt;br /&gt;
    end&lt;br /&gt;
    assign out = sel?b0:b1;&lt;br /&gt;
&lt;br /&gt;
`endif&lt;br /&gt;
&lt;br /&gt;
`ifndef FORCE_STR&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
`else&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
`endif&lt;br /&gt;
&lt;br /&gt;
endmodule &lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
-- Analyzing Verilog file 'test.v' (VERI-1482)&lt;br /&gt;
INFO: Inactive area [16-26]&lt;br /&gt;
INFO: Inactive area [28-32]&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Amber</name></author>	</entry>

	</feed>