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

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

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

Hardware description languages

Hardware Description Languages: Verilog

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

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

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

Introduction to Verilog/System Verilog

Introduction to Verilog HDL

Techniques for Digital Systems Lab. Verilog HDL. Tajana Simunic Rosing. Source: Eric Crabill, Xilinx

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

Introduction to Verilog. Garrison W. Greenwood, Ph.D, P.E.

EECS150 - Digital Design Lecture 4 - Verilog Introduction. Outline

Synthesizable Verilog

Introduction To Verilog Design. Chun-Hung Chou

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

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

Verilog introduction. Embedded and Ambient Systems Lab

A Brief Introduction to Verilog Hardware Definition Language (HDL)

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

Chapter 3 working with combinational logic

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

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

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

Combinational Logic II

Verilog Design Principles

Contents. Appendix D Verilog Summary Page 1 of 16

Verilog Coding Guideline

Lecture 15: System Modeling and Verilog

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

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

Digital Design with FPGAs. By Neeraj Kulkarni

Design Using Verilog

register:a group of binary cells suitable for holding binary information flip-flops + gates

Lecture 3: Modeling in VHDL. EE 3610 Digital Systems

Lecture 8: Combinational Verilog. CSE 370, Autumn 2007 Benjamin Ylvisaker. Where We Are. Last lecture: Minimization with K!maps

Lecture #2: Verilog HDL

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

Digital Design with SystemVerilog

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

EN2911X: Reconfigurable Computing Topic 02: Hardware Definition Languages

Introduction. Why Use HDL? Simulation output. Explanation

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

Chap 6 Introduction to HDL (d)

CSE140L: Components and Design Techniques for Digital Systems Lab

ECEN 468 Advanced Logic Design

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

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

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

Online Verilog Resources

Digital Design (VIMIAA01) Introduction to the Verilog HDL

ECEN 468 Advanced Logic Design

CSE140L: Components and Design

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

EECS150 - Digital Design Lecture 5 - Verilog Logic Synthesis

Introduction to Verilog HDL. Verilog 1

Advanced Digital Design Using FPGA. Dr. Shahrokh Abadi

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

Verilog. Like VHDL, Verilog HDL is like a programming language but:

EEL 4783: HDL in Digital System Design

structure syntax different levels of abstraction

Here is a list of lecture objectives. They are provided for you to reflect on what you are supposed to learn, rather than an introduction to this

Verilog Fundamentals. Shubham Singh. Junior Undergrad. Electrical Engineering

Writing Circuit Descriptions 8

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

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

Where We Are. Quick History Lesson. Lecture 8: Combinational Verilog. Specifying Circuits. Last lecture: Minimization with K!maps

Synthesis of Combinational and Sequential Circuits with Verilog

Chapter 3 Part 2 Combinational Logic Design

Speaker: Kayting Adviser: Prof. An-Yeu Wu Date: 2009/11/23

EN2911X: Reconfigurable Computing Lecture 05: Verilog (2)

Hardware Description Languages (HDLs) Verilog

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

Arithmetic Operators There are two types of operators: binary and unary Binary operators:

Register Transfer Level in Verilog: Part I

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

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

Chapter 2 Using Hardware Description Language Verilog. Overview

Verilog 1 - Fundamentals

Verilog HDL Introduction

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

Lab 7 (All Sections) Prelab: Introduction to Verilog

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

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

271/469 Verilog Tutorial

Under-Graduate Project Logic Design with Behavioral Models

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

Verilog Design Principles

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

Verilog for Synthesis Ing. Pullini Antonio

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

Introduction. Purpose. Intended Audience. Conventions. Close

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

CS6710 Tool Suite. Verilog is the Key Tool

Outline. EECS Components and Design Techniques for Digital Systems. Lec 11 Putting it all together Where are we now?

EECS150 - Digital Design Lecture 10 Logic Synthesis

EECS150 - Digital Design Lecture 10 Logic Synthesis

Arithmetic Circuits. Nurul Hazlina Adder 2. Multiplier 3. Arithmetic Logic Unit (ALU) 4. HDL for Arithmetic Circuit

