+ All Categories
Home > Documents > ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8...

ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8...

Date post: 02-Apr-2021
Category:
Upload: others
View: 5 times
Download: 2 times
Share this document with a friend
28
ENGR 303 – Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College
Transcript
Page 1: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

ENGR 303 – Introduction to Logic Design Lecture 8

Dr. Chuck BrownEngineering and Computer Information Science

Folsom Lake College

Page 2: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<2>

• Hardware Descriptive Language (HDL)– Verilog & VHDL

• Simulation/Synthesis• Logic, Numbers, Types, Operators• Module Structure• Bitwise/Reduction Operators• Conditional Assignment• Internal Variables• Precedence• Numbers• Bit manipulation

Outline for Todays Lecture

ENGR 303

Page 3: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<3>

• Hardware description language (HDL): – specifies logic function only– Computer-aided design (CAD) tool produces or

synthesizes the optimized gates

• Most commercial designs built using HDLs• Two leading HDLs:

– Verilog & SystemVerilog• developed in 1984 by Gateway Design Automation• Verilog IEEE standard (1364) in 1995• SystemVerilog extended in 2005 (IEEE STD 1800-2009)

– VHDL 2008• Developed in 1981 by the Department of Defense• IEEE standard (1076) in 1987• Updated in 2008 (IEEE STD 1076-2008)

HDL Introduction

ENGR 303

Page 4: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<4>

System Verilog – Logic & Numbers

ENGR 303

• Logic Values• 0 – logic zero, or false condition • 1 – logic 1, or true condition • x, X – unknown logic value • z, Z - high-impedance state

• Number formats • b, B binary • d, D decimal (default) • h, H hexadecimal • o, O octal

• 16’H789A – 16-bit number in hex format • 1’b0 – 1-bit logic zero

Page 5: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<5>

System Verilog – Types

ENGR 303

• Constants• parameter DIME = 10; • parameter width = 32, nickel = 5;• parameter quarter = 8’b0001_1001;

• Nets (internal connections)• wire clock, reset_n; • wire[7:0] a_bus;

• Registers• reg clock, reset_n; • reg[7:0] a_bus;

• Integer – for use as general purpose variables in loops• integer n;

Page 6: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<6>

System Verilog – Operators

ENGR 303

• Bitwise• ~ negation y = ~a;• & and y = a & b; • | inclusive or y = a | b; • ^ exclusive or y = a ^ b;

• Reduction - accept single bus and return single bit result• & and y = & a_bus; //true if all 1s• ~& nand y = ~&a_bus; //true if all 0s• | or y = | a_bus; //true if any 1s• ^ exclusive OR y = ^ a_bus; //true if odd #1s

Page 7: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<7>

System Verilog – Operators cont’d

ENGR 303

• Relational (return 1 for true, 0 for false) • < less than <= less than equal• > greater than >= greater than equal

• Equality• == logical equality • != logical inequality

• Logical Comparison Operators• ! logical negation • && logical and • || logical or

Page 8: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<8>

System Verilog – Operators cont’d

ENGR 303

• Arithmetic Operators• + addition• - subtraction• * multiplication

• Shift• << logical shift left (<<< arithmetic) • >> logical shift right (>>> arithmetic)

• Conditional – selects one of pair of expressions • ? : Logical expression before ? is evaluated • If true, expression before : is assigned to output • If false, expression after : is assigned to output• Y = (A > B) ? 1 : 0 • Y = (A == B) ? A + B : A – B

Page 9: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<9>

ab yc

Verilog

Module

Two types of Modules:

– Behavioral: describes what a module does

– Structural: describes how a module can be built

from simpler modules (Hierarchical structure)

SystemVerilog Modules

ENGR 303

Page 10: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<10>

module example(input a, b, c,

output y);

assign y = ~a & ~b & ~c | a & ~b & ~c | a & ~b & c;

endmodule

Verilog module structure:

Behavioral – Combinatorial Example

