;************************************************************ ; Listing 3 - Implementing $print_reg in Verilog-XL ; ; "A Verilog programming-language-interface primer," ; EDN, September 2, 1999, pg 75. ; http://www.ednmag.com/ednmag/reg/090299/18ms525.htm ;************************************************************ #include #include int my_calltf(), my_checktf(); char *veriuser_version_str; int (*endofcompile_routines[])() ={0}; bool err_intercept(level, facility, code) int level; char * facility; char *code; { return (true); } s_tfcell veriusertfs[] = { {usertask, 0, my_checktf, 0, my_calltf, 0, "$print_reg"}, {0} /* Final entry must be zero */ }; int my_checktf() { if (tf_nump() != 1) { tf_error("Usage: $print_reg(register_name);\n"); } if (tf_typep(1) != tf_readwrite){ tf_error("The argument must be a register type\n"); } } int my_calltf(){ io_printf("$print_reg: Value of the reg=%h at time=%d\n", tf_getp(1), tf_gettime()); }