Verilog Tutorial - PowerPoint PPT Presentation

1 / 37
About This Presentation
Title:

Verilog Tutorial

Description:

Abdul-Rahman Elshafei. 3. Nov 16, 2006. If both inputs are 1, change both outputs. ... Abdul-Rahman Elshafei. 21. Nov 16, 2006. D Flip-flop with Synchronous ... – PowerPoint PPT presentation

Number of Views:126
Avg rating:3.0/5.0
Slides: 38
Provided by: ABDO5
Category:

less

Transcript and Presenter's Notes

Title: Verilog Tutorial


1
Verilog Tutorial
  • Abdul-Rahman Elshafei
  • COE-561

2
Introduction
  • Purpose of HDL
  • Describe the circuit in algorithmic level (like
    c) and in gate-level (e.g. And gate)
  • Simulation
  • Synthesis
  • Words are better than pictures

3
The best way to describe a circuit?
  • If both inputs are 1, change both outputs.
  • If one input is 1 change an output as follows
  • If the previous outputs are equal
  • change the output with input 0
  • If the previous outputs are unequal
  • change the output with input 1.
  • If both inputs are 0, change nothing.

4
Lexicography
  • Comments
  • Two Types
  • // Comment
  • / These comments extend
  • over multiple lines. Good
  • for commenting out code /
  • Character Set
  • 0123456789ABCD..YZabcd...yz_
  • Cannot start with a number or

5
Data Types
  • module sample (a,b,c,d)
  • input a,b
  • output c,d
  • wire 70 b
  • reg c,d
  • integer k
  • Data Values
  • 0,1,x,z
  • Wire
  • Synthesizes into wires
  • Used in structural code
  • Reg
  • May synthesize into latches, flip-flops or wires
  • Used in procedural code
  • Integer
  • 32-bit integer used as indexes
  • Input, Output, inout
  • Defines ports of a module (wire by default)

6
Data Values
  • Numbers
  • Numbers are defined by number of bits
  • Value of 23
  • 5b10111
  • 5d23
  • 5h17
  • Constants
  • wire 30 t,d
  • assign t 23
  • assign d 4b0111
  • Parameters
  • parameter n4
  • wire n-10 t, d
  • define Reset_state 0, state_B 1, Run_state
    2, finish_state 3
  • if(stateRun_state)

7
Operators
  • reg 30 a, b, c, d
  • wire70 x,y,z
  • parameter n 4
  • c a b
  • d a n
  • If(xy) d 1 else d 0
  • d a b
  • if ((xgty) (z)) a1
  • else a !x
  • Arithmetic
  • ,,-, /,
  • Relational
  • lt,lt,gt,gt,, !
  • Bit-wise Operators
  • Not
  • XOR
  • And 5b11001 5b01101 gt 5b01001
  • OR
  • XNOR or
  • Logical Operators
  • Returns 1or 0, treats all nonzero as 1
  • ! Not
  • AND 27 -3 gt 1
  • OR

8
Operators
  • module sample (a, b, c, d)
  • input 20 a, b
  • output 20 c, d
  • wire z,y
  • assign z a
  • c a b
  • If(ab) d 1 else d 0
  • d a b
  • if ((agtb) (z)) y1
  • else y !x
  • assign d ltlt 2 //shift left twice
  • assign carry, d a b
  • assign c 2carry,21b0
  • // c carry,carry,0,0
  • Reduction Operators
  • Unary operations returns single-bit values
  • and
  • or
  • nand
  • nor
  • xor
  • xnor
  • Shift Operators
  • Shift Left ltlt
  • Shift right gtgt
  • Concatenation Operator
  • (concatenation)
  • nitem (n fold replication of an item)
  • Conditional Operator
  • Implements if-then-else statement
  • (cond) ? (result if cond true) (result if cond
    false)

9
Verilog Structure
module gate(Z,A,B,C) input A,B,C output
Z assign Z A(BC) Endmodule module
two_gates(Z2,A2,B2,C2) input A2,B2,C2 output
Z2 gate gate_1(G2,A2,B2,C2) gate
gate_2(Z2,G2,A2,B2) endmodule
  • All code are contained in modules
  • Can invoke other modules
  • Modules cannot be contained in another module

