ECE 353 Lab 4. Verilog Review. Professor Daniel Holcomb UMass Amherst Fall 2017

Similar documents
ECE 353 Lab 4. Verilog Review. Professor Daniel Holcomb With material by Professor Moritz and Kundu UMass Amherst Fall 2016

ECE 353 Lab 3 (Verilog Design Approach)

FPGA Design Challenge :Techkriti 14 Digital Design using Verilog Part 1

EN2911X: Reconfigurable Computing Topic 02: Hardware Definition Languages

Lab #1. Topics. 3. Introduction to Verilog 2/8/ Programmable logic. 2. Design Flow. 3. Verilog --- A Hardware Description Language

Digital Design with FPGAs. By Neeraj Kulkarni

Synthesizable Verilog

Chapter 2 Using Hardware Description Language Verilog. Overview

Design Using Verilog

ECE 2300 Digital Logic & Computer Organization. More Sequential Logic Verilog

Spiral 1 / Unit 4 Verilog HDL. Digital Circuit Design Steps. Digital Circuit Design OVERVIEW. Mark Redekopp. Description. Verification.

Introduction to Verilog HDL

Verilog Coding Guideline

A Brief Introduction to Verilog Hardware Definition Language (HDL)

Introduction to Verilog/System Verilog

Verilog. What is Verilog? VHDL vs. Verilog. Hardware description language: Two major languages. Many EDA tools support HDL-based design

Lecture 32: SystemVerilog

Lecture #2: Verilog HDL

N-input EX-NOR gate. N-output inverter. N-input NOR gate

ENGN1640: Design of Computing Systems Topic 02: Lab Foundations

Recommended Design Techniques for ECE241 Project Franjo Plavec Department of Electrical and Computer Engineering University of Toronto

Verilog for Synthesis Ing. Pullini Antonio

EECS150 - Digital Design Lecture 5 - Verilog Logic Synthesis

ENGN1640: Design of Computing Systems Topic 02: Design/Lab Foundations

Hardware description languages

This Lecture. Some components (useful for the homework) Verilog HDL (will continue next lecture)

Computer Aided Design Basic Syntax Gate Level Modeling Behavioral Modeling. Verilog

In this lecture, we will go beyond the basic Verilog syntax and examine how flipflops and other clocked circuits are specified.

ENGN1640: Design of Computing Systems Topic 02: Design/Lab Foundations

Hardware Description Language VHDL (1) Introduction

HDLs and SystemVerilog. Digital Computer Design

EECS150 - Digital Design Lecture 4 - Verilog Introduction. Outline

CSE140L: Components and Design Techniques for Digital Systems Lab. Verilog HDL. Instructor: Mohsen Imani UC San Diego. Source: Eric Crabill, Xilinx

a, b sum module add32 sum vector bus sum[31:0] sum[0] sum[31]. sum[7:0] sum sum overflow module add32_carry assign

The Verilog Language COMS W Prof. Stephen A. Edwards Fall 2002 Columbia University Department of Computer Science

FPGA: FIELD PROGRAMMABLE GATE ARRAY Verilog: a hardware description language. Reference: [1]

Control in Digital Systems

Hardware Description Languages: Verilog. Quick History of HDLs. Verilog/VHDL. Design Methodology. Verilog Introduction. Verilog.

Chapter 4 :: Topics. Introduction. SystemVerilog. Hardware description language (HDL): allows designer to specify logic function only.

VERILOG 2: LANGUAGE BASICS

Veriolog Overview. CS/EE 3710 Fall 2010

Introduction to Verilog

Introduction To Verilog Design. Chun-Hung Chou

Writing Circuit Descriptions 8

Synthesis of Combinational and Sequential Circuits with Verilog

Finite-State Machine (FSM) Design

Verilog introduction. Embedded and Ambient Systems Lab

VLSI Design 13. Introduction to Verilog

Hardware Description Languages: Verilog

Verilog 1 - Fundamentals

DIGITAL SYSTEM DESIGN

Verilog HDL Introduction

! ISP (circa 1977) - research project at CMU " Simulation, but no synthesis