• module/endmodule - required to begin/end of module• example - name of the module (must being with a letter)• assign - defines an operation• ; semicolon signifies the end of a statement

• Recall Logical Operators:~: NOT&: AND ~&: NAND|: OR ~|: NOR^: XOR ~^: XNOR

ENGR 303

Page 11: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<11>

module example(input a, b, c,

output y);

assign y = ~a & ~b & ~c | a & ~b & ~c | a & ~b & c;

endmodule

Verilog: input/outputs are 2-state; 0 & 1

Behavioral – Combinatorial Example

ENGR 303

module example(input logic a, b, c,

output logic y);

assign y = ~a & ~b & ~c | a & ~b & ~c | a & ~b & c;

endmodule

SystemVerilog: adds logic data type; 0, 1, X, Z

• logic – reserved for SystemVerilog to specify extended data type

Page 12: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<12>

• Case sensitive– Example: reset and Reset are not the same signal.

• Module names can’t start with numbers – 2mux is an invalid module name

• Whitespace ignored

• Comments:– // single line comment

– /* multiline

comment */

Verilog Syntax

ENGR 303

Page 13: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<13>

• Simulation

– Inputs applied to circuit

– Outputs checked for correctness

– Time savings by debugging in simulation instead of

hardware

• Synthesis

– Transforms HDL code into a netlist describing the

hardware (i.e., a list of gates and the wires connecting

them)

IMPORTANT:

When using an HDL, think of the hardware the HDL

should produce

HDL to Gates

ENGR 303

Page 14: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<14>

HDL Simulation

module example(input a, b, c,

output y);

assign y = ~a & ~b & ~c | a & ~b & ~c | a & ~b & c;

endmodule

Verilog:

ENGR 303

Page 15: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<15>

un5_y

un8_y

y

yc

b

a

HDL Synthesis

module example(input a, b, c,

output y);

assign y = ~a & ~b & ~c | a & ~b & ~c | a & ~b & c;

endmodule

Verilog:

Synthesis:

ENGR 303

Page 16: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<16>

module gates(input [3:0] a, b,

output [3:0] y1, y2, y3, y4, y5);

/* Five different two-input logic

gates acting on 4 bit busses */

assign y1 = a & b; // AND

assign y2 = a | b; // OR

assign y3 = a ^ b; // XOR

assign y4 = ~(a & b); // NAND

assign y5 = ~(a | b); // NOR

endmodule

Buses & Bitwise OperatorsExample - 4-bite wide I/O buses

ENGR 303

Page 17: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<17>

module and8(input [7:0] a,

output y);

assign y = &a;

// &a is much easier to write than

// assign y = a[7] & a[6] & a[5] & a[4] &

// a[3] & a[2] & a[1] & a[0];

endmodule

Reduction OperatorsA means to operate on the entire bus

ENGR 303

Page 18: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<18>

module mux2(input [3:0] d0, d1,

input s,

output [3:0] y);

assign y = s ? d1 : d0;

endmodule

// y equals d1 if S is true or 1, else y = d0

// if S is false or 0

? : is also called a ternary operator because it

operates on 3 inputs: s, d1, and d0.

Conditional AssignmentExample - 4-bit 2 to 1 Mux

ENGR 303

Page 19: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<19>

module fulladder(input a, b, cin,

output s, cout);

wire p, g; // internal nodes

assign p = a ^ b;

assign g = a & b;

assign s = p ^ cin;

assign cout = g | (p & cin);

endmodule

p

g s

un1_cout cout

cout

s

cin

b

a

Net - Internal VariablesVerilog data object wire

ENGR 303

Page 20: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<20>

module fulladder(input a, b, cin,

output s, cout);

wire p, g, un1_cout;

xor (p,a,b); // logical xor operator

and (g,a,b); // logical and operator

and (un1_cout,cin,p);

xor (s,p,cin);

or (cout,g,un1_cout); // logical or operator

endmodule

p

g s

un1_cout cout

cout

s

cin

b

a

Logical Operators

ENGR 303

Page 21: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<21>

