How To Write FSM Is Verilog
How To Write FSM Is Verilog
$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.
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
CASEZ :
Special version of the case statement which uses a Z logic value to represent don't-
care bits. CASEX :
Special version of the case statement which uses Z or X logic values to represent
don't-care bits.
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:
This Digital Logic Simulation method sacrifices performance for rich functionality:
every active signal is calculated for every device it propagates through during a clock
cycle. Full Event-based simulators support 4-28 states; simulation of Behavioral HDL,
RTL HDL, gate, and transistor representations; full timing calculations for all devices;
and the full HDL standard. Event-based simulators are like a Swiss Army knife with
many different features but none are particularly fast.
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.