0% found this document useful (0 votes)
49 views

L5 - Combinational Logic Design With Verilog

The document provides reading assignments for a course on combinational logic design with Verilog. It covers topics like structural and behavioral specification of logic circuits in Verilog, programmable logic devices, Verilog syntax, gates and operators, and designing adders both structurally and behaviorally in Verilog. It also discusses procedural statements, test benches, and provides examples of half adders and full adders designed in Verilog at both the gate level and register transfer level.

Uploaded by

Yogen Sharma
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views

L5 - Combinational Logic Design With Verilog

The document provides reading assignments for a course on combinational logic design with Verilog. It covers topics like structural and behavioral specification of logic circuits in Verilog, programmable logic devices, Verilog syntax, gates and operators, and designing adders both structurally and behaviorally in Verilog. It also discusses procedural statements, test benches, and provides examples of half adders and full adders designed in Verilog at both the gate level and register transfer level.

Uploaded by

Yogen Sharma
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

Combinational Logic Design with Verilog

ECE 152A Summer 2009

Reading Assignment
Brown and Vranesic
2 Introduction to Logic Circuits
2.10 Introduction to Verilog
2.10.1 Structural Specification of Logic Circuits 2.10.2 Behavioral Specification of Logic Circuits 2.10.3 How Not to Write Verilog Code

July 8, 2009

ECE 152A - Digital Design Principles

Reading Assignment
Brown and Vranesic (cont) 1st edition only!
4 Optimized Implementation of Logic Functions
4.12 CAD Tools
4.12.1 Logic Synthesis and Optimization 4.12.2 Physical Design 4.12.3 Timing Simulation 4.12.4 Summary of Design Flow 4.12.5 Examples of Circuits Synthesized from Verilog Code

July 8, 2009

ECE 152A - Digital Design Principles

Programmable Logic
Provides low cost and flexibility in a design
Replace multiple discrete gates with single device Logical design can be changed by reprogramming the device
No change in board design

Logical design can be changed even after the part has been soldered onto the circuit board in modern, In-system programmable device Inventory can focus on one part
Multiple uses of same device
July 8, 2009 ECE 152A - Digital Design Principles 4

Programmable Logic
Evolution of Programmable Logic
Both in time and complexity ROMs and RAMs
Not strictly programmable logic, but useful in implementing combinational logic and state machines

PALs
PALs Programmable Array Logic PLAs Programmable Logic Array GALs Generic Logic Array

July 8, 2009

ECE 152A - Digital Design Principles

Programmable Logic
PLDs
Programmable Logic Device
PLDs are (in general) advanced PALs

CPLDs
Complex Programmable Logic Device
Multiple PLDs on a single chip

FPGAs
Field Programmable Gate Array

July 8, 2009

ECE 152A - Digital Design Principles

Design Entry
In previous examples, design entry is schematic based
TTL implementation using standard, discrete integrated circuits PLD implementation using library of primitive elements

Code based design entry uses a hardware description language (HDL) for design entry
Code is synthesized and implemented on a PLD

July 8, 2009

ECE 152A - Digital Design Principles

Verilog Design
Structural Verilog
Looks like the gate level implementation
Specify gates and interconnection

Text form of schematic


Referred to as netlist

Allows for bottom up design


Begin with primitives, instantiate in larger blocks

July 8, 2009

ECE 152A - Digital Design Principles

Verilog Design
RTL (Register Transfer Level) Verilog
Allows for top down design No gate structure or interconnection specified Synthesizable code (by definition)
Emphasis on synthesis, not simulation
vs. high level behavioral code and test benches

No timing specified in code No initialization specified in code


Timing, stimulus, initialization, etc. generated in testbench (later)

July 8, 2009

ECE 152A - Digital Design Principles

Half Adder - Structural Verilog Design


Recall Half Adder description from schematic based design example
Operation Truth table Circuit Graphical symbol

July 8, 2009

ECE 152A - Digital Design Principles

10

Verilog Syntax
Modules are the basic unit of Verilog models
Functional Description
Unambiguously describes modules operation
Functional, i.e., without timing information

Input, Output and Bidirectional ports for interfaces May include instantiations of other modules
Allows building of hierarchy

July 8, 2009

ECE 152A - Digital Design Principles

11

Verilog Syntax
Module declaration
module ADD_HALF (s,c,x,y);
Parameter list is I/O Ports

Port declaration
Can be input, output or inout (bidirectional)
output s,c; input x,y;

July 8, 2009

ECE 152A - Digital Design Principles

12

Verilog Syntax
Declare nodes as wires or reg
Wires assigned to declaratively Reg assigned to procedurally
More on this later

In a combinational circuit, all nodes can, but dont have to be, declared wires
Depends on how code is written

Node defaults to wire if not declared otherwise wire s,c,x,y;

July 8, 2009

ECE 152A - Digital Design Principles

13

Verilog Syntax
Gates and interconnection
xor G1(s,x,y); and G2(c,x,y);
Verilog gate level primitive
Gate name

Internal (local) name


Instance name

Parameter list
Output port, input port, input port

July 8, 2009

ECE 152A - Digital Design Principles

14

Gate Instantiation
Verilog Gates
Note: notif and bufif are tri-state gates

July 8, 2009

ECE 152A - Digital Design Principles

15

Verilog Syntax
Close the module definition with
endmodule

Comments begin with //

July 8, 2009

ECE 152A - Digital Design Principles

16