Structural Module Instantiation

ENGR 303

• Modules can be instantiated (called) from within other modules

• When a module is instantiated, connections to the ports of the module must be specified

• Two Methods of Connection– Ordered instantiation

• The order of the ports must match the order appearing in the instantiated module

• Unused ports may be left unconnected

– Named instantiation• Variables connected to each of module inputs or

outputs are specified in a set of parenthesis following the name of the ports.

• Order of connections is not significant.• You may not leave any port unconnected

Page 22: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<22>

Ordered Module Instantiation

ENGR 303

module dff (clk, d, q); //a D Flip-flop

input clk, d;

output q;

reg q;

always @(posedge clk) q = d;

endmodule

module top;

reg data, clock;

wire q_out, net_1;

dff inst_1 (clock, data, net_1); //instance 1

dff inst_2 (clock, net_1, q_out); //instance 2

endmodule

The order of the ports must match the

order appearing in the instantiated module

Instance name

Page 23: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<23>

Named Module Instantiation

ENGR 303

module dff (clk, d, q);

input clk, d;

output q;

reg q;

always @(posedge clk) q = d;

endmodule

module top;

reg data, clock;

wire q_out, net_1;

dff inst_1 (.d(data), .q(net_1), .clk(clock));

dff inst_2 (.clk(clock), .d(net_1), .q(q_out));

endmodule

Connections are made by the name of port,

order doesn’t matter

Page 24: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<24>

module and3(input a, b, c,

output y);

assign y = a & b & c;

endmodule

module inv(input a,

output y);

assign y = ~a;

endmodule

module nand3(input a, b, c

output y);

wire n1; // internal signal n1

and3 andgate(a, b, c, n1); // instance of and3

inv inverter(n1, y); // instance of inv

endmodule

Multiple InstancesExample – multiple ordered instantiations

ENGR 303

Page 25: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<25>

Array of InstancesRange of instance names follows the module name

ENGR 303

module my_module (a, b, c);

input a, b;

output c;

assign c = a & b ;

endmodule

module top (a, b, c) ;

input [3:0] a, b;

output [3:0] c;

my_module inst [3:0] (a, b, c);

endmodule

Page 26: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<26>

primitive UDP (input a,b,

output f);

//Truth table for f=SOP(0,2,3)

table

// a b : f //column header comment

0 0 : 1

0 1 : 0

1 0 : 1

1 1 : 1

endtable

endprimitive

module Circuit_with_TruthTable(input [3:0] a, b,

output [3:0] y1);

UDP (a,b,y1)

endmodule

Hierarchy - User Defined Primitive Example - Truth Table

ENGR 303

Page 27: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<27>

~ NOT

*, /, % mult, div, mod

+, - add,sub

<<, >> shift

<<<, >>> arithmetic shift

<, <=, >, >= comparison

==, != equal, not equal

&, ~& AND, NAND

^, ~^ XOR, XNOR

|, ~| OR, NOR

?: ternary operator

Order of operations

Highest

Lowest

Precedence

ENGR 303

Page 28: ENGR 303 Introduction to Logic Design Lecture 8...ENGR 303 –Introduction to Logic Design Lecture 8 Dr. Chuck Brown Engineering and Computer Information Science Folsom Lake College

<28> ENGR 303

Verilog Keywords*

* The keywords are reserved identifiers, which contain only lowercase letters. The user cannot redefine any of them.

alwaysandassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisableedgeelseendendcaseendfunctionendmoduleendprimitiveendspecifyendtableendtaskeventforforceforeverforkfunctionhighz0highz1

ifinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenmosnornotnotif0notif1oroutputpmosposedgeprimitivepull0pull1pulldownpulluprcmosregreleaserepeatrnmosrpmosrtran

rtranif0rtranif1scalaredsmallspecifyspecparamstrong0strong1supply0supply1tabletasktimetrantranif0tranif1tritri0tri1triandtriorvectoredwaitwandweak0weak1whilewireworxnorxor


Recommended