Verilog 1 - Fundamentals

Similar documents
Verilog 1 - Fundamentals

Course Details: Webpage

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

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

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

Lecture 32: SystemVerilog

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

Verilog Tutorial. Verilog Fundamentals. Originally designers used manual translation + bread boards for verification

Verilog Tutorial 9/28/2015. Verilog Fundamentals. Originally designers used manual translation + bread boards for verification

Digital Design with FPGAs. By Neeraj Kulkarni

Lecture 15: System Modeling and Verilog

EN2911X: Reconfigurable Computing Topic 02: Hardware Definition Languages

Synthesizable Verilog

Verilog Fundamentals. Shubham Singh. Junior Undergrad. Electrical Engineering

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

Verilog Module 1 Introduction and Combinational Logic

Chapter 2 Using Hardware Description Language Verilog. Overview

HDLs and SystemVerilog. Digital Computer Design

Verilog for Synthesis Ing. Pullini Antonio

Verilog Behavioral Modeling

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

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

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>

EEL 4783: HDL in Digital System Design

CSE140L: Components and Design Techniques for Digital Systems Lab

EECS150 - Digital Design Lecture 10 Logic Synthesis

Chapter 5 Registers & Counters

EECS150 - Digital Design Lecture 10 Logic Synthesis

Verilog Design Principles

CSE140L: Components and Design

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.

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

VERILOG 2: LANGUAGE BASICS

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

Contents. Appendix D Verilog Summary Page 1 of 16

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

FSM and Efficient Synthesizable FSM Design using Verilog

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

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

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

Modeling Sequential Circuits in Verilog

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

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

ENGN1640: Design of Computing Systems Topic 02: Lab Foundations

EECS150 - Digital Design Lecture 5 - Verilog Logic Synthesis

Introduction to Verilog HDL. Verilog 1

Logic Synthesis. EECS150 - Digital Design Lecture 6 - Synthesis

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

Lecture #2: Verilog HDL

Introduction to Verilog/System Verilog

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

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

Hardware Description Language VHDL (1) Introduction

Chap 6 Introduction to HDL (d)

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

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

Hardware Description Languages: Verilog

Introduction to Verilog HDL

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

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

ECEN 468 Advanced Logic Design

Digital Design with SystemVerilog

A Brief Introduction to Verilog Hardware Definition Language (HDL)

ECE 353 Lab 3 (Verilog Design Approach)

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

Online Verilog Resources

Hardware Description Languages. Hardware Description Languages. Hardware Description Languages. Digital Design Using Verilog

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

Writing Circuit Descriptions 8

Verilog Design Principles

VERILOG HDL. 1 ENGN3213: Digital Systems and Microprocessors L#5-6

EE 109L Final Review

Verilog for High Performance

ECE 574: Modeling and Synthesis of Digital Systems using Verilog and VHDL. Fall 2017 Final Exam (6.00 to 8.30pm) Verilog SOLUTIONS

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

EECS150 - Digital Design Lecture 4 - Verilog Introduction. Outline

Date Performed: Marks Obtained: /10. Group Members (ID):. Experiment # 11. Introduction to Verilog II Sequential Circuits

VERILOG: FLIP-FLOPS AND REGISTERS

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

Digital Design (VIMIAA01) Introduction to the Verilog HDL

Verilog introduction. Embedded and Ambient Systems Lab

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

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

Nonblocking Assignments in Verilog Synthesis; Coding Styles That Kill!

DIGITAL SYSTEM DESIGN

Combinational Logic II

Finite-State Machine (FSM) Design

(System)Verilog Tutorial Aleksandar Milenković

Tutorial 3. Appendix D. D.1 Design Using Verilog Code. The Ripple-Carry Adder Code. Functional Simulation

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

Digital Design Using Verilog

EE 231 Fall EE 231 Homework 8 Due October 20, 2010

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

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

Introduction to Verilog design. Design flow (from the book)

EE 109L Review. Name: Solutions

EPC6055 Digital Integrated Circuits EXAM 1 Fall Semester 2013

Xilinx ASMBL Architecture

Transcription:

Verilog 1 - Fundamentals FA FA FA FA module adder( input [3:0] A, B, output cout, output [3:0] S ); wire c0, c1, c2; FA fa0( A[0], B[0], 1 b0, c0, S[0] ); FA fa1( A[1], B[1], c0, c1, S[1] ); FA fa2( A[2], B[2], c1, c2, S[2] ); FA fa3( A[3], B[3], c2, cout, S[3] ); 6.375 Complex Digital Systems Arvind L02-1