14. Introducton to Verilog

Contents. Appendix D Verilog Summary Page 1 of 16

Parallel versus serial execution

Verilog for High Performance

Verilog Overview. Verilog Overview. Simple Example. Simple Example. Simple Example. Simple Example

EECS150 - Digital Design Lecture 10 Logic Synthesis

ECE 2300 Digital Logic & Computer Organization. More Verilog Finite State Machines

271/471 Verilog Tutorial

Two HDLs used today VHDL. Why VHDL? Introduction to Structured VLSI Design

Digital Design with SystemVerilog

14:332:231 DIGITAL LOGIC DESIGN. Hardware Description Languages

Chapter 4. Digital Design and Computer Architecture, 2 nd Edition. David Money Harris and Sarah L. Harris. Chapter 4 <1>

Chapter 4. Digital Design and Computer Architecture, 2 nd Edition. David Money Harris and Sarah L. Harris. Chapter 4 <1>

VHDL. VHDL History. Why VHDL? Introduction to Structured VLSI Design. Very High Speed Integrated Circuit (VHSIC) Hardware Description Language

CSE140L: Components and Design Techniques for Digital Systems Lab

ECE 353 Lab 4. MIDI Receiver in Verilog. Professor Daniel Holcomb UMass Amherst Fall 2016

14. Introducton to Verilog

Abi Farsoni, Department of Nuclear Engineering and Radiation Health Physics, Oregon State University

Verilog Design Principles

Problem Set 3 Solutions

EECS150 - Digital Design Lecture 10 Logic Synthesis

CSE140L: Components and Design

yamin/

Logic Synthesis. EECS150 - Digital Design Lecture 6 - Synthesis

EGC220 - Digital Logic Fundamentals

CS6710 Tool Suite. Verilog is the Key Tool

ECE 353 Lab 4. MIDI Receiver in Verilog. Professor Daniel Holcomb UMass Amherst Fall 2017

Synthesis vs. Compilation Descriptions mapped to hardware Verilog design patterns for best synthesis. Spring 2007 Lec #8 -- HW Synthesis 1

Digital Circuit Design and Language. Datapath Design. Chang, Ik Joon Kyunghee University

Modeling Sequential Circuits in Verilog

Lecture 7. Standard ICs FPGA (Field Programmable Gate Array) VHDL (Very-high-speed integrated circuits. Hardware Description Language)

A Verilog Primer. An Overview of Verilog for Digital Design and Simulation

In the previous lecture, we examined how to analyse a FSM using state table, state diagram and waveforms. In this lecture we will learn how to design

In the previous lecture, we examined how to analyse a FSM using state table, state diagram and waveforms. In this lecture we will learn how to design

Verilog Essentials Simulation & Synthesis

271/469 Verilog Tutorial

Laboratory Exercise 3 Davide Rossi DEI University of Bologna AA

Combinational Logic Design with Verilog. ECE 152A Winter 2012

CSCB58 - Lab 3. Prelab /3 Part I (in-lab) /2 Part II (in-lab) /2 TOTAL /8

Sequential Logic Design

Chapter 3: Dataflow Modeling

Federal Urdu University of Arts, Science and Technology, Islamabad VLSI SYSTEM DESIGN. Prepared By: Engr. Yousaf Hameed.

ECE 2300 Digital Logic & Computer Organization. More Verilog Finite State Machines

Speaker: Shao-Wei Feng Adviser: Prof. An-Yeu Wu Date: 2010/09/28

Lecture 7. Summary of two-level combinational-logic. Ways of specifying circuits. Solving combinational design problems. Verilog versus VHDL

Introduction. Why Use HDL? Simulation output. Explanation

Quick Introduction to SystemVerilog: Sequental Logic

Transcription:

ECE 353 Lab 4 Verilog Review Professor Daniel Holcomb UMass Amherst Fall 2017

