Chapter 2 Using Hardware Description Language Verilog. Overview

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

EN2911X: Reconfigurable Computing Topic 02: Hardware Definition Languages

Contents. Appendix D Verilog Summary Page 1 of 16

Synthesis of Language Constructs. 5/10/04 & 5/13/04 Hardware Description Languages and Synthesis

Synthesizable Verilog

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

Synthesis of Combinational and Sequential Circuits with Verilog

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

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

Introduction to Verilog/System Verilog

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

Verilog 1 - Fundamentals

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

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

Schematic design. Gate level design. 0 EDA (Electronic Design Assistance) 0 Classical design. 0 Computer based language

Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL. Variables and Logic Value Set. Data Types. Why use an HDL?

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

Introduction to Verilog HDL. Verilog 1

Design Using Verilog

Online Verilog Resources

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

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

Verilog Design Principles

Logic Synthesis. EECS150 - Digital Design Lecture 6 - Synthesis

Chap 6 Introduction to HDL (d)

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

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

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

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

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

Introduction To Verilog Design. Chun-Hung Chou

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

CSE140L: Components and Design Techniques for Digital Systems Lab

EEL 4783: HDL in Digital System Design

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

EN164: Design of Computing Systems Lecture 06: Lab Foundations / Verilog 2

EECS150 - Digital Design Lecture 10 Logic Synthesis

EECS 427 Lecture 14: Verilog HDL Reading: Many handouts/references. EECS 427 W07 Lecture 14 1

CSE140L: Components and Design

Verilog HDL Introduction

Introduction. Why Use HDL? Simulation output. Explanation

Department of Computer Science and Electrical Engineering. Intro to Verilog II

Chapter 3: Dataflow Modeling

Verilog Coding Guideline

EECS150 - Digital Design Lecture 10 Logic Synthesis

VLSI Design 13. Introduction to Verilog

Hardware description languages

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

ECE 353 Lab 3 (Verilog Design Approach)

ENGN1640: Design of Computing Systems Topic 02: Lab Foundations

Digital Design with FPGAs. By Neeraj Kulkarni

Verilog Design Principles

Under-Graduate Project Logic Design with Behavioral Models

Lecture 32: SystemVerilog

Verilog Fundamentals. Shubham Singh. Junior Undergrad. Electrical Engineering

CSE241 VLSI Digital Circuits Winter Recitation 1: RTL Coding in Verilog

CAD for VLSI Design - I. Lecture 21 V. Kamakoti and Shankar Balachandran

Verilog 1 - Fundamentals

Hardware Description Language (HDL)

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

VERILOG 2: LANGUAGE BASICS

Introduction To HDL. Verilog HDL. Debdeep Mukhopadhyay Dept of CSE, IIT Madras 1

ECE 4514 Digital Design II. Spring Lecture 7: Dataflow Modeling

Lecture #2: Verilog HDL

14. Introducton to Verilog

Verilog introduction. Embedded and Ambient Systems Lab

Digital Design (VIMIAA01) Introduction to the Verilog HDL

Programmable Logic Devices Verilog VII CMPE 415

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

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

Verilog Dataflow Modeling

Register Transfer Level in Verilog: Part I

Introduction to Verilog HDL

Course Topics - Outline

EN2911X: Reconfigurable Computing Lecture 05: Verilog (2)

HDLs and SystemVerilog. Digital Computer Design

Introduction to Digital Design with Verilog HDL

Image Courtesy CS250 Section 2. Yunsup Lee 9/4/09

Verilog for High Performance

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

Verilog Overview. The Verilog Hardware Description Language. Simulation of Digital Systems. Simulation of Digital Systems. Don Thomas, 1998, Page 1

Introduction To HDL. Verilog HDL. Debdeep Mukhopadhyay How it started!

EE 8351 Digital Logic Circuits Ms.J.Jayaudhaya, ASP/EEE

14. Introducton to Verilog

Verilog Overview. The Verilog Hardware Description Language. Simulation of Digital Systems. Simulation of Digital Systems. Don Thomas, 1998, Page 1

Verilog Behavioral Modeling