What is Verilog? Verilog is a hardware description language There is more to it than that, but this is what we will use it for. In this class, Verilog is an implementation language, not a design language When you sit down to write verilog you should know exactly what you are implementing. Draw your schematic and state machines and transcribe it into Verilog. We are constraining you to a subset of the language for two reasons Reduce complexity for the course These are parts that people use to design real processors Courtesy of Arvind L02-2

Verilog Fundamentals History of hardware design languages Data types Structural Verilog Simple behaviors FA FA FA FA module adder( input [3:0] A, B, output cout, output [3:0] S ); wire c0, c1, c2; FA fa0( A[0], B[0], 1 b0, c0, S[0] ); FA fa1( A[1], B[1], c0, c1, S[1] ); FA fa2( A[2], B[2], c1, c2, S[2] ); FA fa3( A[3], B[3], c2, cout, S[3] ); L02-3

Bit-vector is the only data type in Verilog A bit can take on one of four values Value 0 1 X Z Meaning Logic zero Logic one Unknown logic value High impedance, floating In the simulation waveform viewer, Unknown signals are RED. There should be no red after reset An X bit might be a 0, 1, Z, or in transition. We can set bits to be X in situations where we don t care what the value is. This can help catch bugs and improve synthesis quality. L02-4

wire is used to denote a hardware net wire [15:0] instruction; wire [15:0] memory_req; wire [ 7:0] small_net; Absolutely no type safety when connecting nets! instruction memory_req instruction? small_net L02-5

Bit literals 4 b10_11 Base format ( d,b,o,h ) Underscores are ignored Decimal number representing size in bits Binary literals 8 b0000_0000 8 b0xx0_1xx1 Hexadecimal literals 32 h0a34_def1 16 haxxx Decimal literals 32 d42 We ll learn how to actually assign literals to nets a little later L02-6

Verilog Fundamentals History of hardware design languages Data types Structural Verilog Simple behaviors FA FA FA FA module adder( input [3:0] A, B, output cout, output [3:0] S ); wire c0, c1, c2; FA fa0( A[0], B[0], 1 b0, c0, S[0] ); FA fa1( A[1], B[1], c0, c1, S[1] ); FA fa2( A[2], B[2], c1, c2, S[2] ); FA fa3( A[3], B[3], c2, cout, S[3] ); L02-7

Our Verilog Subset Verilog is a big language with many features not concerned with synthesizing hardware. The code you write for your processor should only contain the languages structures discussed in these slides. Anything else is not synthesizable, although it will simulate fine. You MUST follow the course coding standard L02-8

A Verilog module has a name and a port list cout A B 4 4 adder 4 sum module adder( input [3:0] A, input [3:0] B, output cout, output [3:0] sum ); // HDL modeling of // adder functionality Ports must have a direction (or be bidirectional) and a bitwidth Note the semicolon at the end of the port list! L02-9

A module can instantiate other modules A B adder FA FA FA FA cout S module adder( input [3:0] A, B, output cout, output [3:0] S ); wire c0, c1, c2; FA fa0(... ); FA fa1(... ); FA fa2(... ); FA fa3(... ); module FA( input a, b, cin output cout, sum ); // HDL modeling of 1 bit // full adder functionality cout a FA c b cin L02-10

Connecting modules A B adder FA FA FA FA cout S module adder( input [3:0] A, B, output cout, output [3:0] S ); wire c0, c1, c2; FA fa0( A[0], B[0], 1 b0, c0, S[0] ); FA fa1( A[1], B[1], c0, c1, S[1] ); FA fa2( A[2], B[2], c1, c2, S[2] ); FA fa3( A[3], B[3], c2, cout, S[3] ); Carry Chain L02-11

Alternative syntax Connecting ports by ordered list FA fa0( A[0], B[0], 1 b0, c0, S[0] ); Connecting ports by name (compact) FA fa0(.a(a[0]),.b(b[0]),.cin(1 b0),.cout(c0),.sum(s[0]) ); Argument order does not matter when ports are connected by name FA fa0 (.a (A[0]),.cin (1 b0),.b (B[0]),.cout (c0),.sum (S[0]) ); Connecting ports by name yields clearer and less buggy code. L02-12

Verilog Fundamentals History of hardware design languages Data types Structural Verilog Simple behaviors FA FA FA FA module adder( input [3:0] A, B, output cout, output [3:0] S ); wire c0, c1, c2; FA fa0( A[0], B[0], 1 b0, c0, S[0] ); FA fa1( A[1], B[1], c0, c1, S[1] ); FA fa2( A[2], B[2], c1, c2, S[2] ); FA fa3( A[3], B[3], c2, cout, S[3] ); L02-13

