ECE 491 Senior Design I - PowerPoint PPT Presentation

1 / 60
About This Presentation
Title:

ECE 491 Senior Design I

Description:

Bring a Lab Notebook to Lab (choose a partner) ... Anything in quotes is a string: 'This is a string' 'a / b' Strings must be on a single line ... – PowerPoint PPT presentation

Number of Views:31
Avg rating:3.0/5.0
Slides: 61
Provided by: JohnN2
Category:
Tags: ece | design | notebook | quotes | senior | the

less

Transcript and Presenter's Notes

Title: ECE 491 Senior Design I


1
ECE 491 - Senior Design I
  • Lecture 2 - Verilog
  • Fall 2006
  • Lab Tomorrow Meet in 400 AEC 9AM
  • Bring a Lab Notebook to Lab (choose a partner)
  • HW Due Friday 9/1 Summary of serial
    communication
  • Handout Structural Design with VerilogRead
    Sections 1-5

Prof. John NestorECE DepartmentLafayette
CollegeEaston, Pennsylvania 18042nestorj_at_lafayet
te.edu
2
Todays Outline
  • Overview Electronic Design with FPGAs
  • Verilog Part 1
  • Language Overview
  • Combinational Logic
  • Continuous Assignment
  • Module Instantiation
  • always blocks

3
FPGA Design Flow
  • Synthesis
  • Translate HDL to hardware
  • Optimize map to CLBs
  • Estimate timing
  • Placement
  • Map CLBs to specific locations
  • Routing
  • Determine how to interconnect CLBs
  • Program
  • Download bitstream into FPGA

4
Hardware Description Languages
  • Verilog
  • Designed by one person at Gateway Design
    Automation (now part of Cadence)
  • Syntax similar to C
  • Favored by industrial designers
  • IEEE Standard 1364
  • VHDL
  • Designed by committee for the Department of
    Defense
  • Syntax similar to Pascal, ADA
  • Favored by government labs, contractors
  • IEEE Standard 1076

Well use Verilog!
5
Verilog Overview
  • Important Points About Verilog
  • Language Details
  • Basic Module Syntax
  • Combinational Logic
  • Parameters
  • Module Instantiation
  • Sequential Logic
  • Finite State Machines

6
Important Points about Verilog
  • Verilog is designed to model hardware
  • Hardware is parallel, so execution is parallel
  • Verilog code is not software!

7
Important Points about Verilog (contd)
  • Verilog is based on event-driven simulation
  • Signal values change at specific time points
  • Each model
  • Activates in response to input events
  • Creates output events to represent output changes

8
Important Points about Verilog (contd)
  • Verilog was designed as a simulation language
  • Synthesis added as an afterthought
  • Only a subset of the language supported for
    synthesis
  • Synthesis must match simulated behavior
  • Well focus mostly on the synthesis subset
  • Structural Descriptions - module instantiations
  • Behavioral Descriptions
  • assign - continuous assignments
  • always blocks
  • But, well use simulation capabilities for
    verification
  • initial blocks
  • Delay

9
Verilog module construct
  • Key building block of language
  • declaration - specifies a module interface
  • Input output ports connections to outside world
  • black box model - no details about internals
  • body - specifies contents of "black box"
  • behavior - what it does
  • structure - how it's built from other "black
    boxes"

10
Module - A Quick Example
  • Full Adder
  • module fulladder(a, b, cin, sum, cout)
  • input a, b, cin
  • output sum, cout
  • assign sum a b cin
  • assign cout a b a cin b cin
  • endmodule

11
Comments about the First Example
  • Verilog describes a circuit as a set of modules
  • Each module has input and output ports
  • Single bit
  • Multiple bit - array syntax
  • Each port can take on a digital value (0, 1, X,
    Z)
  • Three main ways to specify module internals
  • Continuous assignment statements - assign
  • Concurrent statements - always
  • Submodule instantiation (hierarchy)

12
Verilog Review - Language Details
  • Syntax - See Quick Reference Card
  • Major elements of language
  • Lexical Elements (tokens and token
    separators)
  • Data Types and Values
  • Operators and Precedence

