Difference between revisions of "How to use RegisterCallBackMsg()"
From Verific Design Automation FAQ
(Created page with "Here is a small example showing how to use RegisterCallBackMsg(): <nowiki> #include <stdio.h> #include <stdarg.h> #include "Strings.h" #include "Map.h" // Make assoc...") |
|||
| Line 18: | Line 18: | ||
{ | { | ||
if (msg_type == VERIFIC_WARNING) { | if (msg_type == VERIFIC_WARNING) { | ||
| − | Message::PrintLine("*** See | + | Message::PrintLine("*** See warning ", message_id) ; |
} | } | ||
if (msg_type == VERIFIC_ERROR) { | if (msg_type == VERIFIC_ERROR) { | ||
| − | Message::PrintLine("*** See | + | Message::PrintLine("*** See error ", message_id) ; |
} | } | ||
if (Strings::compare_nocase("VERI-1195", message_id) ) { | if (Strings::compare_nocase("VERI-1195", message_id) ) { | ||
| Line 86: | Line 86: | ||
test.v(1): INFO: compiling module 'test' (VERI-1018) | test.v(1): INFO: compiling module 'test' (VERI-1018) | ||
test.v(2): WARNING: instantiating unknown empty module 'bot' (VERI-1207) | test.v(2): WARNING: instantiating unknown empty module 'bot' (VERI-1207) | ||
| − | -- *** See | + | -- *** See warning VERI-1207 |
-- *** See VERI-1207 with unknown module bot | -- *** See VERI-1207 with unknown module bot | ||
test.v(3): WARNING: instantiating unknown empty module 'botm' (VERI-1207) | test.v(3): WARNING: instantiating unknown empty module 'botm' (VERI-1207) | ||
| − | -- *** See | + | -- *** See warning VERI-1207 |
-- *** See VERI-1207 with unknown module botm | -- *** See VERI-1207 with unknown module botm | ||
test.v(6): ERROR: net 'c' is constantly driven from multiple places (VDB-1000) | test.v(6): ERROR: net 'c' is constantly driven from multiple places (VDB-1000) | ||
| − | -- *** See | + | -- *** See error VDB-1000 |
test.v(7): ERROR: another driver from here (VDB-1001) | test.v(7): ERROR: another driver from here (VDB-1001) | ||
| − | -- *** See | + | -- *** See error VDB-1001 |
test.v(1): INFO: module 'test' remains a black box, due to errors in its contents (VERI-1073) | test.v(1): INFO: module 'test' remains a black box, due to errors in its contents (VERI-1073) | ||
test.v(1): INFO: top level design is test() | test.v(1): INFO: top level design is test() | ||
Latest revision as of 13:44, 14 May 2020
Here is a small example showing how to use RegisterCallBackMsg():
#include <stdio.h>
#include <stdarg.h>
#include "Strings.h"
#include "Map.h" // Make associated hash table class Map available
#include "Set.h" // Make associated hash table class Set available
#include "Message.h" // Make message handlers available
#include "veri_file.h" // Make verilog reader available
#include "DataBase.h" // Make (hierarchical netlist) database API available
#ifdef VERIFIC_NAMESPACE
using namespace Verific ;
#endif
static void MyMsgCallBack (msg_type_t msg_type, const char *message_id, linefile_type linefile, const char *msg, va_list args)
{
if (msg_type == VERIFIC_WARNING) {
Message::PrintLine("*** See warning ", message_id) ;
}
if (msg_type == VERIFIC_ERROR) {
Message::PrintLine("*** See error ", message_id) ;
}
if (Strings::compare_nocase("VERI-1195", message_id) ) {
Message::PrintLine("*** See VERI-1195") ;
}
if (Strings::compare_nocase("VERI-1207", message_id) ) {
std::va_list args_tmp0 ;
va_copy(args_tmp0, args);
char *modname;
modname = va_arg(args_tmp0, char *);
Message::PrintLine("*** See VERI-1207 with unknown module ", modname) ;
va_end (args_tmp0);
}
}
int main(int argc, char **argv)
{
Message::RegisterCallBackMsg(MyMsgCallBack) ;
veri_file veri_reader ;
if (argc < 2) Message::PrintLine("reading default input file: test.v. Specify command line argument to override") ;
const char *file_name = 0 ;
if (argc>1) {
file_name = argv[1] ; // Set the file name as specified by the user
} else {
file_name = "test.v" ; // Set default file name
}
if (!veri_reader.Read(file_name,"work", veri_file::VERILOG_2K)) {
return 1 ;
}
Netlist *top = Netlist::PresentDesign() ;
if (!top) {
Message::PrintLine("cannot find any handle to the top-level netlist") ;
return 1 ;
}
Message::Msg(VERIFIC_INFO, 0, top->Linefile(), "top level design is %s(%s)",
top->Owner()->Name(), top->Name()) ;
return 0 ;
}
Run:
$ cat test.v module test (input a, b, output c); bot i (); botm j (); botm m (); botm n (); assign c = a & b; assign c = a ^ b; endmodule $ test-linux -- reading default input file: test.v. Specify command line argument to override -- Analyzing Verilog file 'test.v' (VERI-1482) test.v(1): INFO: compiling module 'test' (VERI-1018) test.v(2): WARNING: instantiating unknown empty module 'bot' (VERI-1207) -- *** See warning VERI-1207 -- *** See VERI-1207 with unknown module bot test.v(3): WARNING: instantiating unknown empty module 'botm' (VERI-1207) -- *** See warning VERI-1207 -- *** See VERI-1207 with unknown module botm test.v(6): ERROR: net 'c' is constantly driven from multiple places (VDB-1000) -- *** See error VDB-1000 test.v(7): ERROR: another driver from here (VDB-1001) -- *** See error VDB-1001 test.v(1): INFO: module 'test' remains a black box, due to errors in its contents (VERI-1073) test.v(1): INFO: top level design is test() [hoa@awing0 200514]$