Verilog Interview Questions
Verilog Interview Questions
com/case-conditional-statements-synthesis-caution/
Q1. What Is Difference Between Verilog Full Case And Parallel Case?
A “full” case statement is a case statement in which all possible case-expression binary
patterns can be matched to a case item or to a case default. If a case statement does not
include a case default and if it is possible to find a binary case expression that does not
match any of the defined case items, the case statement is not “full.”
A “parallel” case statement is a case statement in which it is only possible to match a case
expression to one and only one case item. If it is possible to find a case expression that
would match more than one case item, the matching case items are called “overlapping”
case items and the case statement is not “parallel.”
Q2. What Is Pli?why Is It Used?
Programming Language Interface (PLI) of Verilog HDL is a mechanism to interface Verilog
programs with programs written in C language. It also provides mechanism to access
internal databases of the simulator from the C program.
PLI is used for implementing system calls which would have been hard to do otherwise (or
impossible) using Verilog syntax. Or, in other words, you can take advantage of both the
paradigms – parallel and hardware related features of Verilog and sequential flow of C –
using PLI.
Q3. Difference Between $monitor,$display & $strobe?
These commands have the same syntax, and display text on the screen during simulation.
They are much less convenient than waveform display tools like cwaves?. $display and
$strobe display once every time they are executed, whereas $monitor displays every time
one of its parameters changes.
The difference between $display and $strobe is that $strobe displays the parameters at the
very end of the current simulation time unit rather than exactly where it is executed. The
format string is like that in C/C++, and may contain format characters. Format characters
include %d (decimal), %h (hexadecimal), %b (binary), %c (character), %s (string) and %t
(time), %m (hierarchy level). %5d, %5b etc. would give exactly 5 spaces for the number
instead of the space needed. Append b, h, o to the task name to change default format to
binary, octal or hexadecimal.
Q4. Variable And Signal Which Will Be Updated First?
Signals
Q5. What Is Sensitivity List?
The sensitivity list indicates that when a change occurs to any one of elements in the list
change, begin…end statement inside that always block will get executed.
Q6. In A Pure Combinational Circuit Is It Necessary To Mention All The Inputs In Sensitivity
Disk? If Yes, Why?
Yes in a pure combinational circuit is it necessary to mention all the inputs in sensitivity disk
other wise it will result in pre and post synthesis mismatch.
Q7. Write A Verilog Code To Swap Contents Of Two Registers With And Without A
Temporary Register?
With temp reg ;
always @ (posedge clock)
begin
temp=b;
b=a;
a=temp;
end
Without temp reg;
always @ (posedge clock)
begin
a <= b;
b <= a;
end
Q8. Difference Between Task And Function?
Function:
A function is unable to enable a task however functions can enable other functions.
A function will carry out its required duty in zero simulation time. ( The program time will not be
incremented during the function routine)
Functions will only return a single value and can not use either output or inout statements.
Tasks:
Tasks are capable of enabling a function as well as enabling other versions of a Task
Tasks also run with a zero simulation however they can if required be executed in a non zero
simulation time.
A task is allowed to use zero or more arguments which are of type output, input or inout.
A Task is unable to return a value but has the facility to pass multiple values via the output and inout
statements .
Q9. Difference Between Inter Statement And Intra Statement Delay?
//define register variables
reg a, b, c;
//intra assignment delays
initial
begin
a = 0; c = 0;
b = #5 a + c; //Take value of a and c at the time=0, evaluate
//a + c and then wait 5 time units to assign value
//to b.
end
//Equivalent method with temporary variables and regular delay control
initial
begin
a = 0; c = 0;
temp_ac = a + c;
#5 b = temp_ac; //Take value of a + c at the current time and
//store it in a temporary variable. Even though a and c
//might change between 0 and 5,
//the value assigned to b at time 5 is unaffected.
end
Syntax:
The force command has -freeze, -drive, and -deposit options. When none of these is
specified, then -freeze is assumed for unresolved signals and -drive is assumed for
resolved signals. This is designed to provide compatibility with force files. But if you prefer
-freeze as the default for both resolved and unresolved signals.
2. Update the LHS of nonblocking statements at the end of the time step.
Data types
VHDL. A multitude of language or user defined data types can be used. This may mean
dedicated conversion functions are needed to convert objects from one type to another. The
choice of which data types to use should be considered wisely, especially enumerated
(abstract) data types. This will make models easier to write, clearer to read and avoid
unnecessary conversion functions that can clutter the code. VHDL may be preferred
because it allows a multitude of language or user defined data types to be used.
Verilog. Compared to VHDL, Verilog data types a re very simple, easy to use and very
much geared towards modeling hardware structure as opposed to abstract hardware
modeling. Unlike VHDL, all data types used in a Verilog model are defined by the Verilog
language and not by the user. There are net data types, for example wire, and a register
data type called reg. A model with a signal whose type is one of the net data types has a
corresponding electrical wire in the implied modeled circuit. Objects, that is signals, of type
reg hold their value over simulation delta cycles and should not be confused with the
modeling of a hardware register. Verilog may be preferred because of it’s simplicity.
Design reusability
VHDL. Procedures and functions may be placed in a package so that they are avail able to
any design-unit that wishes to use them.
Verilog. There is no concept of packages in Verilog. Functions and procedures used within
a model must be defined in the module. To make functions and procedures generally
accessible from different module statements the functions and procedures must be placed
in a separate system file and included using the `include compiler directive.
module memory (
input r,
input wr,
input [7:0] data_in,
input [3:0] addr,
output [7:0] data_out
);
Q16. How To Write Fsm Is Verilog?
there r mainly 4 ways 2 write fsm code
1. using 1 process where all input decoder, present state, and output decoder r combine in one process.
2. using 2 process where all comb ckt and sequential ckt separated in different process
3. using 2 process where input decoder and persent state r combine and output decoder seperated in other
process
4. using 3 process where all three, input decoder, present state and output decoder r separated in 3
process.
Q17. Write A Verilog Code For Synchronous And Asynchronous Reset?
Synchronous reset, synchronous means clock dependent so reset must not be present in
sensitivity disk
eg: always @ (posedge clk )
begin if (reset)
. . . end
Asynchronous means clock independent so reset must be present in sensitivity list.
begin
if (reset)
. . . end
Q18. There Is A Triangle And On It There Are 3 Ants One On Each Corner And Are Free To
Move Along Sides Of Triangle What Is Probability That They Will Collide?
Ants can move only along edges of triangle in either of direction, let’s say one is
represented by 1 and another by 0, since there are 3 sides eight combinations are possible,
when all ants are going in same direction they won’t collide that is 111 or 000 so probability
of not collision is 2/8=1/4 or collision probability is 6/8=3/4
Q19. What Does `timescale 1 Ns/ 1 Ps Signify In A Verilog Code?
‘timescale directive is a compiler directive.It is used to measure simulation time or delay
time. Usage :`timescale / reference_time_unit : Specifies the unit of measurement for times
and delays. time_precision: specifies the precision to which the delays are rounded off.
Q20. What Is The Difference Between === And == ?
output of “==” can be 1, 0 or X.
output of “===” can only be 0 or 1.
When you are comparing 2 nos using “==” and if one/both the numbers have one or more
bits as “x” then the output would be “X” . But if use “===” outpout would be 0 or 1.
e.g A = 3’b1x0
B = 3’b10x
A == B will give X as output.
A === B will give 0 as output.
“==” is used for comparison of only 1’s and 0’s .It can’t compare Xs. If any bit of the input is
X output will be X
Q21. Will Case Infer Priority Register If Yes How Give An Example?
yes case can infer priority register depending on coding style
reg r;
// Priority encoded mux,
always @ (a or b or c or select2)
begin
r = c;
case (select2)
2’b00: r = a;
2’b01: r = b;
endcase
end
Q22. Given The Following Verilog Code, What Value Of “a” Is Displayed?
always @(clk) begin
a = 0;
a <= 1;
$display(a);
end
This is a tricky one! Verilog scheduling semantics basically imply a four-level deep queue
for the current simulation time:
The “a <= 1” is a non-blocking event, so it’s placed into the 3rd queue.
Finally, the display statement is placed into the 4th queue. Only events in the active queue
are completed this sim cycle, so the “a = 0” happens, and then the display shows a = 0. If
we were to look at the value of a in the next sim cycle, it would show 1.
Q23. Why Is It That “if (2’b01 & 2’b10)…” Doesn’t Run The True Case?
This is a popular coding error. You used the bit wise AND operator (&) where you meant to
use the logical AND operator (&&).
Q24. What Are Different Types Of Verilog Simulators ?
There are mainly two types of simulators available.
Event Driven
Cycle Based
Q25. What Is The Difference Between The Following Two Lines Of Verilog Code?
#5 a = b;
a = #5 b;
#5 a = b;
Wait five time units before doing the action for “a = b;”.
a = #5 b; The value of b is calculated and stored in an internal temp register,After five time
units, assign this stored value to a.
1. When would you use blocking vs non-blocking assignments when coding sequential
logic?
2. A lot of designers like to use a #1 when coding flip-flops (sequential logic). What
purpose does it serve? Why should you use #1 or not?
3. What is the difference between at task and a function? When would use one vs the
other?
4. Can you develop a flip flop model using Verilog's specify statements? When would
you use Verilog's specify statement? What advantage does it have?
5. How does one handle tri-state logic? What Verilog primitives support it? How does
one model various levels of drive strength?
7. When using one of the case, casex, casez, variation, when would you use a // synopsys
parallel_case full_case directive? What does it do?
8. Should your Verilog case statement always include a "default" case? If yes, why? If
not, why not?
9. Suppose a part of your logic has 50 instances of a module. Do you cut and paste it or
generate the logic? If you are going to generate it, what tools do you use?
10. When running gate-level simulation, the output of a block is generating an "X". How
do you debug it? What could be causing the "X"?