L3: Introduction to Verilog (Combinational Logic)

Similar documents
L3: Introduction to Verilog (Combinational Logic)

Intro to Verilog. The Need for HDLs. Bypass (Decoupling) Capacitors. Wires Theory vs Reality - Lab 1

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

Design Using Verilog

Verilog Design Principles

Online Verilog Resources

Digital Design with FPGAs. By Neeraj Kulkarni

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

Verilog Fundamentals. Shubham Singh. Junior Undergrad. Electrical Engineering

CSE140L: Components and Design Techniques for Digital Systems Lab

Synthesizable Verilog

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

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

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

Programmable Logic Devices Verilog VII CMPE 415

CSE140L: Components and Design

ECEN 468 Advanced Logic Design

Lecture 32: SystemVerilog

Chapter 2 Using Hardware Description Language Verilog. Overview

Synthesis of Combinational and Sequential Circuits with Verilog

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

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

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

Contents. Appendix D Verilog Summary Page 1 of 16

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

EN2911X: Reconfigurable Computing Topic 02: Hardware Definition Languages

EEL 4783: HDL in Digital System Design

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

Lecture #2: Verilog HDL

Combinational Logic II

Verilog Design Principles

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

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

EECS150 - Digital Design Lecture 10 Logic Synthesis

EN2911X: Reconfigurable Computing Lecture 05: Verilog (2)

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

Hardware Description Languages: Verilog

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

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

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

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

Chap 6 Introduction to HDL (d)

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

EECS150 - Digital Design Lecture 10 Logic Synthesis

A Brief Introduction to Verilog Hardware Definition Language (HDL)

Verilog Module 1 Introduction and Combinational Logic

Verilog HDL Introduction

Digital Design (VIMIAA01) Introduction to the Verilog HDL

Register Transfer Level in Verilog: Part I

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

Lecture 3: Modeling in VHDL. EE 3610 Digital Systems

Verilog Dataflow Modeling

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

Introduction to Digital Design with Verilog HDL

Sequential Logic. Reminder: Lab #2 due Thursday Fall 2017 Lecture 4

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

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

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

Hardware description languages

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

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

HDLs and SystemVerilog. Digital Computer Design

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

Introduction to Verilog/System Verilog

C-Based Hardware Design

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

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

Chapter 3: Dataflow Modeling

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

Chap 6 - Introduction to HDL (b)

ECE Digital System Design & Synthesis Exercise 1 - Logic Values, Data Types & Operators - With Answers

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

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

Digital Design with SystemVerilog

EECS150 - Digital Design Lecture 5 - Verilog Logic Synthesis

Hardware Description Language VHDL (1) Introduction

Brief Introduction to Verilog HDL (Part 1)

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

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

Introduction to Verilog HDL. Verilog 1

ENGIN 241 Digital Systems with Lab

Lecture 12 VHDL Synthesis

ECE 545 Lecture 5. Data Flow Modeling in VHDL. George Mason University

Verilog for High Performance

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

Topics. Midterm Finish Chapter 7

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

Verilog Hardware Description Language ROOM: B405

Verilog introduction. Embedded and Ambient Systems Lab

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

VERILOG 2: LANGUAGE BASICS

Course Topics - Outline

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

IT T35 Digital system desigm y - ii /s - iii

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

ENGN1640: Design of Computing Systems Topic 02: Lab Foundations

VERILOG. Deepjyoti Borah, Diwahar Jawahar

Transcription:

L3: Introduction to Verilog (Combinational Logic) Courtesy of Rex in. Used with permission. Verilog References: Samir Palnitkar, Verilog HDL, Pearson Education (2nd edition). Donald Thomas, Philip oorby, The Verilog Hardware Description Language, Fifth Edition, Kluwer Academic Publishers. J. Bhasker, Verilog HDL Synthesis (A Practical Primer), Star Galaxy Publishing L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 1

Synthesis and HDLs Hardware description language (HDL) is a convenient, deviceindependent representation of digital logic Verilog input a,b; output sum; assign sum <= {1b 0, a} + {1b 0, b}; Compilation and Synthesis Netlist g1 "and" n1 n2 n5 g2 "and" n3 n4 n6 g3 "or" n5 n6 n7 apping HDL description is compiled into a netlist Synthesis optimizes the logic apping targets a specific hardware platform FPGA PAL ASIC (Custom ICs) L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 2