What You Will Do In Lab 4 Design and implement a serial MIDI receiver Hardware in an Altera Complex Programmable Logic Device (CPLD) MAX 7000S (part number EPM7064SLC44-10) Using ALTERA Quartus II software tools for synthesis Debug - functional simulation (waveforms) Debug of board - logic analyzer Coding in Verilog Next we look at Verilog design issues 2

Verilog Hardware Description Language (HDL) Verilog one of the main HDLs, VHDL is the other A way to describe digital hardware Don t think of Verilog as programming language Can describe hardware Structurally -- as network of interconnected components Behaviorally as logical functions, more abstract, but eventually gets mapped to some structure anyways Why do HDLs exist? To manage complexity and facilitate design automation So that designs can be simulated before being built Synthesizable and non-synthesizable parts Why does an HDL include parts that cannot be synthesized to hardware? 3

Translating Abstract Designs to Hardware Identify hardware functionality that is needed Divide and conquer Break into smaller black-boxes when complicated Think also about performance what you do in a clock period Focus on the heart of the problem first Stub-out all (or majority of) modules List inputs, outputs Write comments - how outputs can be generated from inputs Implement one by one Control-first design is intuitive for ordering your work FSMs, state-based outputs, output generation logic Verification Instantiate and wire modules together in top module 4

Basics of Verilog 5

Basics Constants Binary b // e.g. 3 b000 Octal o // rarely used Decimal d Hexadecimal h // e.g. 8 hff Example: V = 8 b1011 V = h12a how many bits in V? Verilog predefined logic values 0 - represents number zero, logic zero, logical false 1 - represents number one, logic one, logical true x - represents an unknown logic value ; driven unknown (in sim) z - represents high impedance logic value ; undriven 6

Basics Operations Pretty much follow same syntax as C X = a+ b ; add X = a- b ; subtract X = a * b ; multiply X = a**b ; power X = a/b ; division X = a % b ; modulo Arrays wire[31:0] a; declares a to be 32 wires. just 'a' is all 32 wires, a[31] is the most significant bit a[0] is the least significant bit a[15:8] is eight wires, bits 15 to 8 of a wire[0:31] a; a[0] is the most significant bit a[31] is the least significant bit reg[31:0] mema[0:4095]; is a typical memory, 4096 words of 32 bits. mema[0] is the zeroth 32-bit word from memory. mema[0][31] is the MSB of the zeroth 32-bit word. 7

Relational Operators greater-than (>) less-than (<) greater-than-or-equal-to (>=) less-than-or-equal-to (<=) Relational operators return logical 1 if expression is true, 0 if false ; let a = 4, b = 3, and... ; c = 4 b0010, d = 4 b1101, e = 4 b1xxx a <= b ; evaluates to logical 0 a > b ; evaluates to logical 1 d >= c ; evaluates to logical 1 d < e ; evaluates to x c < e ; evaluates to logical 1 8

Bitwise and Logic Manipulations c = a&b; // bitwise AND c = a b; // bitwise OR c = a^b; // bitwise XOR b = &a; // AND of all bits of a b = a; // OR of all bits of a b = ^a; // XOR of all bits of a (i.e. parity) c = a&&b //logical AND c = a b; // logical OR etc reg [3:0] a = 4 b0101 reg [3:0] b = 4 b1000 reg [3:0] c; c = a b // c = 4 b1101 c = a b // c = 4 b0001 9

Miscellaneous Manipulations c[3:0] = a[4:1]; // select group of bits c[3:0] = {a[3:1],a[0]} // concatenation that does nothing c[3:0] = {a[2:0],a[3]} // concatenation that reorders c = {a[1:0],a[1:0]}; 10

Miscellaneous Manipulations a[4] a[3] a[2] a[1] a[0] c[3:0] = a[4:1]; // select group of bits a[4] a[3] a[2] a[1] c[3:0] = {a[3:1],a[0]} // concatenation that does nothing a[3] a[2] a[1] a[0] c[3:0] = {a[2:0],a[3]} // concatenation that reorders a[2] a[1] a[0] a[3] c = {a[1:0],a[1:0]}; a[1] a[0] a[1] a[0] 10

Combination vs Sequential 11