10
Structural Vs Procedural
  • Structural
  • textual description of circuit
  • order does not matter
  • Starts with assign statements
  • Harder to code
  • Need to work out logic
  • Procedural
  • Think like C code
  • Order of statements are important
  • Starts with initial or always statement
  • Easy to code
  • Can use case, if, for

reg c, d always_at_ (a or b or c) begin assign
c a b assign d c b end
wire c, d assign c a b assign d c b
11
Structural Vs Procedural
  • Procedural
  • reg 30 Q
  • wire 10 y
  • always_at_(y)
  • begin
  • Q4b0000
  • case(y) begin
  • 2b00 Q01
  • 2b01 Q11
  • 2b10 Q21
  • 2b11 Q31
  • endcase
  • end
  • Structural
  • wire 30Q
  • wire 10y
  • assign
  • Q0(y1)(y0),
  • Q1(y1)y0,
  • Q2y1(y0),
  • Q3y1y0

12
Blocking Vs Non-Blocking
  • Non-blocking
  • ltvariablegt lt ltstatementgt
  • The inputs are stored once the procedure is
    triggered
  • Statements are executed in parallel
  • Used for flip-flops, latches and registers
  • Blocking
  • ltvariablegt ltstatementgt
  • Similar to C code
  • The next assignment waits until the present one
    is finished
  • Used for combinational logic

Do not mix both assignments in one procedure
13
Blocking Vs Non-Blocking
  • Initial
  • begin
  • 1 e2
  • 1 b1
  • 1 blt0
  • eltb // grabbed the old b
  • fe // used old e2, did not wait eltb

14
Behavior Modeling
15
If Statements
  • Syntax
  • if (expression)
  • begin
  • ...statements...
  • end
  • else if (expression)
  • begin
  • ...statements...
  • end
  • ...more else if blocks
  • else
  • begin
  • ...statements...
  • end

16
Case Statements
  • Syntax
  • case (expression)
  • case_choice1
  • begin
  • ...statements...
  • end
  • case_choice2
  • begin
  • ...statements...
  • end
  • ...more case choices blocks...
  • default
  • begin
  • ...statements...
  • end

17
For loops
  • integer j
  • for(j0jlt7jj1)
  • begin
  • cj aj bj
  • end
  • Syntax
  • for (count value1
  • countlt/lt/gt/gt value2
  • countcount/- step)
  • begin
  • ...statements...
  • end

18
Component Inference
19
Flip-Flops
  • always_at_(posedge clk)
  • begin
  • altb
  • end

altbc
20
D Flip-Flop with Asynchronous Reset
  • always_at_(posedge clk or negedge rst)
  • begin
  • if (!rst) alt0
  • else altb
  • end

21
D Flip-flop with Synchronous reset and Enable
  • always_at_(posedge clk)
  • begin
  • if (rst) alt0
  • else if (enable) altb
  • end

22
Shift Registers
  • reg30 Q
  • always_at_(posedge clk or posedge rset )
  • begin
  • if (rset) Qlt0
  • else begin
  • Q ltQ ltlt 1
  • Q0ltQ3
  • end

23
Multiplexers
  • Method 1
  • assign a (select ? b c)
  • Method 2
  • always_at_(select or b or c) begin
  • if(select) ab
  • else ac
  • end
  • Method 2b
  • case(select)
  • 1b1 ab
  • 1b0 ac
  • endcase

24
Counters
  • reg 70 count
  • wire enable
  • always_at_(posedge clk or negedge rst)
  • begin
  • if (rst) countlt0
  • else if (enable)
  • countltcount1
  • end

25
Avoiding Unwanted Latches
  • Latches are BAD