What is Verilog HDL? Lecture 1: Verilog HDL Introduction. Basic Design Methodology. What is VHDL? Requirements

CS6710 Tool Suite. Verilog is the Key Tool

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

ECEN 468 Advanced Logic Design

Outline. EECS150 - Digital Design Lecture 5 - Verilog 2. Structural Model: 2-to1 mux. Structural Model - XOR. Verilog Basics Lots of Examples

ECEN 449 Microprocessor System Design. Verilog. Texas A&M University

Verilog Overview. The Verilog Hardware Description Language. Simulation of Digital Systems. Simulation of Digital Systems. Don Thomas, 1998, Page 1

A Brief Introduction to Verilog Hardware Definition Language (HDL)

Why Should I Learn This Language? VLSI HDL. Verilog-2

Verilog. Reminder: Lab #1 due tonight! Fall 2008 Lecture 3

- 1 of 18 - The Verilog Hardware Description Language - A Behavioural View Overview. The Behavioural Model

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

Verilog Module 1 Introduction and Combinational Logic

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

Transcription:

Chapter 2 Using Hardware Description Language Verilog CSE4210 Winter 2012 Mokhtar Aboelaze based on slides by Dr. Shoab A. Khan Overview Algorithm development isa usually done in MATLAB, C, or C++ Code must be structured such that H/W and S/W designers can correlate various components H/W is written in Verilog (or any other HDL). SystemVerilog enhances some of the features of Verilog for design, but more importantly for verification 1

Verilog An Overview Though Verilog is C like in syntax but has distinct character and interpretation. A programmer must set his perception right before coding in Verilog. He must visualize hardware in his mind while structuring Verilog modules consisting of procedural blocks and assignments. Some constructs in Verilog is for supporting verification, modeling, and simulation and do not synthesize (RTL Verilog is synthesizable). Design Specification System Level Design Algorithm Development Floating Point Behavioral Description Hardware Development and Testing H/W Software development and testing S/W Fixed Point Implementation S/W System level design verification and testing S/W H/W Partitioning S/W H/W Co-verification System Integration & Testing Fixed point conversion RTL Verilog Implementation Functional Verification Synthesis Gate level netlist Timing & Functional Verification layout 2

Verilog A Verilog code has a top level module which may instantiate many other modules. The module is the basic building block in Verilog A module when synthesized infers digital logic. The designer conceives the design as hierarchically interconnected lower level modules forming higher level modules Each module starts with the keyword module, followed by the module name and parameters list. The module is ed with the keyword module. Modules module FA (<port declaration>);... module module FA ( input a, Input b, input c_in, output sum, output c_out); assign {c_out,sum} = a+b+c_in; module 3

RTL Design At RTL level the designer must know all the registers in the design The computations performed are modeled by a combinational cloud Gate level details are not important HDLs Verilog/VHDL are used to implement a design at RTL level Verilog resembles with C and is usually preferred in industry RTL Design 4

Verilog Standards 1995: IEEE Standard 1364-1995 (Verilog 95) 2002: IEEE Standard 1364-2001 (Verilog 2001) 2003: IEEE Standard 1364-2001 revision C 2005: IEEE Standard 1364-2005 (Verilog 2005) 1364-2005 IEEE Standard for Verilog Hardware Description Language 2005: IEEE Standard 1800-2005 (SystemVerilog) 1800-2005 IEEE Standard for System Verilog: Unified Hardware Design, Specification and Verification Language Design Partitioning Module 1 Cloud 1 Module 2 Cloud 2 Module 3 Cloud 3 If possible partition such that boundaries reside at register outputs. No combination cloud crosses module boundaries Gives synthesis tool more leverage to generate optimized logic 5

System Level Design Tips Algorithms are designed in MATLAB, C, Must meet the Requirements and specifications System designer must define all the components (input, output, and functionality). and the data flow among the components. The components are mapped to ASIC, FPGA, or embedded DSP s. It is preferred that the designers in the subsequent phases to stick to the same components and variables names as far as possible to ease going back and forth in the design cycle Hierarchical Design b a 3 3 1 a[0] 1 b[0] 1 1 1 1 a[1] b[1] a[2] b2] c_in fa0 fa1 fa2 1 1 FA FA FA c_out sum[0] sum[1] sum[2] sum 3 6