Wires and Regs Wires are connections (including some combinational logic) Regs are combinational or sequential logic, deping on use A reg is a variable, capable of holding state Reg is only *sometimes* a register Either can be used on RHS of blocking or nonblocking assignment assign wire = {wire reg} always @(posedge clk) reg <= {wire reg} always @(*) reg = {wire reg} //Wire as combinational signal //Reg as sequential element (Non-blocking assignment) //Reg as combinational element (blocking assignment) Make sure you understand these well 12

Blocking (=) and Non-blocking (<=) Assignment begin and keywords are used to group together assignments under a single condition Can be omitted if there is only one assignment under condition always @(posedge clk) begin reg <= {wire reg}; reg <= {wire reg}; //Non-blocking assignment //updates are simultaneous always @(*) begin reg = {wire reg}; reg = {wire reg}; //blocking assignment //updates not simultaneous Make sure you understand these well 13

Sensitivity List Every always block has a sensitivity list This list describes trigger events that cause logic inside block to be executed What happens in block when not triggered? Values remain unchanged (i.e. hold state) Only regs can hold state, so only regs can be on LHS in always block But regs are combinational if they never have to hold state For this project, suffices to only use * and posedge clk' always @({sensitivity list}) always @(posedge clk) reg <= {wire reg} always @(*) reg = {wire reg} //Do this only at clock edge //Reg as sequential element (Non-blocking assignment) //Reg as combinational element (blocking assignment) 14

Ordering of statements should not matter In non-blocking assignments, ordering doesn t matter because all updates are synchronous (on posedge clk) a always @(posedge clk) begin a <=b; //nonblocking b <=a; b In blocking assignments, ordering doesn t matter because the statements are being evaluated all the time always @(*) begin a = d&b; //blocking b = c&e; If keeping combinational and sequential logic separate, order of statements won t matter. Order of statements can matter if you follow bad practices c e d b a 15

Using Wires and Regs wire w1,w2,w3,w4; reg r1,r2,r3; assign w1 = a; assign w2 = a&b; always @(posedge clk) r1<=a always @(posedge clk) w3=a always @(*) r2=a&b always @(*) w4=a always @(*) r3<=a&b 16

Using Wires and Regs wire w1,w2,w3,w4; reg r1,r2,r3; assign w1 = a; a w1 always @(posedge clk) r1<=a a r1 assign w2 = a&b; a w2 b always @(posedge clk) w3=a always @(*) r2=a&b a b r2 always @(*) w4=a always @(*) r3<=a&b? 16

Non-Synthesizable Verilog (don t use in lab) Delays foo = #10 8 hff // set value in 10 time units Clock Instead, use external clock in lab always #2 clk = ~clk; //toggle every 2 time units Initialize values initial begin reset = 1'b0; Instead, use reset input to initialize Simulation outputs instead, waveform viewer and logic analyzer initial begin // print verilog change dump // can open vcd file in waveform viewer $dumpfile( "dump.vcd" ); 17

Uninitialized Values Unassigned wire has initial value of z (high impedance) Uninitialized reg has a value of x (unknown logic state) What are values of r1 and r2 in the example below? module foo; reg r1, r2; always #2 r1 = ~r1; always #2 r2 = ~r2; initial begin $monitor( r1=%b r2=%b,r1,r2); //print r1 = 0; #10; //wait 10 time units $finish; module 18

Use of Modules 19

Modules Modules break up design and allow for replication of common blocks in a large design Declaration is a definition of module. Creates a part that can be used to build bigger modules Each module can contain sequential and combinational logic, and can contain other modules module ha( s,c,a,b ); output s,c; input a,b; wire a,b,s,c; assign s = a ^ b; assign c = a & b; module a b s c 20

Modules Instantiation creates a named instance of that module in top level design or declaration of another module Connect instantiated modules together using wires Note that Verilog is flexible about how to write this, so you may see different formats with equivalent meaning module fa( s,cout,a,b,cin); output s,cout; input a,b,cin; wire a,b,cin,s,cout; wire s1,c1,c2; HA1 ha HA1(s1,c1,a,b); ha HA2(s,c2,s1,cin); a a assign cout = c1 c2; b b module cin s c c1 s1 HA2 a b s c c2 s c 21