26
Rule 1
If the procedure has several paths, every path
must evaluate all outputs
  • Method1
  • Set all outputs to some value at the start of the
    procedure.
  • Later on different values can overwrite those
    values.
  • always _at_(...
  • begin
  • x0y0z0
  • if (a) x2 elseif (b) y3 else z4
  • End
  • Method2
  • Be sure every branch of every if and case
    generate every output
  • always _at_(...
  • begin
  • if (a) begin x2 y0 z0 end
  • elseif (b) begin x0 y3 z0 end
  • else begin x0 y0 z4 end
  • end

27
Rule 2
All inputs used in the procedure must appear in
the trigger list
  • Right-hand side variables
  • Except variables both calculated and used in the
    procedure.
  • always _at_(a or b or c or x or y)
  • begin
  • xa yb zc
  • wxy
  • end
  • Branch controlling variables
  • Be sure every branch of every if and case
    generate every output
  • always _at_(a or b)
  • begin
  • if (a) begin x2 y0 z0 end
  • elseif (b) begin x0 y3 z0 end
  • else begin x0 y0 z4 end
  • end

28
Rule 3
All possible inputs used control statements must
be covered
  • End all case statements with the default case
    whether you need it or not.
  • case(state)
  • ...
  • default next_state reset
  • endcase
  • Do not forget the self loops in your state graph
  • if(abc) next_stateS1
  • elseif(cd) next_stateS2
  • else next_statereset

29
Finite State Machines
30
Standard Form for a Verilog FSM
  • // state flip-flops
  • reg 20 state, nxt_st
  • // state definitions
  • parameter reset0,S11,S22,S33,..
  • // NEXT STATE CALCULATIONS
  • always_at_(state or inputs or ...)
  • begin
  • next_state ...
  • end
  • // REGISTER DEFINITION
  • always_at_(posedge clk)
  • begin
  • stateltnext_state
  • end
  • // OUTPUT CALCULATIONS
  • output f(state, inputs)

31
Example
  • module myFSM (clk, x, z)
  • input clk, x output z
  • // state flip-flops
  • reg 20 state, nxt_st
  • // state definition
  • parameter S00,S11,S22,S33,S77
  • // REGISTER DEFINITION
  • always _at_(posedge clk)
  • begin
  • stateltnxt_st
  • end
  • // OUTPUTCALCULATIONS
  • assign z (stateS7)
  • // NEXT STATE CALCULATIONS
  • always _at_(state or x)
  • begin
  • case (state)
  • S0 if(x) nxt_stS1
  • else nxt_stS0
  • S1 if(x) nxt_stS3
  • else nxt_stS2
  • S2 if(x) nxt_stS0
  • else nxt_stS7
  • S3 if(x) nxt_stS2
  • else nxt_stS7
  • S7 nxt_stS0
  • default nxt_st S0
  • endcase
  • end
  • endmodule

32
Test Benches
33
System tasks
  • Used to generate input and output during
    simulation. Start with sign.
  • Display Selected Variables
  • display (format_string,par_1,par_2,...)
  • monitor(format_string,par_1,par_2,...)
  • Example display(Output z b, z)
  • Writing to a File
  • fopen, fdisplay, fmonitor and fwrite
  • Random number generator random (seed)
  • Query current simulation time time

34
Test Benches
  • Overview
  • 1. Invoke the verilog under design
  • 2. Simulate input vectors
  • 3. Implement the system tasks to view the results
  • Approach
  • Initialize all inputs
  • Set the clk signal
  • Send test vectors
  • Specify when to end the simulation.

35
Example
  • timescale1 ns /100 ps
  • // timeunit 1ns precision1/10ns
  • module my_fsm_tb
  • reg clk, rst, x
  • wire z
  • / DESIGN TO SIMULATE (my_fsm) INSTANTIATION
    /
  • myfsm dut1(clk, rst, x, z)
  • /RESET AND CLOCK SECTION/
  • Initial
  • begin
  • clk0
  • rst0
  • 1rst1 /The delay gives rst a posedge for
    sure./
  • 200 rst0 //Deactivate reset after two clock
    cycles 1ns/
  • end
  • always 50clkclk / 10MHz clock (501ns2)
    with 50 duty-cycle /
  • /SPECIFY THE INPUT WAVEFORM x /
  • Initial begin
  • 1 x0
  • 400 x1
  • display(Output z b, z)
  • 100 x0
  • _at_(posedge clk) x1
  • 1000 finish //stop simulation
  • //without this, it will not stop
  • end
  • endmodule

36
Modelsim Demonstration
37
0111 Sequence Detector
Write a Comment
User Comments (0)
About PowerShow.com