VHDL VS VERILOG.

Transcription:

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

Hardware description languages Used to describe & model the operation of digital circuits. Specify simulation procedure for the circuit and check its response. Simulation requires a logic simulator. Synthesis: transformation of the HDL description into a physical implementation (transistors, gates) When a human does this, it is called logic design. When a machine does this, it is called synthesis.

HDLs Abel (circa 1983) - developed by Data-I/O targeted to programmable logic devices not good for much more than state machines ISP (circa 1977) - research project at CMU simulation, but no synthesis Verilog (circa 1985) - developed by Gateway (absorbed by Cadence) similar to C delays are the only interaction with the simulator fairly efficient and easy to write IEEE standard VHDL (circa 1987) - DoD sponsored standard VHSIC Hardware Description Language (VHSIC is Very High Speed Integrated Circuit). simulation semantics visible; very general but verbose IEEE standard * In US, the commercial industries tend to use more Verilog, while the aerospace and defense industries more heavily favor VHDL

Verilog Usage Verilog may be used to model circuits and behaviors at various levels of abstraction: Algorithmic. Behavioral. Logic Gate Transistor An FPGA is a programmable hardware where you can download your synthesized HDL implementation Projects in HDL are tested on FPGAs prior to fabrication Transistor and gate level modeling are not appropriate for design with FPGA devices. https://en.wikipedia.org/wiki/field-programmable_gate_array

Verilog Example Verilog Module X Inputs Circuit Wire Y Z O Output In this class we will build and simulate circuits. We will build hierarchical systems We will test for Functional correctness Performance Efficiency module sample (X,Y,Z,O); input X,Y,Z; output O; // Describe the circuit using logic symbols assign O = (X^Y)&Z; endmodule

Verilog Supports structural and behavioral descriptions Structural explicit structure of the circuit e.g., each logic gate instantiated and connected to others Behavioral program describes input/output behavior of circuit many structural implementations could have same behavior e.g., different implementation of one Boolean function

Structural model module xor_gate (out, a, b); input a, b; output out; wire abar, bbar, t1, t2; inverter inva (abar, a); inverter invb (bbar, b); and_gate and1 (t1, a, bbar); and_gate and2 (t2, b, abar); or_gate or1 (out, t1, t2); a b invb inva and2 and1 or1 endmodule

Behavioral model module xor_gate (out_or, out_and, a, b); input a, b; output out_or, out_and; reg out_or, out_and; always @(a or b) begin out_or = a ^ b; end assign out_and = a & b; endmodule

Question Is the following model structural? A. Yes B. No C. I don t know! 9

Data Values For our logic design purposes, we ll consider Verilog to have four different bit values: 0, logic zero. 1, logic one. z, high impedance. x, unknown.

Data Types and Values There are two main data types in Verilog. Wires. Regs. These data types may be single bit or multi-bit. The general syntax is: {bit width} {base}{value} 4 d14 // 4-bit value, specified in decimal 4 he // 4-bit value, specified in hex 4 b1110 // 4-bit value, specified in binary 4 b10xz // 4-bit value, with x and z, in binary

Wires: Data Types continuously assigned values and do not store information. may have multiple drivers assigning values. When multiple drivers exist, the simulator resolves them into a single value for the wire. Every time a driver changes its output value, the resulting wire value is re-evaluated. This behaves much like an electrical wire...

Regs Data Types procedurally assigned values that store information until the next value assignment is made. can be used to model combinational or sequential logic. The name reg does not mean it is a register! A reg may be assigned by multiple processes. Other reg varieties include integer, real, and time.

Operators cont. Arithmetic operators (signed and can generate carry out): * Multiplication. / Division. % Modulus. + Addition. - Subtraction. Logical shift operators: << Shift left. >> Shift right. Relational operators: > Greater than. < Less than. >= Greater than or equal. <= Less than or equal.

Comparison operators: Operators cont. == Equality operator (compares to z, x are invalid).!= Not equal. Binary bit-wise operators: & Bit-wise logical AND. Bit-wise logical OR. ^ Bit-wise logical XOR. ~^ Bit-wise logical XNOR. Binary logical operators: && Binary logical AND. Binary logical OR. Operator for conditional selection: sel? value_if_sel_is_one : value_if_sel_is_zero oe? driven_value : 1 bz