module FA ( input a, Input b, input c_in, output sum, output c_out); assign {c_out,sum} = a+b+c_in; module Hierarchical Design module RCA ( input [2:0] a,b, input c_in, output [2:0] sum, output c_out); wire carry[1:0]; //Module instantiation FA fa0(a[0],b[0],c_in, sum[0],carry[0]); FA fa1(a[1],b[1],carry[0], sum[1],carry[1]); FA fa2(a[2],b[2],carry[1], sum[2],c_out); module Hierarchical Design Another way to do it without the need to order the parameters module RCA ( FA fa0(.a(a[0]),.b(b[0]),.c_in(c_in),.sum(sum[0]),.c_out(carry[0])); input [2:0] a,b, input c_in, output [2:0] sum, output c_out); wire carry[1:0]; //Module instantiation FA fa0(a[0],b[0],c_in, sum[0],carry[0]); FA fa1(a[1],b[1],carry[0], sum[1],carry[1]); FA fa2(a[2],b[2],carry[1], sum[2],c_out); module 7

Synthesis Guidelines Avoid glue logic that connects 2 modules Individual modules may satisfy timing conditions, but top level module may not. Such a logic should be made as a part of the combinational logic in one or the two modules. This may arise in debugging or after changing/correcting one of the interfaces of a module. 8

Synthesis Guidelines Design modules with common design objectives Try to avoid oputting time-critical and nontime-critical logic in the same modules. Time critical logic will de synthesized for best timing, while non-time-critical logic may be synthesized for minimum area. Split them into two modules 9

Verilog Syntax 0 zero, logic low, false, or ground 1 one, logic high, or power x unknown z high impedance, unconnected, or tri-state port A number in Verilog may contain all four possible values: Example: 20 b 0011_1010_101x_x0z0_011z The underscore (_) is ignored by simulation and synthesis tools. It is meant to give a better visualization of the number 10

Data Types Nets Nets are physical connections between components Nets always show the logic value of the driving components Many types of nets, we use wire in RTL Usually is the output of a combinational logic Registers Implicit storage unless variable of this type is modified it retains previously assigned value Does not necessarily imply a hardware register Register type is denoted by reg Variable Declaration Declaring a net, signed or unsigned wire [<signed>] [<range>] <net_name> [<net_name>*]; Range is specified as [MSB:LSB]. Default is one bit wide Declaring a register reg [<signed>] [<range>] <reg_name> [<reg_name>*]; Declaring memory reg [<range>] <memory_name> [<start_addr> : <_addr>]; Examples reg r; // 1-bit reg variable wire x1, x2; // 2 1-bit wire variable reg signed [7:0] y_reg; // 8-bit sign register reg [7:0] ram_mem [0:1023]; //a 1 KB memory 11

Constants Constants can be written in decimal (default) 13, d13 binary 4 b1101 octal 4 o15 hexadecimal 4 hd Levels of Abstraction The HW can be described at several levels of details To capture these details Verilog provides four levels of abstraction 1. Switch level 2. Gate level 3. Dataflow level 4. Behavioral or algorithmic level 12

Levels of Abstraction Switch Level: The lowest level of abstraction is the switch or transistor Level Modeling Gate Level: Synthesis tools compile high level code and generate code at gate level Dataflow Level: The level of abstraction higher than the gate level Behavioral Level: In more complex digital designs, priority is given to the performance and behaviour at algorithmic level Switch Level The lowest level of abstraction (switch and transistor level modeling). Rarely used at the level we are talking about in this course 13

Gate level Structural Modeling Are build from gate primitives Verilog has built-in gate-level primitives NAND, NOR, AND, OR, XOR, BUF, NOT, and some others Describe the circuit using logic gates-much as you have see in an implementation of a circuit in basic logic design course The delay can also be modeled Typical gate instantiation is and #delay instance-name (out, in1, in2, in3, ) Gate level Structural Modeling module mux (out, in1, in2, sel); output out; input in1, in2, sel; wire out1, out2, sel_n; and #5 a1(out1, in1, sel_n); and #5 a2(out2, in2, sel); or #5 o1(out, out1, out2); not n1(sel_n, sel); module 14