The FPGA: A Conceptual View An FPGA is like an electronic breadboard that is wired together by an automated synthesis tool Built-in components are called macros 32 32 + 32 SU DQ sel interconnect counter a b c d LUT F(a,b,c,d) G(a,b,c,d) ADR R/W RA DATA (for everything else) L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 3

Synthesis and apping for FPGAs Infer macros: choose the FPGA macros that efficiently implement various parts of the HDL code... always @ (posedge clk) begin count <= count + 1; end... HDL Code This section of code looks like a counter. y FPGA has some of those... counter Inferred acro Place-and-route: with area and/or speed in mind, choose the needed macros by location and route the interconnect This design only uses 10% of the FPGA. Let s use the macros in one corner to minimize the distance between blocks. L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 4

Verilog: : The odule Verilog designs consist of interconnected modules. A module can be an element or collection of lower level design blocks. A simple module with combinational logic might look like this: module mux_2_to_1(a, b, out, outbar, sel); // This is 2:1 multiplexor input a, b, sel; output out, outbar; assign out = sel? a : b; assign outbar = ~out; a b 1 0 sel out outbar Out = sel a + sel b 2-to-1 multiplexer with inverted output Declare and name a module; list its ports. Don t forget that semicolon. Comment starts with // Verilog skips from // to end of the line Specify each port as input, output, or inout Express the module s behavior. Each statement executes in parallel; order does not matter. Conclude the module code. L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 5

Continuous (Dataflow) Assignment module mux_2_to_1(a, b, out, outbar, sel); a 1 input a, b, sel; out output out, outbar; b 0 outbar assign out = sel? a : b; assign outbar = ~out; sel Continuous assignments use the assign keyword A simple and natural way to represent combinational logic Conceptually, the right-hand expression is continuously evaluated as a function of arbitrarily-changing inputs just like dataflow The target of a continuous assignment is a net driven by combinational logic Left side of the assignment must be a scalar or vector net or a concatenation of scalar and vector nets. It can t be a scalar or vector register (discussed later). Right side can be register or nets Dataflow operators are fairly low-level: Conditional assignment: (conditional_expression)? (value-if-true) : (value-if-false); Boolean logic: ~, &, Arithmetic: +, -, * Nested conditional operator (4:1 mux) assign out = s1? (s0? i3 : i2) : (s0? i1 : i0); L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 6

AX+plusII: : Simulator, Synthesis, apping ust be synthesizable Verilog files Step by step instructions on the course WEB site Create *.v file (module name same as file name) Select area and set inputs through overwrite or insert menu (under edit) Glitch L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 7

Gate Level Description module muxgate (a, b, out, outbar, sel); input a, b, sel; output out, outbar; wire out1, out2, selb; and a1 (out1, a, sel); not i1 (selb, sel); and a2 (out2, b, selb); or o1 (out, out1, out2); assign outbar = ~out; sel selb a b out1 out2 out outbar Verilog supports basic logic gates as primitives and, nand, or, nor, xor, xnor, not, buf can be extended to multiple inputs: e.g., nand nand3in (out, in1, in2,in3); bufif1 and bufif0 are tri-state buffers Net represents connections between hardware elements. Nets are declared with the keyword wire. L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 8

Procedural Assignment with always Procedural assignment allows an alternative, often higher-level, behavioral description of combinational logic Two structured procedure statements: initial and always Supports richer, C-like control structures such as if, for, while,case module mux_2_to_1(a, b, out, outbar, sel); input a, b, sel; output out, outbar; reg out, outbar; always @ (a or b or sel) begin if (sel) out = a; else out = b; outbar = ~out; end Exactly the same as before. Anything assigned in an always block must also be declared as type reg (next slide) Conceptually, the always block runs once whenever a signal in the sensitivity list changes value Statements within the always block are executed sequentially. Order matters! Surround multiple statements in a single always block with begin/end. L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 9