Modules and Ports Consider a top level module declaration: module testbench; endmodule // Top level modules do not have ports. Consider a module declaration with ports: module two_input_xor (in1, in2, out); input in1, in2; output out; endmodule // We ll add more later Module Ports: define how the module interacts with the external world

Modules and Ports Ports may be of type {input, output, inout} and can also be multiple bits wide. module some_random_design (fred, bob, joe, sam, tom, ky); input fred; // 1-bit input port input [7:0] bob; // 8-bit input port output joe; // 1-bit output port output [1:0] sam; // 2-bit output port inout tom; // 1-bit bidirectional port inout [3:0] ky; // 4-bit bidirectional port // Some design description would be here endmodule

Input port: Port and Data Types driven from outside the module by a wire or a reg, inside the module it can only drive a wire Output port driven from inside the module by a wire or a reg, outside the module it can only drive a wire. Inout port May be driven by a wire, and drive a wire.

Instantiation module testbench; wire sig3; // wire driven by submodule reg sig1, sig2; // regs assigned by testbench two_input_xor my_xor (.in1(sig1),.in2(sig2),.out(sig3)); endmodule module two_input_xor (in1, in2, out); input in1, in2; output out; // We ll add more later endmodule Explicit module connection:.<port>(signal) By default, ports are wires inside the module (so if you want regs instead, you must explicitly state it)

Operators Used in both procedural and continuous assignments. Listed in the order of evaluation precedence: { } is used for concatenation. Say you have two 1-bit data objects, sam and bob. {sam, bob} is a 2-bit value from concatenation {{ }} is used for replication. Say you have a 1-bit data object, ted. {4{ted}} is a 4-bit value, ted replicated four times. Unary operators:! Performs logical negation (test for non-zero). ~ Performs bit-wise negation (complements). & Performs unary reduction of logical AND. Performs unary reduction of logical OR. ^ Performs unary reduction of logical XOR.

Continuous Assignment Continuous assignments are made with the assign statement: assign LHS = RHS; The left hand side, LHS, must be a wire. The right hand side, RHS, may be a wire, a reg, a constant, or expressions with operators using one or more wires, regs, and constants. The value of the RHS is continuously driven onto the wire of the LHS. Values x and z are allowed and processed. All assign statements operate concurrently.

Continuous Assignment module two_input_xor (in1, in2, out); input in1, in2; // use these as a wire output out; // use this as a wire assign out = in1 ^ in2; endmodule module two_input_xor (in1, in2, out); input in1, in2; output out; wire product1, product2; assign product1 = in1 &!in2; assign product2 =!in1 & in2; assign out = product1 product2; // could have done all in // assignment of out with // bigger expression endmodule

Continuous Assignment module two_input_xor (in1, in2, out); input in1, in2; output out; assign out = (in1!= in2); endmodule module two_input_xor (in1, in2, out); input in1, in2; output out; assign out = in1? (!in2) : (in2); endmodule What does this line represent?

Procedural Assignment Models combinational and sequential logic Operates concurrently and is preceded by event control. In block statements start with begin and end with end. Single assignments can omit begin and end. A sensitivity list specifies events which cause the execution to begin: always @(a or b) // any changes in a or b always @(posedge a) // a transitions from 0 to 1 always @(negedge a) // a transitions from 1 to 0 always @(a or b or negedge c or posedge d)

Procedural Assignment initial begin // These procedural assignments are executed // one time at the beginning of the simulation. end always @(sensitivity list) begin // These procedural assignments are executed // whenever the events in the sensitivity list // occur. end

Procedural Assignment Inside a block, two types of assignments exist: LHS = RHS; // blocking assignment LHS <=RHS; // non-blocking assignment Do not mix them in a given block. Assignment rules: The left hand side, LHS, must be a reg. The right hand side, RHS, may be a wire, a reg, a constant, or expressions with operators using one or more wires, regs, and constants.