Half Adder - Structural Verilog Design


module ADD_HALF (s,c,x,y); output s,c; input x,y; wire s,c,x,y; // this line is optional since nodes default to wires xor G1 (s,x,y); // instantiation of XOR gate and G2 (c,x,y); // instantiation of AND gate endmodule
July 8, 2009 ECE 152A - Digital Design Principles 17

Half Adder PLD Implementation


Functional Simulation
Input 0+0 0+1 1+0 1+1

Output

00

01

01

10

July 8, 2009

ECE 152A - Digital Design Principles

18

Full Adder Structural Verilog Design


Recall Full Adder description from schematic based design example
Truth table Karnaugh maps Circuit

July 8, 2009

ECE 152A - Digital Design Principles

19

Full Adder from 2 Half Adders

July 8, 2009

ECE 152A - Digital Design Principles

20

10

Full Adder Structural Verilog Design


module ADD_FULL (s,cout,x,y,cin); output s,cout; input x,y,cin; //internal nodes also declared as wires wire cin,x,y,s,cout,s1,c1,c2; ADD_HALF HA1(s1,c1,x,y); ADD_HALF HA2(s,c2,cin,s1); or (cout,c1,c2); endmodule
July 8, 2009 ECE 152A - Digital Design Principles 21

Full Adder PLD Implementation


Functional Simulation
0+0+1 Input 0+0+0 0+1+0 0+1+1 1+0+0 1+0+1 1+1+1 1+1+0

Output

00

01

01

10

01

10

10

11

July 8, 2009

ECE 152A - Digital Design Principles

22

11

Verilog Operators
The Verilog language includes a large number of logical and arithmetic operators
Bit length column indicates width of result

July 8, 2009

ECE 152A - Digital Design Principles

23

Behavioral Specification of Logic Circuits


Continuous Assignment Operator
assign sum = a ^ b;
Assign to a wire (generated declaratively) Equivalent to
xor (sum,a,b);

Continuous and concurrent with other wire assignment operations


If a or b changes, sum changes accordingly All wire assignment operations occur concurrently
Order not specified (or possible)

July 8, 2009

ECE 152A - Digital Design Principles

24

12

Full Adder from Logical Operations


module ADD_FULL_RTL (sum,cout,x,y,cin); output sum,cout; input x,y,cin; //declaration for continuous assignment wire cin,x,y,sum,cout; //logical assignment assign sum = x ^ y ^ cin; assign cout = x & y | x & cin | y & cin; endmodule

July 8, 2009

ECE 152A - Digital Design Principles

25

Full Adder from Arithmetic Operations


module ADD_FULL_RTL (sum,cout,x,y,cin); output sum,cout; input x,y,cin; //declaration for continuous assignment wire cin,x,y,sum,cout; // concatenation operator and addition assign {cout, sum} = x + y + cin; endmodule

July 8, 2009

ECE 152A - Digital Design Principles

26

13

Procedural Verilog Statements


Recall:
Wires assigned to declaratively
Continuous / concurrent assignment

Reg variables assigned to procedurally


Value is registered until next procedural assignment
Continuous assignment (wires) occurs immediately on input change

Enables clocked (synchronous) timing

July 8, 2009

ECE 152A - Digital Design Principles

27

Procedural Verilog Statements


The always block
Syntax is always at the occurrence (@) of any event on the sensitivity list, execute the statements inside the block (in order) always @ (x or y or cin) {cout, sum} = x + y + cin;

July 8, 2009

ECE 152A - Digital Design Principles

28

14

RTL Design of Full Adder


module ADD_FULL_RTL (sum,cout,x,y,cin); output sum,cout; input x,y,cin; //declaration for behavioral model wire cin,x,y; reg sum,cout; // behavioral specification always @ (x or y or cin) {cout, sum} = x + y + cin; endmodule

July 8, 2009

ECE 152A - Digital Design Principles

29

Two-bit, Ripple Carry Adder Structural Verilog


module TWO_BIT_ADD (S,X,Y,cin,cout); input cin; input [1:0]X,Y; // vectored input output [1:0]S; // and output signals output cout; wire cinternal; ADD_FULL AF0(S[0],cinternal,X[0],Y[0],cin); ADD_FULL AF1(S[1],cout,X[1],Y[1],cinternal); endmodule

July 8, 2009

ECE 152A - Digital Design Principles

30

15

Two-bit, Ripple Carry Adder PLD Implementation


Functional Simulation
Base-4 Bus Representation of X, Y and Sum

0+1+3 = 4 = 104 0+3+0 = 3 = 034


July 8, 2009

1+2+2 = 5 = 114 1+3+3 = 7 = 134


31

ECE 152A - Digital Design Principles

Verilog Test Bench


Device Under Test (DUT)
Circuit being designed/developed
Full adder for this example

Testbench
Provides stimulus to DUT
Like test equipment on a bench

Instantiate DUT in testbench


Generate all signals in testbench No I/O (parameter list) in testbench

July 8, 2009

ECE 152A - Digital Design Principles

32

16

Full Adder Testbench Example


module ADDFULL_TB; reg a,b,ci; wire sum,co; initial begin a = 0; b = 0; ci = 0; end always begin #5 a = ~a; end always begin #10 b = ~b; end always begin #20 ci = ~ci; end ADD_FULL AF1(sum,co,a,b,ci); endmodule

July 8, 2009

ECE 152A - Digital Design Principles

33

17

You might also like