Verilog Registers In digital design, registers represent memory elements (we will study these in the next few lectures) Digital registers need a clock to operate and update their state on certain phase or edge Registers in Verilog should not be confused with hardware registers In Verilog, the term register (reg) simply means a variable that can hold a value Verilog registers don t need a clock and don t need to be driven like a net. Values of registers can be changed anytime in a simulation by assuming a new value to the register L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 10

ix-and and-atch Assignments Procedural and continuous assignments can (and often do) co-exist within a module Procedural assignments update the value of reg. The value will remain unchanged till another procedural assignment updates the variable. This is the main difference with continuous assignments in which the right hand expression is constantly placed on the left-side module mux_2_to_1(a, b, out, outbar, sel); input a, b, sel; output out, outbar; reg out; always @ (a or b or sel) begin if (sel) out = a; else out = b; end assign outbar = ~out; a b procedural description continuous description 1 0 sel out outbar L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 11

The case Statement case and if may be used interchangeably to implement conditional execution within always blocks case is easier to read than a long string of if...else statements module mux_2_to_1(a, b, out, outbar, sel); input a, b, sel; output out, outbar; reg out; module mux_2_to_1(a, b, out, outbar, sel); input a, b, sel; output out, outbar; reg out; always @ (a or b or sel) always @ (a or b or sel) begin begin if (sel) out = a; case (sel) else out = b; 1 b1: out = a; end 1 b0: out = b; endcase assign outbar = ~out; end assign outbar = ~out; Note: Number specification notation: <size> <base><number> (4 b1010 if a 4-bit binary value, 16 h6cda is a 16 bit hex number, and 8 d40 is an 8-bit decimal value) L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 12

The Power of Verilog: n-bit Signals ulti-bit signals and buses are easy in Verilog. 2-to-1 multiplexer with 8-bit operands: module mux_2_to_1(a, b, out, outbar, sel); input[7:0] a, b; 8 input sel; output[7:0] out, outbar; a 1 8 reg[7:0] out; out always @ (a or b or sel) b 0 outbar begin 8 8 if (sel) out = a; else out = b; sel end assign outbar = ~out; Concatenate signals using the { } operator assign {b[7:0],b[15:8]} = {a[15:8],a[7:0]}; effects a byte swap L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 13

The Power of Verilog: : Integer Arithmetic Verilog s built-in arithmetic makes a 32-bit adder easy: module add32(a, b, sum); input[31:0] a,b; output[31:0] sum; assign sum = a + b; A 32-bit adder with carry-in and carry-out: module add32_carry(a, b, cin, sum, cout); input[31:0] a,b; input cin; output[31:0] sum; output cout; assign {cout, sum} = a + b + cin; L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 14

Dangers of Verilog: : Incomplete Specification a b c Goal: 00 01 10 sel out 3-to-1 UX ( 11 input is a don t-care) 2 Proposed Verilog Code: module maybe_mux_3to1(a, b, c, sel, out); input [1:0] sel; input a,b,c; output out; reg out; always @(a or b or c or sel) begin case (sel) 2'b00: out = a; 2'b01: out = b; 2'b10: out = c; endcase end Is this a 3-to-1 multiplexer? L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 15

Incomplete Specification Infers Latches module maybe_mux_3to1(a, b, c, sel, out); input [1:0] sel; input a,b,c; output out; reg out; always @(a or b or c or sel) begin case (sel) 2'b00: out = a; 2'b01: out = b; 2'b10: out = c; endcase end a b c Synthesized Result: 00 01 10 sel 2 sel[1] sel[0] D G Q out if out is not assigned during any pass through the always block, then the previous value must be retained! Latch memory latches old data when G=0 (we will discuss latches later) In practice, we almost never intend this L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 16

Avoiding Incomplete Specification Precede all conditionals with a default assignment for all signals assigned within them always @(a or b or c or sel) begin out = 1 bx; case (sel) 2'b00: out = a; 2'b01: out = b; 2'b10: out = c; endcase end always @(a or b or c or sel) begin case (sel) 2'b00: out = a; 2'b01: out = b; 2'b10: out = c; default: out = 1 bx; endcase end or, fully specify all branches of conditionals and assign all signals from all branches For each if, include else For each case, include default L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 17