Procedural Assignment Do I use blocking or non-blocking assignments? Blocking assignments are especially useful when describing combinational logic. Lines execute in order. You can build up complex logic expressions. Blocking assignments make your description evaluate in the order you described it. Non-blocking assignments are useful when describing sequential logic. All lines execute at the same time. At a clock or reset event, all memory elements change state at the same time, best modeled by non-blocking assignments. For conditional assignments use if-else and various types of case statements. You also can make use of additional timing control: wait, #delay, repeat, while, etc

Procedural Assignment Example: Blocking Vs Nonblocking Assignments 28

Procedural Assignment Combinational logic using operators: module two_input_xor (in1, in2, out); input in1, in2; output out; reg out; // use these as wires // use this as a wire always @(in1 or in2) begin out = in1 ^ in2; end // Note that all input terms // are in sensitivity list! // Or equivalent expression... // I could have simply used: // always @(in1 or in2) out = in1 ^ in2; endmodule

Procedural Assignment Combinational logic using if-else: module two_input_xor (in1, in2, out); input in1, in2; output out; reg out; // use these as wires // use this as a wire always @(in1 or in2) // Note that all input terms begin // are in sensitivity list! if (in1 == in2) out = 1 b0; else out = 1 b1; end endmodule

Procedural Assignment Combinational logic using case: module two_input_xor (in1, in2, out); input in1, in2; output out; reg out; // use these as wires // use this as a wire always @(in1 or in2) begin case ({in2, in1}) 2 b01: out = 1 b1; 2 b10: out = 1 b1; default: out = 1 b0; endcase end endmodule // Note that all input terms // are in sensitivity list! // Concatenated 2-bit selector

Delay Control You can add delay to continuous assignments. assign #delay LHS = RHS; The #delay indicates a time delay in simulation time units; for example, #5 is a delay of five. This can be used to model physical delays of combinational logic. The simulation time unit can be changed by the Verilog `timescale directive. Syntax: `timescale <reference_time_unit> / <precision>

Delay Control Control the timing of assignments in procedural blocks by: Level triggered timing control. wait (!reset); wait (!reset) a = b; Simple delays. #10; #10 a = b; Edge triggered timing control. @(a or b); @(a or b) c = d; @(posedge clk); @(negedge clk) a = b;

Delay Control Generation of clock and resets in testbench: reg rst, clk; initial begin end always begin end rst = 1 b1; // this happens once at time zero // starts off as asserted at time zero #100; // wait for 100 time units rst = 1 b0; clk = 1 b1; // deassert the rst signal // this repeats forever // starts off as high at time zero #25; // wait for half period clk = 1 b0; // clock goes low #25; // wait for half period

System Tasks The $ sign denotes Verilog system tasks, there are a large number of these, most useful being: $display( The value of a is %b, a); Used in procedural blocks for text output. The %b is the value format (binary, in this case ) $monitor Similar to display, but executes every time one of its parameter changes $finish; Used to finish the simulation. Use when your stimulus and response testing is done. $stop; Similar to $finish, but doesn t exit simulation.

Driving a simulation through a testbench module testbench (x, y); output x, y; reg [1:0] cnt; 2-bit vector initial begin cnt = 0; repeat (4) begin #10 cnt = cnt + 1; $display ("@ time=%d, x=%b, y=%b, cnt=%b", $time, x, y, cnt); end #10 $finish; end initial block executed only once at start of simulation print to a console assign x = cnt[1]; assign y = cnt[0]; endmodule directive to stop simulation

HDLs vs. PLs Program structure instantiation of multiple components of the same type specify interconnections between modules via schematic hierarchy of modules Assignment continuous assignment (logic always computes) propagation delay (computation takes time) timing of signals is important (when does computation have its effect) Data structures size explicitly spelled out - no dynamic structures no pointers Parallelism hardware is naturally parallel (must support multiple threads) assignments can occur in parallel (not just sequentially)

CSE140L: Components and Design Techniques for Digital Systems 38

Circuit Delay Transistors have instrinsic resistance and capacitance Signals take time to propagate from the input to the output of a gate Sometimes delays are labeled as @<delay_value> in circuit drawings 39