Hierarchy of Modules Module instances can instantiate other modules within them Ultimately, the design that gets placed onto chip is an instance of some top level module the inputs and outputs of the module become the pins of the chip Top level modules can usually be inferred automatically from the Verilog code top level module is the one that instantiates other modules and is not instantiated by any other modules module fa( s,cout,a,b,cin); output s,cout; input a,b,cin; wire a,b,cin,s,cout; wire s1,c1,c2; ha HA1(s1,c1,a,b); ha HA2(s,c2,s1,cin); assign cout = c1 c2; module module ha( s,c,a,b ); output s,c; input a,b; wire a,b,s,c; assign s = a ^ b; assign c = a & b; module 22

Module Hierarchy How many half adders in foo module? module foo(); wire [2:0] a; wire [2:0] b; wire [1:0] c; wire [3:0] s; fa fa0(s[0],c[0],a[0],b[0],1 b0); fa fa1(s[1],c[1],a[1],b[1],c[0]); fa fa2(s[2],s[3],a[2],b[2],c[1]); module module fa( s,cout,a,b,cin); output s,cout; input a,b,cin; wire a,b,cin,s,cout; wire s1,c1,c2; ha HA1(s1,c1,a,b); ha HA2(s,c2,s1,cin); assign cout = c1 c2; module 23

Wires and Regs in Module Ports In module declaration Input ports must be wires Output ports can be regs or wires a i o b module foo( i, o); input i; output o; wire i; {wire reg} o; //something here module In module instantiation Wires and regs can both connect to input ports Output ports must connect to wires wire b; {wire reg} a; foo fooinst (a,b); //something here 24