Dangers of Verilog: : Priority Logic Goal: Proposed Verilog Code: 4-to-2 Binary Encoder 0 1 0 0 I 3 I 2 I 1 I 0 I 3 I 2 I 1 I 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 all others E 1 E 0 1 0 E 1 E 0 0 0 0 1 1 0 1 1 X X module binary_encoder(i, e); input [3:0] i; output [1:0] e; reg e; always @(i) begin if (i[0]) e = 2 b00; else if (i[1]) e = 2 b01; else if (i[2]) e = 2 b10; else if (i[3]) e = 2 b11; else e = 2 bxx; end What is the resulting circuit? L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 18

Priority Logic Intent: if more than one input is 1, the result is a don t-care. I 3 I 2 I 1 I 0 E 1 E 0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 1 1 all others X X Code: if i[0] is 1, the result is 00 regardless of the other inputs. i[0] takes the highest priority. if (i[0]) e = 2 b00; else if (i[1]) e = 2 b01; else if (i[2]) e = 2 b10; else if (i[3]) e = 2 b11; else e = 2 bxx; end Inferred Result: 2 b11 2 bxx 1 0 2 b10 1 0 2 b01 1 0 2 b00 1 0 e[1:0] i[3] i[2] i[1] i[0] if-else and case statements are interpreted very literally! Beware of unintended priority logic. L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 19

Avoiding (Unintended) Priority Logic ake sure that if-else and case statements are parallel If mutually exclusive conditions are chosen for each branch......then synthesis tool can generate a simpler circuit that evaluates the branches in parallel Parallel Code: inimized Result: module binary_encoder(i, e); input [3:0] i; output [1:0] e; reg e; always @(i) begin if (i == 4 b0001) e = 2 b00; else if (i == 4 b0010) e = 2 b01; else if (i == 4 b0100) e = 2 b10; else if (i == 4 b1000) e = 2 b11; else e = 2 bxx; end I 3 I 1 I 0 E 0 E 1 L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 20