Data Flow Modeling Expressions, operands and operators form the basis of data flow modeling Operators for Dataflow Modeling 15

Conditional Operator This statement is equivalent to Conditional operator can also be used to infer higher order multiplexers. The following code infers a 4:1 mux Concatenation and Replication { } means concatenation of what is inside the curly braces 16

Replication {n{}} means replication A = 2 b01; B = {4{A}} // the replication operator The operator replicates A four times and assigns the replicated value to B. Thus B = 8 b 01010101 Relational Operators 17

Reduction Operators Bitwise Arithmetic Operators 18

Equality Operators Logical Operators 19

Shift Operators Examples Shift an unsigned reg A = 6 b101111 by 2 B = A >> 2; drops 2 LSBs and apps two zeros at MSBs position, thus B = 6 b001011 Arithmetic shift right a wire A= 6 b101111 by 2 B = A >>> 2; This operation will drop 2 LSBs and apps the sign bit to 2 MSBs locations. Thus B is 6 b111011. 20

Examples Apply & reduction operator on a 4-bit number A=4 b1011 assign out = &A; This operation is equivalent to performing a bitwise & operation on all the bits of A i.e. out = A[0] & A[1] & A[2] & A[3]; Dataflow Level At this level every expression is modeled with the assign keyword assign c=a+b The value on the wire c is continuously driven by the result of the arithmetic operation RHS must be a wire Operands my be wire or reg 21

Example Dataflow Modeling module adder_4 (a, b, ci, s, co); input [3:0] a, b; input ci; output [3:0] s; output co; assign {co, s} = a + b + ci; module Example 2;1 MUX module mux2_1(in1, in2, sel, out); input in1, in2, sel; output out; assign out = sel? in2: in1; module mux2_1 stimulus wire reg module stimulus; reg IN1, IN2, SEL; wire OUT; mux2_1 MUX(IN1, IN2, SEL, OUT); initial IN1 = 1; IN2 = 0; SEL = 0; #5 SEL = 1; #5 IN1 = 0; initial $monitor($time, ": IN1=%b, IN2=%b, SEL=%b, OUT=%b\n", IN1, IN2, SEL, OUT); module 22

Behavioral Modeling High level language constructs are used for loop if else while etc All statements come in a procedural block always initial A subset of constructs are synthesizable and called RTL Verilog The designer must know the HW consequences of the code (for loop ) Behavioral Models All variables on the LHS must be of type reg. RHS may be reg or wire initial Non-synthesizable procedural assignment 1 procedural assignment 2.. always procedural assignment 1 procedural assignment 2.. 23

Initial Block This block starts with initial keyword This is non synthesizable Non RTL This block is used only in stimulus All initial blocks execute concurrently in an arbitrary order They execute until they come to a #delay operator Then they susp, putting themselves in the event list delay time units in the future At delay units, they resume executing where they left off Procedural Assignments Blocking assignment Represented as = (for combinational circuits) Assignment takes place immediately Blocks, i.e. next statement will wait (blocked) until the assignment is completed always A=B; A+B, B+B B=A; 24

Procedural Assignments Nonblocking assignment Represented as <= (for synchronous logic) Assignment takes place at the of the block LHS are calculated first, then assigned to RHS always A<=B; Swaps A and B B<=A; reg sum_reg, carry_reg; always @(posedge clk) sum_reg <=x^y; carry_reg <=x&y; 25

Multiple Procedural Assignments All procedural blocks starts execution at t=0. The simulator schedules their execution in an arbitrary order All assignments to the same variables must be in the same block, otherwise pre and post synthesis simulation could be different (if synthesized at all). Time Control $time A built-in variable that represents simulated time a unitless integer $display($time, a=%d, a); # Time Control #<number> statement statement is not executed until <number> time units have passed control is released so that other processes can execute used in test code used to model propagation delay in combinational logic 60 xor #2 x2(c,a,b) 26

