Verilog Interview Questions
Verilog Interview Questions
Verilog Interview Questions
$deposit(variable, value);
This system task sets a Verilog register or net to the specified value. variable is
the
register or net to be changed; value is the new value for the register or net. The
value
remains until there is a subsequent driver transaction or another $deposit task
for the
same register or net. This system task operates identically to the ModelSim
force -deposit command.
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.
CASEZ should be used for case statements with wildcard don’t cares,
otherwise use of CASE is required; CASEX should never be used.
This is because:
Don’t cares are not allowed in the "case" statement. Therefore casex or casez
are required. Casex will automatically match any x or z with anything in the
case statement. Casez will only match z’s -- x’s require an absolute match.
25) 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.
c = foo ? a : b;
and
if (foo) c = a;
else c = b;
The ? merges answers if the condition is "x", so for instance if foo = 1'bx, a =
'b10, and b = 'b11, you'd get c = 'b1x. On the other hand, if treats Xs or Zs as
FALSE, so you'd always get c = b.
A: The easiest and efficient way to generate sine wave is using CORDIC
Algorithm.
// Port Declaration
input oe;
input clk;
input [7:0] inp;
output [7:0] outp;
inout [7:0] bidir;
reg [7:0] a;
reg [7:0] b;
assign bidir = oe ? a : 8'bZ ;
assign outp = b;
// Always Construct
always @ (posedge clk)
begin
b <= bidir;
a <= inp;
end
endmodule
wire [3:0] x;
always @(...) begin
case (1'b1)
x[0]: SOMETHING1;
x[1]: SOMETHING2;
x[2]: SOMETHING3;
x[3]: SOMETHING4;
endcase
end
The case statement walks down the list of cases and executes the first one that
matches. So here, if the lowest 1-bit of x is bit 2, then something3 is the
statement that will get executed (or selected by the logic).
35) 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 (&&).
Event Driven
Cycle Based
Event-based Simulator:
1.) Results are only examined at the end of every clock cycle; and
2.) The digital logic is the only part of the design simulated (no timing
calculations). By limiting the calculations, Cycle based Simulators can provide
huge increases in performance over conventional Event-based simulators.
Cycle based simulators are more like a high speed electric carving knife in
comparison because they focus on a subset of the biggest problem: logic
verification.
Cycle based simulators are almost invariably used along with Static Timing
verifier to compensate for the lost timing information coverage.
Introduction
Directed-Test Methodology
Scoreboards are used to verify that data has successfully reached its destination,
while monitors snoop the interfaces to provide coverage information. New or
revised constraints focus verification on the uncovered parts of the design
under test. As verification progresses, the simulation tool identifies the best
seeds, which are then retained as regression tests to create a set of scenarios,
constraints, and seeds that provide high coverage of the design.