A module s behavior can be described in many different ways but it should not matter from outside Example: mux4 L02-14

mux4: Using continuous assignments module mux4( input a, b, c, d input [1:0] sel, output out ); Language defined operators wire out, t0, t1; assign out = ~( (t0 sel[0]) & (t1 ~sel[0]) ); assign t1 = ~( (sel[1] & d) (~sel[1] & b) ); assign t0 = ~( (sel[1] & c) (~sel[1] & a) ); The order of these continuous assignment statements does not matter. They essentially happen in parallel! L02-15

mux4: Behavioral style // Four input multiplexer module mux4( input a, b, c, d input [1:0] sel, output out ); assign out = ( sel == 0 )? a : ( sel == 1 )? b : ( sel == 2 )? c : ( sel == 3 )? d : 1 bx; If input is undefined we want to propagate that information. L02-16

mux4: Using always block module mux4( input a, b, c, d input [1:0] sel, output out ); reg out, t0, t1; always @( * ) begin t0 = ~( (sel[1] & c) (~sel[1] & a) ); t1 = ~( (sel[1] & d) (~sel[1] & b) ); out = ~( (t0 sel[0]) & (t1 ~sel[0]) ); end The order of these procedural assignment statements DOES matter. They essentially happen sequentially! L02-17

Always blocks permit more advanced sequential idioms module mux4( input a,b,c,d input [1:0] sel, output out ); reg out; always @( * ) begin if ( sel == 2 d0 ) out = a; else if ( sel == 2 d1 ) out = b else if ( sel == 2 d2 ) out = c else if ( sel == 2 d3 ) out = d else out = 1 bx; end module mux4( input a,b,c,d input [1:0] sel, output out ); reg out; always @( * ) begin case ( sel ) 2 d0 : out = a; 2 d1 : out = b; 2 d2 : out = c; 2 d3 : out = d; default : out = 1 bx; endcase end Typically we will use always blocks only to describe sequential circuits L02-18

What happens if the case statement is not complete? module mux3( input a, b, c input [1:0] sel, output out ); reg out; always @( * ) begin case ( sel ) 2 d0 : out = a; 2 d1 : out = b; 2 d2 : out = c; endcase end If sel = 3, mux will output the previous value! What have we created? L02-19

What happens if the case statement is not complete? module mux3( input a, b, c input [1:0] sel, output out ); reg out; always @( * ) begin case ( sel ) 2 d0 : out = a; 2 d1 : out = b; 2 d2 : out = c; default : out = 1 bx; endcase end We CAN prevent creating state with a default statement L02-20

Parameterized mux4 module mux4 #( parameter WIDTH = 1 ) ( input[width-1:0] a, b, c, d input [1:0] sel, output[width-1:0] out ); default value wire [WIDTH-1:0] out, t0, t1; assign t0 = (sel[1]? c : a); assign t1 = (sel[1]? d : b); assign out = (sel[0]? t0: t1); Parameterization is a good practice for reusable modules Writing a muxn is challenging Instantiation Syntax mux4#(32) alu_mux (.a (op1),.b (op2),.c (op3),.d (op4),.sel (alu_mux_sel),.out (alu_mux_out) ); L02-21

Verilog Registers reg Wires are line names they do not represent storage and can be assigned only once Regs are imperative variables (as in C): nonblocking assignment r <= v can be assigned multiple times and holds values between assignments L02-22

flip-flops module FF0 (input clk, input d, output reg q); always @( posedge clk ) begin q <= d; end next_x clk D Q X module FF (input clk, input d, input en, output reg q); always @( posedge clk ) begin if ( en ) q <= d; end next_x clk D Q X enable L02-23

flip-flops with reset always @( posedge clk) begin if (~resetn) Q <= 0; else if ( enable ) Q <= D; end synchronous reset next_x clk D Q X enable resetn L02-24

Register module register#(parameter WIDTH = 1) ( input clk, input [WIDTH-1:0] d, input en, output [WIDTH-1:0] q ); always @( posedge clk ) begin if (en) q <= d; end L02-25

Register in terms of Flipflops module register2 ( input clk, input [1:0] d, input en, output [1:0] q ); always @(posedge clk) begin if (en) q <= d; end module register2 ( input clk, input [1:0] d, input en, output [1:0] q ); FF ff0 (.clk(clk),.d(d[0]),.en(en),.q(q[0])); FF ff1 (.clk(clk),.d(d[1]),.en(en),.q(q[1])); Do they behave the same? yes L02-26