@ Time Control @(*) @(expression) @(expression or expression or ) @(posedge onebit) @(negedge onebit) do not execute statement until event occurs @(clk) is same as @(posedge clk or negedge clk) RTL Coding Guidelines Avoid Combinational feedback. it does not make sense If logic requires it, a register must be placed in the feedback loop reg [15:0] acc; always @(acc) acc=acc+1; 27

Registers //register with asynchronous active low reset always @(Posedge clk or negedge rse_n) if(!rst_n) r_reg <=b b0; else r_reg <= data; //register with synchronous active low reset always @(Posedge clk) if(!rst_n) r_reg <=b b0; else r_reg <= data; //register with asynchronous active high reset always @(Posedge clk or negedge rse_n) if(rst_n) r_reg <=b b0; else r_reg <= data; //register with synchronous active high reset always @(Posedge clk) if(rst_n) r_reg <=b b0; else r_reg <= data; Example -- Accumulator // Register with asynchronous active low reset always @ (posedge clk or negedge rst_n) if(!rst_n) acc_reg <= 16 b0; else acc_reg <= data+acc_reg; // Register with asynchronous active high reset always @ (posedge clk or posedge rst) if(rst) acc_reg <= 16 b0; else acc_reg <= data+acc_reg; 28

Generating Clock in Stimulus initial // All the initializations should be in the initial block clk = 0; // clock signal must be initialized to 0 # 5 rst_n = 0; // pull active low reset signal to low # 2 rst_n=1; // pull the signal back to high always // generate clock in an always block #10 clk=(~clk); Case Statement module mux4_1(in1, in2, in3, in4, sel, out); input [1:0] sel; input [15:0] in1, in2, in3, in3; output [15:0] out; reg [15:0] out; always @(*) case (sel) 2'b00: out = in1; 2'b01: out = in2; 2'b10: out = in3; 2'b11: out = in4; default: out = 16'bx; case module MUX whose output deps on sel If multiple matches, the first one is executed only @(*) automatically poulates the sensitivity list with all varaibles in the RHS Case is inside an always block 29

Casex and Casez To make comparison with the don t care casez takes z as don t care casex takes z and x as don t care always @(op_code) casez (op_code) 4 b1???: alu_inst(op_code); 4 b01??: mem_rd(op_code); 4 b001?: mem_wr(op_code); case If Statement if (brach_flag) PC = brach_addr else PC = next_addr; always @(op_code) if (op_code == 2 b00) cntr_sgn = 4 b1011; else if (op_code == 2 b01) cntr_sgn = 4 b1110; else cntr_sgn = 4 b0000; 30

Avoiding latches A latch is a storage device that stores a value without the use of a clock. Latches are technology-specific and must be avoided in synchronous designs To avoid latches adhere to coding guidelines fully specify assignments or use a default assignment input [1:0] sel; reg [1:0] out_a, out_b; always @ (*) if (sel == 2 b00) out_a = 2 b01; out_b = 2 b10; else out_a = 2 b01; Out_b is not assigned any value under else, the synthesis tool will infer a latch Avoiding latches Use default assignment input [1:0] sel; reg [1:0] out_a, out_b; always @ (*) out_a = 2 b00; out_b = 2 b00; if (sel=2 b00) out_a = 2 b01; out_b = 2 b10; else out_a = 2 b01; 31

Check all conditions input [1:0] sel; reg [1:0] out_a, out_b; always @ (*) out_a = 2 b00; out_b = 2 b00; if (sel=2 b00) out_a = 2 b01; out_b = 2 b10; else if (sel == 2 b01) out_a = 2 b01; Avoiding latches always @* out_a = 2 b00; out_b = 2 b00; if (sel==2 b00) out_a = 2 b01; out_b = 2 b10; else if (sel == 2 b01) out_a = 2 b01; else out_a = 2 b00; Avoid latches always @* out_a = 2 b00; out_b = 2 b00; case (sel) 2 b00: out_a = 2 b01; out_b = 2 b10; 2 b01: out_a = 2 b01; default: out_a = 2 b00; case 32