1-Bit & Multi-bit Adders Half Adder A C out + S B C out Full Adder A + S B C in Types of multi-bit adders Ripple-carry (slow) Carry-lookahead (faster) Two-level logic adder (even faster) A B 0 0 0 1 1 0 1 1 C out 0 0 0 1 S = A B C out = AB S 0 1 1 0 C in 0 0 0 0 1 1 1 1 A B 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 C out 0 0 0 1 0 1 1 1 S 0 1 1 0 1 0 0 1 C out Symbol A B N N + S N C in S = A B C in C out = AB + AC in + BC in

Ripple-Carry Adder Chain 1-bit adders together Carry ripples through entire chain Disadvantage: slow A 31 B 31 A 30 B 30 A 1 B 1 A 0 B 0 C out + C + 30 C 29 C + 1 C + 0 C in S 31 S 30 S 1 S 0 Ripple-carry adder delay t ripple = Nt FA where t FA is the delay of a full adder

Two-level Logic Adder No matter how many inputs you have, look at the truth table, convert to Kmap, apply the algorithm for two-level logic minimization Very fast adder, but. Beyond 8 inputs, a shockingly large amount of gates! Number of gates increases exponentially Ripple carry adder Carry-lookahead adder (next slide) FAST Two-level logic adder COMPLEX

Carry-lookahead adders c4 c3 c2 c1 c0 a3 a2 a1 a0 b3 b2 b1 b0 s3 s2 s1 s0 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 0 0 Carries First operand Second operand From the very beginning I can look ahead into the value of carries

Carry-lookahead adders Adder with propagate (P) and generate (G) outputs: Ci+1 = Ai Bi + Ci (Ai xor Bi) Generate Propagate Ci+1 = Gi + Ci Pi The carry at some level is equal to 1 if either the generate signal is equal to one or if the propagate and the previous carry are both 1

Carry-lookahead adders Ci+1 = Ai Bi + Ci (Ai xor Bi) 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 0 0 Carry a b Sum

Carry-lookahead adders Example: 4-bit CLA adder c1 = G0 + P0 c0 c2 = G1 + P1 c1 c3 = G2 + P2 c2 c4 = G3 + P3 c3 Gi = ai bi Pi = ai xor bi generate propagate All G and P are immediately available, but c are not. So you need to make substitutions: c1 = G0 + P0 c0 c2 = G1 + P1 (G0 + P0 c0) c3 = G2 + P2 c2 c4 = G3 + P3 c3 = G1 + P1G0 + P1P0c0 = (derive at home) = (derive at home) 46

Carry-lookahead adders Propagate/Generate circuit (one per each input bit) Ai Bi Ci Pi @ 1 gate delay Si @ 2 gate delays Gi @ 1 gate delay Carry circuits (implement the equations derived in the previous slide) C0 P0 G0 C0 P0 P1 G0 P1 G1 C1 @ 3 C2 @ 3 C0 P0 P1 P2 G0 P1 P2 G1 P2 G2 C3 @ 3 Note: this approach of looking ahead for building multi-bit operations is not limited to adders! C0 P0 P1 P2 P3 G0 P1 P2 P3 G1 P2 P3 G2 P3 G3 C4 @ 3 47

case Statements in Verilog What does the following piece of code represent? always_comb begin case ( sel_i ) 2 d0 : z_o = a_i; 2 d1 : z_o = b_i; 2 d2 : z_o = c_i; 2 d3 : z_o = d_i; default : z_o = 1 bx; endcase end endmodule always_comb implicitly assume a complete sensitivity list. It s the same as: always @(*) Useful for homework 3 48

Synchronous design: specify a clock When writing a module with a clock signal, use behavioral description with the clock in the sensitivity list always @(posedge clk) begin Useful for homework 3 // do stuff end 49

Generate a clock in a testbench When testing a module with multiple inputs, make sure you start from a known condition How to generate a clock signal in a testbench? initial begin end always // initialize your module inputs here #5 clk =! clk; Useful for homework 3 50