Interconnecting odules odularity is essential to the success of large designs A Verilog module may contain submodules that are wired together High-level primitives enable direct synthesis of behavioral descriptions (functions such as additions, subtractions, shifts (<< and >>), etc. Example: A 32-bit ALU Function Table A[31:0] B[31:0] F2 F1 F0 Function 32 d1 32 d1 0 1 0 1 + - * F[0] F[2:0] 0 0 0 0 0 1 0 1 0 0 1 1 1 0 X A + B A + 1 A - B A - 1 A * B 00 01 10 F[2:1] R[31:0] L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 21

odule Definitions 2-to-1 UX module mux32two(i0,i1,sel,out); input [31:0] i0,i1; input sel; output [31:0] out; assign out = sel? i1 : i0; 3-to-1 UX module mux32three(i0,i1,i2,sel,out); input [31:0] i0,i1,i2; input [1:0] sel; output [31:0] out; reg [31:0] out; always @ (i0 or i1 or i2 or sel) begin case (sel) 2 b00: out = i0; 2 b01: out = i1; 2 b10: out = i2; default: out = 32 bx; endcase end 32-bit Adder 32-bit Subtracter 16-bit ultiplier module mul16(i0,i1,prod); module add32(i0,i1,sum); module sub32(i0,i1,diff); input [15:0] i0,i1; input [31:0] i0,i1; input [31:0] i0,i1; output [31:0] sum; output [31:0] diff; output [31:0] prod; assign sum = i0 + i1; assign diff = i0 - i1; // this is a magnitude multiplier // signed arithmetic later assign prod = i0 * i1; L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 22

Top-Level ALU Declaration Given submodules: module mux32two(i0,i1,sel,out); module mux32three(i0,i1,i2,sel,out); module add32(i0,i1,sum); module sub32(i0,i1,diff); module mul16(i0,i1,prod); Declaration of the ALU odule: module alu(a, b, f, r); input [31:0] a, b; input [2:0] f; output [31:0] r; wire [31:0] addmux_out, submux_out; wire [31:0] add_out, sub_out, mul_out; A[31:0] 32 d1 32 d1 0 1 0 1 B[31:0] + - * 00 01 10 R[31:0] mux32two adder_mux(b, 32'd1, f[0], addmux_out); mux32two sub_mux(b, 32'd1, f[0], submux_out); add32 our_adder(a, addmux_out, add_out); sub32 our_subtracter(a, submux_out, sub_out); mul16 our_multiplier(a[15:0], b[15:0], mul_out); mux32three output_mux(add_out, sub_out, mul_out, f[2:1], r); alu F[0] F[2:1] intermediate output nodes F[2:0] module names (unique) instance names corresponding wires/regs in module alu L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 23

Simulation addition subtraction multiplier L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 24

ore on odule Interconnection Explicit port naming allows port mappings in arbitrary order: better scaling for large, evolving designs Given Submodule Declaration: module mux32three(i0,i1,i2,sel,out); odule Instantiation with Ordered Ports: mux32three output_mux(add_out, sub_out, mul_out, f[2:1], r); odule Instantiation with Named Ports: mux32three output_mux(.sel(f[2:1]),.out(r),.i0(add_out),.i1(sub_out),.i2(mul_out)); submodule s port name corresponding wire/reg in outer module Built-in Verilog gate primitives may be instantiated as well Instantiations may omit instance name and must be ordered: buf(out1,out2,...,outn, in); and(in1,in2,...inn,out); L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 25

Useful Boolean Operators Bitwise operators perform bit-sliced operations on vectors ~(4 b0101) = {~0,~1,~0,~1} = 4 b1010 4 b0101 & 4 b0011 = 4 b0001 Logical operators return one-bit (true/false) results!(4 b0101) = ~1 = 1 b0 Reduction operators act on each bit of a single input vector &(4 b0101) = 0 & 1 & 0 & 1 = 1 b0 Comparison operators perform a Boolean test on two arguments Bitwise Logical Reduction Comparison ~a NOT a & b a b a ^ b AND OR XOR a ~^ b XNOR!a NOT a && b a b AND OR Note distinction between ~a and!a &a ~& AND NAND OR ~ NOR ^ XOR a < b a > b a <= b a >= b a == b a!= b a === b a!== b Relational [in]equality returns x when x or z in bits. Else returns 0 or 1 case [in]equality returns 0 or 1 based on bit by bit comparison L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 26

Testbenches (odelsim) Demo this week in Lab by TAs Full Adder (1-bit) Full Adder (4-bit) Testbench module full_adder (a, b, cin, sum, cout); input a, b, cin; output sum, cout; reg sum, cout; always @(a or b or cin) begin sum = a ^ b ^ cin; cout = (a & b) (a & cin) (b & cin); end Endmodule odelsim Simulation module full_adder_4bit (a, b, cin, sum, cout); input[3:0] a, b; input cin; output [3:0] sum; output cout; wire c1, c2, c3; // instantiate 1-bit adders full_adder FA0(a[0],b[0], cin, sum[0], c1); full_adder FA1(a[1],b[1], c1, sum[1], c2); full_adder FA2(a[2],b[2], c2, sum[2], c3); full_adder FA3(a[3],b[3], c3, sum[3], cout); Courtesy of Francis A. Honore. Used with permission. module test_adder; reg [3:0] a, b; reg cin; wire [3:0] sum; wire cout; full_adder_4bit dut(a, b, cin, sum, cout); initial begin a = 4'b0000; b = 4'b0000; cin = 1'b0; #50; a = 4'b0101; b = 4'b1010; // sum = 1111, cout = 0 #50; a = 4'b1111; b = 4'b0001; // sum = 0000, cout = 1 #50; a = 4'b0000; b = 4'b1111; cin = 1'b1; // sum = 0000, cout = 1 #50; a = 4'b0110; b = 4'b0001; // sum = 1000, cout = 0 end // initial begin // test_adder L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 27

Summary ultiple levels of description: behavior, dataflow, logic and switch (not used in 6.111) Gate level is typically not used as it requires working out the interconnects Continuous assignment using assign allows specifying dataflow structures Procedural Assignment using always allows efficient behavioral description. ust carefully specify the sensitivity list Incomplete specification of case or if statements can result in non-combinational logic Verilog registers (reg) is not to be confused with a hardware memory element odular design approach to manage complexity L3: 6.111 Spring 2004 Introductory Digital Systems Laboratory 28