13
Verilog Lexical Elements
  • Whitespace - ignored except as token separators
  • blank spaces
  • tabs
  • newlines
  • Comments
  • Single-line comments //
  • Multi-line comments / /
  • Operators- unary, binary, ternary
  • Unary a b
  • Binary a b c
  • Ternary a (b lt c) ? b c

14
Verilog Numbers
  • Sized numbers ltsizegt'ltbase formatgtltnumbergt
  • ltsizegt - decimal number specifying number of bits
  • ltbase formatgt - base of number
  • decimal 'd or 'D
  • hex 'h or 'H
  • binary b or B
  • ltnumbergt - consecutive digits
  • normal digits 0, 1, , 9 (if appropriate for
    base)
  • hex digits a, b, c, d, e, f
  • x "unknown" digit
  • z "high-impedance" digit
  • Examples
  • 4b1111 12h7af 16d255

15
Verilog Numbers (cont'd)
  • Unsized numbers
  • Decimal numbers appearing as constants (236, 5,
    15, etc.)
  • Bitwidth is simulator-dependent (usually 32 bits)
  • Negative numbers
  • sized numbers '-' before size -8'd127 -3'b111
  • unsized numbers '-' before first digit -233
  • Underline '_' can be used as a "spacer
  • 12'b00010_1010_011 is same as
    12'b000101010011

16
Verilog Strings
  • Anything in quotes is a string "This is a
    string" "a / b"
  • Strings must be on a single line
  • Treated as a sequence of 1-byte ASCII values
  • Special characters - C-like (\)

17
Verilog Identifiers
  • Starting character alphabetic or '_'
  • Following characters alpha, numeric, or '_'
  • Examples george _paul
  • "Escaped" identifiers
  • start with backslash
  • follow with any non-whitespace ASCII
  • end with whitespace character
  • Examples \212net \xyzzy \foo
  • Special notes
  • Identifiers are case sensitive
  • Identifiers may not be reserved words

18
Verilog Reserved Words
  • always and assign begin buf bufif0 bufif1 case
  • casex casez cmos deassign default defparam disabl
    e edge
  • else end endcase endfunction endmodule
  • endprimitive endspecify endtable endtask event for
  • force forever fork function highz0 highz1 if ifnon
    e
  • initial inout input integer join large macromodule
  • medium module nand negedge nmos nor not
  • notif0 notif or output parameter pmos
  • posedge primitive pull0 pull1 pulldown pullup rcmo
    s
  • real realtime reg release repeat rnmos rpmos rtran
  • rtranif0 rtranif1 scalared small specify specparam
    strong0
  • strong1 supply0 supply1 table task time tran trani
    f0
  • tranif1 tri tri0 tri1 triand trior trireg vectored
  • wait wand weak0 weak1 while wire wor xnor
  • xor

19
Verilog Data Types
  • nets - describe wire connections
  • general purpose wire
  • special purpose supply0, supply1, tri0,
    tri1, triand, trior, trireg, wand, wor
  • registers - variables (assigned values by
    procedural statement)
  • reg - basic binary values
  • integer - binary word (32 bits - machine
    dependent)
  • real - floating point (not supported by
    synthesis)
  • time - simulation time (not supported in
    synthesis)
  • realtime - simulation time (not supported in
    synthesis)

20
More about Data Types
  • Vectors - Multiple-Bit Signals (net or register)
  • wire 310 sum
  • reg 70 avg
  • Arrays - used for memories
  • reg 70 memory 0255

21
Verilog Logic Values
  • Each wire or register type can take on 4 values
  • 0 - Standard binary FALSE
  • 1 - Standard binary TRUE
  • X - UNKNOWN
  • Z - High Impedance
  • During simulation, all variables originally X
  • Complication x z sometimes used as wildcards
    (e.g. casex, casez)

22
Operators and Precedence
  • Override with parentheses () when needed

23
Verilog Module Declaration
  • Describes the external interface of a single
    module
  • Name
  • Ports - inputs and outputs
  • General Syntax
  •         module modulename ( port1, port2, ... )
  •           port1 direction declaration
  • port2 direction declaration
  • reg declarations
  • wire declarations
  • module body - parallel statements
  •         endmodule // note no semicolon () here!

24
Verilog Body Declaration - Parallel Statements
  • Parallel statements describe concurrent behavior
    (i.e., statements which execute in parallel)
  • Types of Parallel Statements
  • assign - used to specify simple combinational
    logic
  • always - used to specify repeating behavior for
    combinational or sequential logic
  • initial - used to specify startup behavior (not
    supported in synthesis - but useful in
    simulation!)
  • module instantiation - used for structure
  • and other features useful only in simulation

25
Full Adder Example - Again
  • Full Adder
  • module fulladder(a, b, cin, sum, cout)
  • input a, b, cin
  • output sum, cout
  • assign sum a b cin
  • assign cout a b a cin b cin
  • endmodule

26
Bitwise Operators
  • Basic bitwise operators identical to C/C/Java
  • module inv(a, y)
  • input 30 a
  • output 30 y
  • assign y a
  • endmodule

27
Reduction Operators
  • Apply a single logic function to multiple-bit
    inputs
  • module and8(a, y)
  • input 70 a
  • output y
  • assign y a
  • endmodule

equivalent to a7 a6 a5 a4 a3
a2 a2 a2 a0
28
Conditional Operators
  • Like C/C/Java Conditional Operator
  • module mux2(d0, d1, s, y)
  • input 30 d0, d1
  • input s
  • output 30 y
  • assign y s ? d1 d0// output d1 when s1,
    else d0
  • endmodule

29
More Operators
  • Equivalent to C/C/Java Operators
  • Arithmetic - /
  • Comparison ! lt lt gt gt
  • Shifting ltlt gtgt
  • Example
  • module adder(a, b, y)
  • input 310 a, b
  • output 310 y
  • assign y a b
  • endmodule
  • Warning small expressions can make big hardware!

30
Bit Manipulation Concatenation
  • is the concatenation operator
  • module adder(a, b, y, cout)
  • input 310 a, b
  • output 310 y
  • output cout
  • assign cout,y a b
  • endmodule

31
Bit Manipulation Replication
  • n pattern replicates a pattern n times
  • module signextend(a, y)
  • input 150 a
  • output 310 y
  • assign y 16a15, a150
  • endmodule

32
Internal Signals
  • Declared using the wire keyword
  • module fulladder(a, b, cin, s, cout)
  • input a, b, cin
  • output s, cout
  • wire prop
  • assign prop a b
  • assign s prop cin
  • assign cout (a b) (cin (a b))
  • endmodule

33
Combinational always blocks
  • Motivation
  • assign statements are fine for simple functions
  • More complex functions require procedural
    modeling
  • Basic syntax
  • always (sensitivity-list)
  • statement
  • or
  • always (sensitivity-list)
  • begin
  • statement-sequence
  • end

34
Combinational Modeling with always
  • Example 4-input mux behavioral model
  • module mux4(d0, d1, d2, d3, s, y)
  • input d0, d1, d2, d3
  • input 10 s
  • output y
  • reg y
  • always _at_(d0 or d1 or d2 or d3 or s)
  • case (s)
  • 2'd0 y d0
  • 2'd1 y d1
  • 2'd2 y d2
  • 2'd3 y d3
  • default y 1'bx
  • endcase
  • Endmodule

35
Another Example ALU from ECE 313
  • module alu(ctl, a, b, result, zero)
  • input 20 ctl
  • input 310 a, b
  • output 310 result
  • output zero
  • reg 310 result
  • reg zero
  • always _at_(a or b or ctl)
  • begin
  • case (ctl)
  • 3'b000 result a b // AND
  • 3'b001 result a b // OR
  • 3'b010 result a b // ADD
  • 3'b110 result a - b // SUBTRACT
  • 3'b111 if (a lt b) result 32'd1
  • else result 32'd0 //SLT
  • default result 32'hxxxxxxxx
  • endcase
  • if (result 32'd0) zero 1

36
Modeling with Hierarchy
  • Create instances of submodules
  • Example Create a 4-input Mux using mux2 module
  • Original mux2 module
  • module mux2(d0, d1, s, y)
  • input 30 d0, d1
  • input s
  • output 30 y
  • assign y s ? d1 d0
  • endmodule

37
Modeling with Hierarchy
  • Create instances of submodules
  • Example Create a 4-input Mux using mux2 module
  • module mux4(d0, d1, d2, d3, s, y)
  • input 30 d0, d1, d2, d3
  • input 10 s
  • output 30 y
  • wire 30 low, high
  • mux2 lowmux(d0, d1, s0, low)
  • mux2 highmux(d2, d3, s0, high)
  • mux2 finalmux(low, high, s1, y)
  • endmodule

38
Data Types and Module Ports
  • Input ports must always be a wire (net)
  • Output ports can be wire or reg

wire
reg
wire
wire
wire
wire
39
Parameterized Modules
  • Parameters - define values that can change
  • Declaration
  • module mod1(in1, in2, out1, out2)
  • parameter Ndefault-value
  • input N-1 0 in1, in2
  • output N-1 0 out1
  • endmodule
  • Instantiation
  • wire 70 w, x, y
  • wire z
  • mod1 (8) my_mod1(w,x,y,z)

40
Parameterized Modules Example
  • N-bit 2-1 multiplexer (parameterized bitwidth)
  • module mux2( sel, a, b, y )
  • parameter bitwidth32
  • input sel
  • input bitwidth-10 a, b
  • output bitwidth-10 y
  • assign y sel ? b a
  • endmodule
  • Instantiations
  • mux2 (16) my16bit_mux(s, a ,b, c)
  • mux2 (5) my5bit_mux(s, d, e, f)
  • mux2 (32) my32bit_mux(s, g, h, i)
  • mux2 myDefault32bit_mux(s, j, k, l)

41
Symbolic Constants with Parameters
  • Idea use parameter to name special constants
  • parameter RED_ALERT 2b11
  • parameter YELLOW_ALERT 2b01
  • parameter GREEN_ALERT 2b00
  • Dont change in module instances
  • Do this to make your code more understandable
  • For others reading your code
  • For yourself reading your code after some time
    has passed

42
Symbolic Constant Example
  • 7-segment decoder from Verilog Handout (Part 1)
  • module seven_seg_display_decoder(data, segments)
  • input 30 data
  • output 60 segments
  • reg 60 segments
  • // Segment abc_defg hex
    equivalent
  • parameter BLANK 7b111_1111 // h7F
  • parameter ZERO 7b000_0001 // h01
  • parameter ONE 7b100_1111 // h4F
  • parameter TWO 7b001_0010 // h12
  • parameter THREE 7b000_0110 // h06
  • parameter FOUR 7b100_1100 // h4C
  • parameter FIVE 7b010_0100 // h24
  • parameter SIX 7b010_0000 // h20
  • parameter SEVEN 7b000_1111 // h0F
  • parameter EIGHT 7b000_0000 // h00
  • parameter NINE 7b000_0100 // h04

43
Symbolic Constant Example
  • 7-segment decoder from Verilog handout (Part 2)
  • always _at_(data)
  • case (data)
  • 0 segments ZERO
  • 1 segments ONE
  • 2 segments TWO
  • 3 segments THREE
  • 4 segments FOUR
  • 5 segments FIVE
  • 6 segments SIX
  • 7 segments SEVEN
  • 8 segments EIGHT
  • 9 segments NINE
  • default segments BLANK
  • endcase
  • endmodule

44
Symbolic Constants using define
  • Like C/C, Verilog has a preprocessor
  • define - equivalent to define in C/C
  • Symbolic constant definition
  • define ZERO 7b0000_0001
  • Symbolic constant usage preface with
  • segments ZERO
  • Other preprocessor directives
  • ifdef
  • else
  • endif

45
More about always
  • Specifies logic with procedural statements
  • Simulation model executes statements in order
  • Synthesized hardware matches simulation
  • reg declarations
  • treat like variables in C or Java
  • assignment holds value until a new assignment is
    made
  • module my_logic(a, b, c, d)
  • input a, b
  • output c, d
  • reg c,d
  • always _at_(a or b) begin
  • c a b
  • d b c
  • end
  • endmodule

46
Synthesizing Comb. Logic
  • When no if, case, or loop statements
  • Assignment statements generate logic
  • Outputs are values of last assignments
  • Logic optimized, reduced during synthesis
  • module my_logic(a, b, c, d)
  • input a, b
  • output c, d
  • reg c,d
  • always _at_(a or b) begin
  • c a b
  • d b c
  • c d a
  • end
  • endmodule

47
Synthesizing Comb. Logic - if/else
  • if/else statements become multiplexers
  • multiplexers follow statement order
  • always _at_(c or d or x or y) begin
  • if (c 1b1) z x y
  • else z x - y
  • if (d 1b0) w z
  • else w x
  • end

48
Synthesizing Comb. Logic - if /else if / else
  • Each else implies mutual exclusion
  • if / else if / else creates a priority encoder
  • always _at_(c or d or x or y) begin
  • if (c 1b1) z x y
  • else if (d 0b0) z x - y
  • else z x
  • end
  • Use sequential if statements without else if to
    avoid priority if desired

49
Synthesizing Comb. Logic - if without else
  • if without else output depends on previous value
  • always _at_(a or x or y) begin
  • w x y
  • if (a 1b1) w x
  • end
  • What if no previous value is specified?
  • Must preserve the semantics of the language
  • This requires a latch inference
  • always _at_(a or x) begin
  • if (a 1b1) w x
  • end

50
Synthesizing Comb. Logic - if without else
(latch inference)
  • if without else output depends on previous value
  • always _at_(a or x) begin
  • if (a 1b1) w x
  • end
  • What if no previous value is specified?
  • Must preserve the semantics of the language
  • This requires a latch inference to store old
    value
  • Latch inferences are bad!

51
Synthesizing Comb. Logic - case statements
  • Verilog case treated as if / else if / else ...
  • always _at_(e or x or y) begin
  • case (e)
  • 2b00 w x y
  • 2b01 w x - y
  • 2b10 w x y
  • default w 4b0000
  • endcase
  • end
  • Use default to avoid latch inference!

52
Synthesizing Comb. Logic -One Last Pitfall
  • always must include all inputs in sensitivity
    list
  • OR mismatch between synthesis simulation!
  • always _at_(e or x) begin
  • case (e)
  • 2b00 w x y
  • 2b01 w x - y
  • 2b10 w x y
  • default w 4b0000
  • endcase
  • end

53
Synthesizing Comb. Logic -One Last Pitfall
  • Verilog 2001 Alternative (not supported by all
    tools)
  • always _at_ begin
  • case (e)
  • 2b00 w x y
  • 2b01 w x - y
  • 2b10 w x y
  • default w 4b0000
  • endcase
  • end

54
About Lab 1
  • Goals of Lab 1
  • Review Combinational Logic Design with Verilog
  • Learn about FPGA Design with Verilog
  • Learn about the Spartan-3 Starter Kit Board (S3
    Board)

55
Starter Kit Board - Overview
56
S3 Board Seven-Segment Display
  • Segment signals - active low
  • Digit enables used to time multiplex digits

57
Using the S3 Board with Verilog
  • Top-level module file s3board.v
  • Contains declarations for all input output pins
  • Switches pushbuttons
  • LEDs and 7-segment displays
  • RS-232 port(s)
  • Not used (currently) PS/2 port, VGA port
  • Use as a starting point for your design
  • Constraint file s3board.ucf
  • Contains pin assignments for all inputs outputs
  • Uncomment pins that youre going to use (remove
    )
  • These files can be downloaded from the website

58
What to Do in Lab 1
  • Download s3board.v and s3board.ucf
  • Run ISE and create a new project
  • Add s3board.v and s3board.ucf
  • Add Verilog code for a 4-bit adder
  • Add Verilog code for a 7-segment decoder with hex
    digits
  • Connect slide switches to adder inputs
  • Connect 7-segment decoder to adder output
  • Connect 7-segment decoder to display LSB
  • Compile, download, debug

59
Lab 1 - Block Diagram
60
Coming Up
  • Sequential Logic Design with Verilog FPGAs
Write a Comment
User Comments (0)
About PowerShow.com