Modules module adder( input [31:0] a, // a input input [31:0] b, // b input input cin, // carry-in output [31:0] sum, // sum output output cout); // carry-out assign {cout, sum} = a + b + cin; module // adder module fa( s,cout,a,b,cin); output s,cout; input a,b,cin; wire a,b,cin,s,cout; wire s1,c1,c2; ha HA1(s1,c1,a,b); ha HA2(s,c2,s1,cin); assign cout = c1 c2; module 25

Which of the following are legal? reasonable? module ha0( s,c,a,b ); output s,c; input a,b; wire a,b; wire s,c; assign s = a ^ b; assign c = a & b; module module ha1( s,c,a,b); output s,c; input a,b; wire a,b; reg s,c; always @(*) begin s = a ^ b; c = a & b; module module ha2( s,c,a,b); output s,c; input a,b; wire a,b; reg s,c; always @(*) begin s <= a ^ b; c <= a & b; module module ha3( s,c,a,b); output s,c; input a,b; wire a,b; wire s,c; always @(*) begin s = a ^ b; c = a & b; module 26

Implicit and Explicit port connections Explicit port connections give the name of both the port and the wire connecting to them Implicit port connections give only the name of the wire and use order to infer which port they connect to Explicit is more verbose and can be useful for avoiding ordering bugs Either will be fine for lab module fa( s,cout,a,b,cin); output s,cout; input a,b,cin; wire a,b,cin,s,cout; wire s1,c1,c2; ha HA1(s1,c1,a,b); ha HA2(s,c2,s1,cin); assign cout = c1 c2; module module top(); wire [1:0] a; wire [1:0] b; wire c; wire [2:0] s; fa fa0(.s( s[0]),.cout( c ),.a( a[0]),.b( b[0]),.cin( 1 b0) ); fa fa1( module s[1], s[2], a[1], b[1], c ); 27

Examples 28

Blocking vs non-blocking assignment Initial value of a=1 and b=2 What are the values of a and b on future clock cycles? always @ (posedge clock) begin a=b; // blocking assignment b=a; always @ (posedge clock) begin a <=b; // nonblocking assignment b <=a; 29

Example - Shift-Register in Verilog Incorrect implementation always @(posedge clk) begin shift_reg[2] = shift_reg[3]; shift_reg[1] = shift_reg[2]; shift_reg[0] = shift_reg[1]; Correct implementation always @(posedge clk) begin shift_reg[2] <= shift_reg[3]; shift_reg[1] <= shift_reg[2]; shift_reg[0] <= shift_reg[1]; = : Blocking Assignment Value in shift_reg[3] will be assigned to shift_reg[0] directly <= : Non-Blocking Assignment Updating will happen after capturing all right-side register values 30

Combinational and Sequential Blocks Combinational Signals that are changing all the time inside a clock period E.g., the next state that you will assign to a register Either wires assign foo_next = bar; Or regs always @(*) foo_next = bar; Sequential Latch signal values on clock edges always @(posedge clk) foo <= foo_next; 31

Coding Style Many considerations like the quality of expected/resulting synthesis but also ease of debugging A good (and required for lab) convention is to separate combinational and sequential blocks entirely Sequential block has only assignments to registers based on next states from combinational logic or initial values when reset goes low (see example below) This keeps your code easy to read and debug and avoids subtle flaws always @(posedge clk) begin if (!rst_n) begin //reset things here state <= 0; foo <= 1; else begin // next state from comb. state <= state_nxt; foo <= foo_nxt; comb. logic state_nxt rst_n sequential state 32

Mealy vs. Moore State Machines Mealy - event driven - Next-state and Output dep on both current state and input Moore - state driven - Next-state deps on both current state and input - Output deps only on current state 33

Moore State Machine 01 s1 s2 00 10 module fsm_moore( output [1:0] out, input clk, input s1, input s2, input rst_n ); reg [1:0] state, state_nxt; assign out = state; always @(posedge clk) begin if (!rst_n) state <= 2'b00; else state <= state_nxt; always @(*) begin case(state) 2'b00: begin if (s1 == 1'b1) state_nxt = 2'b01; else state_nxt = 2'b00; 2'b01: begin if (s2 == 1'b1) state_nxt = 2'b10; else state_nxt = 2'b01; 2'b10: state_nxt = 2'b00; default: state_nxt = 2'b00; case module 34

Moore State Machine state[1] s1 state[0] s2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 0 1 1 1 1 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 0 1 1 1 1 0 0 state_nxt[1] state_nxt[0] Note the use of else conditions and default cases in FSM definition. Without this, the synthesis tools may infer extra state bits to hold state when nothing is assigned to state_nxt module fsm_moore( output [1:0] out, input clk, input s1, input s2, input rst_n ); reg [1:0] state, state_nxt; assign out = state; always @(posedge clk) begin if (!rst_n) state <= 2'b00; else state <= state_nxt; always @(*) begin case(state) 2'b00: begin if (s1 == 1'b1) state_nxt = 2'b01; else state_nxt = 2'b00; 2'b01: begin if (s2 == 1'b1) state_nxt = 2'b10; else state_nxt = 2'b01; 2'b10: state_nxt = 2'b00; default: state_nxt = 2'b00; case module 35

Moore State Machine Quartus: simulation results 36

Verilog Simulation Testbenches (usually but not in this lab) Verilog code with non-synthesizable constructs to exercise your logic Written as module with no inputs Instantiates a top level design, and applies inputs at different times module tb; reg wire a,b,ci; s,co; fa inst (.sum(s),.cout(co),.ina(a),.inb(b),.cin(ci) ); initial begin $monitor("time=",$time,"%b %b %b %b %b",a,b,ci,s,co); a=0; b=0; ci=0; #1; a=0; b=0; ci=1; #1; a=0; b=1; ci=0; $finish; module 37

Summary Partition into modules and plan out design before implementing Stub out all inputs and outputs and comment Separate combinational blocks from sequential block FSM is implemented in combinational block Next state is calculated in combinational block Output is calculated in combinational block Sequential block contains simple latching assignments Make sure you use non-blocking statements in sequential and blocking in combinational blocks Use intuitive names (signal, signal_nxt) and follow convention Test each module indepently, and then test entire design Remember this is hardware not software 38