|HOME |ABOUT |ARTICLES |ACK |FEEDBACK |TOC |LINKS |BLOG |JOBS |


Tutorials



COMPILATION N SIMULATION SWITCHS

Compilation And Simulation Directives:


Conditional Compilation directive switches vs Simulation directive switches

Verilog has following conditional compiler directives.

`ifdef  
`else  
`elsif  
`endif  
`ifndef  

The `ifdef compiler directive checks for the definition of a text_macro_name. If the text_macro_name is defined, then the lines following the `ifdef directive are included. If the text_macro_name is not defined and an `else directive exists, then this source is
compiled. The `ifndef compiler directive checks for the definition of a text_macro_name. If the text_macro_name is not defined, then the lines following the `ifndef directive are included. If the text_macro_name is defined and an `else directive exists, then this source is compiled. If the `elsif directive exists (instead of the `else) the compiler checks for the definition of the text_macro_name. If the name exists the lines following the `elsif directive are included. The `elsif directive is equivalent to the compiler directive sequence `else `ifdef ... `endif. This directive does not need a corresponding `endif directive. This directive must be preceded by an `ifdef or `ifndef directive.


EXAMPLE:
module switches(); 

initial 
begin 
`ifdef TYPE_1 
$display(" TYPE_1 message "); 
`else 
  `ifdef TYPE_2 
  $display(" TYPE_2 message "); 
   `endif 
`endif 
end 
endmodule 


Compile with    +define+TYPE_1  
Then simulate,result is

RESULT:

TYPE_1 message  


Compile with    +define+TYPE_2
Then simulate,result is


RESULT:

TYPE_2 message


TYPE_1 and TYPE_2 are called switches.

In the above example, When TYPE_1 switch is given, statement " $display(" TYPE_1 message "); " is only compile and statement " $display(" TYPE_2 message "); " is not compiled.
Similarly for TYPE_2 switch. It wont take much time to compile this small example. Compilation time is not small for real time verification environment. Compiler takes time for each change of conditional compilation switches.  

Simulation directives are simple. This is archived by `define macros. The following example demonstrated the same functionality as the above example.


EXAMPLE:

module switches(); 

initial 
begin 
if($test$plusargs("TYPE_1")) 
$display(" TYPE_1 message "); 
else 
  if($test$plusargs("TYPE_2")) 
   $display(" TYPE_2 message "); 
end 
endmodule 


No need to give +define+TYPE_1  or   +define+TYPE_2 during compilation

Simulate with +TYPE_1

RESULT:

TYPE_1 message  



Simulate with   +TYPE_2
Then simulate,result is

RESULT:

TYPE_2 message


With the above style of programing,we can save recompilation times.


This system function searches the list of plusargs (like the $test$plusargs system function) for a user specified plusarg string. The string is specified in the first argument to the system function as either a string or a register which is interpreted as a string. If the string is found, the remainder of the string is converted to the type specified in the user_string and the resulting value stored in the variable provided. If a string is found, the function returns a non-zero integer. If no string is found matching, the function returns the integer value zero and the variable provided is not modified.

%d decimal conversion
%o octal conversion
%h hexadecimal conversion
%b binary conversion
%e real exponential conversion
%f real decimal conversion
%g real decimal or exponential conversion
%s string (no conversion)

The first string, from the list of plusargs provided to the simuator, which matches the plusarg_string portion of the user_string specified shall be the plusarg string available for conversion. The remainder string of the matching plusarg (the remainder is the part of the plusarg string after the portion which matches the users plusarg_string) shall be converted from a string into the format indicated by the format string and stored in the variable provided. If there is no remaining string, the value stored into the variable shall either be a zero (0) or an empty string value.



Example

module valuetest();
  
   integer i;
   real r;
   reg [11:0] v;
   reg [128:0] s;
  
   initial
   begin
       if($value$plusargs("STRING=%s",s))
           $display(" GOT STRING ");
       if($value$plusargs("INTG=%d",i))
           $display(" GOT INTEGER ");
       if($value$plusargs("REAL=%f",r))
           $display(" GOT REAL ");
       if($value$plusargs("VECTOR=%b",v))
           $display(" GOT VECTOR ");
      
       $display( " String is %s ",s);
       $display(" Integer is %d ",i);
       $display(" Realnum is %f ",r);
       $display(" Vector  is %b ",v);
   end
  
endmodule

Compilation : 
command filename.v
Simulation :
command  +STRING=rrf +INTG=123 +REAL=1.32 +VECTOR=10101

RESULTS:

 GOT STRING
 GOT INTEGER
 GOT REAL
 GOT VECTOR
 String is               rrf
 Integer is 123
 Realnum is 1.320000e+00
 Vector  is 000000010101




Index
Introduction
Linear Tb
File Io Tb
State Machine Based Tb
Task Based Tb
Self Checking Testbench
Verification Flow
Clock Generator
Simulation
Incremental Compilation
Store And Restore
Event Cycle Simulation
Time Scale And Precision
Stimulus Generation
System Function Random A Myth
Race Condition
Checker
Task And Function
Process Control
Disableing The Block
Watchdog
Compilation N Simulation Switchs
Debugging
About Code Coverage
Testing Stratigies
File Handling
Verilog Semaphore
Finding Testsenarious
Handling Testcase Files
Terimination
Error Injuction
Register Verification
Parameterised Macros
White Gray Black Box
Regression
Tips

Report a Bug or Comment on This section - Your input is what keeps Testbench.in improving with time!





<< PREVIOUS PAGE

TOP

NEXT PAGE >>

copyright © 2007-2017 :: all rights reserved www.testbench.in::Disclaimer