eda 實作 verilog tutorial 國研院國家晶片系統設計中心 july 2005 陳正斌

28
EDA 實實 Verilog Tutorial 實實實實實實實實實實實實實 July 2005 實實實

Post on 20-Dec-2015

260 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

EDA 實作Verilog Tutorial

國研院國家晶片系統設計中心July 2005

陳正斌

Page 2: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Traditional VLSI Design Flow

Page 3: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Traditional VLSI Design Flow

Page 4: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

EDA

• Electronic Design Automation (EDA)

• Computer-Aided Design (CAD)

Page 5: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Hardware Description Language

• A hardware description language (HDL) is a high-level programming language with special constructs used to model the function of hardware logic circuits.

• The special language constructs can:– Describe the connectivity of the circuit

– Describe the functionality of the circuit

– Describe the timing of a circuit

Page 6: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Verilog

• Verilog is a Hardware Description Language.

• Verilog models digital circuits.

• Verilog lets you develop tests to verify the functionality of the circuits you model.

Page 7: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Verilog Module

module DFF

endmodule

module ALU

endmodule

module cache

endmodule

_________________________

_____________________

_________________________

_____________________

_____________

____________

_________

____________

Page 8: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Module Ports

module DFF (d, clk,q,qb); input d, clk; output q, qb;

endmodule

_________________________

_____________________

Q

QSET

CLR

Dd

clk

q

qb

Page 9: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Module Instances

module REG4 (d, clk,q,qb); input [3:0] d; input clk; output [3:0] q, qb;

DFF d0 (d[0], clk, q[0], qb[0]); DFF d1 (d[1], clk, q[1], qb[1]); DFF d0 (d[2], clk, q[2], qb[2]); DFF d0 (d[3], clk, q[3], qb[3]);

endmodule

d clk

q qb

Q

QSET

CLR

S

R Q

QSET

CLR

S

R Q

QSET

CLR

S

R Q

QSET

CLR

S

R

d0 d1 d2 d3

4

4 4

module DFF (d, clk,q,qb);………………….endmodule

Page 10: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

A Simple and Complete Example

Stimulus and

Control

Response Generation

and Verification

Page 11: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Sample Design – Full Adder

xin yin cin cout sum0 0 0 0 0

0 0 1 0 1

0 1 0 0 1

0 1 1 1 0

1 0 0 0 1

1 0 1 1 0

1 1 0 1 0

1 1 1 1 1

Page 12: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Full Adder – Boolean Algebra

• cout = xinyincin’+ xinyincin+xin’yincin+xinyin’cin

= xinyin+cin(xin’yin+xinyin’) = xinyin + cin(xin y⊕ in)

• sum = xin’yin’cin+ xin’yincin’+xinyin’cin’+xinyincin

= (xin’yin+xinyin’)cin’ + (xin’yin’+xinyin) cin = (xin ⊕ yin ) c⊕ in

Page 13: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Full Adder – Schematic

xin

yin

cin

cout

p1

p2

p3

xin

yin

cin

sum

Page 14: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Full Adder – Verilog Model

module COUT(cout, xin, yin, cin);

input xin;input yin;input cin;output cout;wire xin, yin, cin, out;wire p1, p2, p3;

and (p1, xin, yin);xor (p2, xin, yin);and (p3, p2, cin);or (cout, p1, p3);

endmodule

module SUM(sum, xin, yin, cin);

input xin;input yin;input cin;output sum;

xor (sum, xin, yin, cin);

endmodule

Page 15: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Full Adder -- Schematic

Xi

Yi

Ci

Cii

Si

Page 16: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Full Adder -- Schematic

Xi

Yi

Ci

Cii

Si

COUT

xinyincin

cout

SUM

xinyincin

sum

Page 17: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Full Adder – Verilog Model

module FA(Cii,Si,Xi,Yi,Ci);

input Xi;input Yi;input Ci;output Cii;output Si;

SUM inst0 (.sum(Si), .xin(Xi), .yin(Yi), .cin(Ci));COUT inst1 (.cout(Cii), .xin(Xi), .yin(Yi), .cin(Ci));

endmodule

Page 18: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Test Bench -- Template

module FA_test; //Signal declaration

//Instantiate modules

//Apply stimulus

//Display results

endmodule

Page 19: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Test Bench --Instance

module FA_test; //Signal declaration

//Instantiate modules FA inst0 (Cii,Si,Xi,Yi,Ci); //Apply stimulus

//Display results

endmodule

Page 20: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Test Bench -- Stimulus

module FA_test;// Signal declaration reg Xi, Yi, Ci;// Instantiate modulesFA inst0 (Cii,Si,Xi,Yi,Ci);// Apply Stimulusinitialbegin #0 Xi = 0; Yi = 0; Ci = 0; #10 Xi = 0; Yi = 0; Ci = 1; #10 Xi = 0; Yi = 1; Ci = 0; #10 Xi = 0; Yi = 1; Ci = 1; #10 $finish;end//Display results

endmodule

Time Values

Xi Yi Ci

0 0 0 0

10 0 0 1

20 0 1 0

30 0 1 1

Page 21: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Test Bench – Display Result

module FA_test;// Signal declaration reg Xi, Yi, Ci;// Instantiate modulesFA inst0 (Cii,Si,Xi,Yi,Ci);// Apply Stimulusinitialbegin #10 Xi = 0; Yi = 0; Ci = 0; #10 Xi = 0; Yi = 0; Ci = 1; #10 Xi = 0; Yi = 1; Ci = 0; #10 Xi = 0; Yi = 1; Ci = 1; #10 $finish;end//Display resultsinitial // print all changes to all signal values $monitor($time, " Xi = %b Yi = %b Ci = %b Ci+1 = %b Si = %b", Xi,Yi,Ci,Cii,Si);endmodule

Page 22: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Dump Waveform

initial

begin

$dumpfile(“file.vcd”);

$dumpvars(0,inst0);

end

Page 23: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Simulation

• unix> verilog FA_test.v FA.v COUT.v SUM.v

• unix> nWave &

Page 24: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Waveform

Page 25: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Quiz

• Design a 4 bit adder by instancing 4 full adder

coutcin co0FA

Ci

Xi Yi

Cii

Si

FACi

Xi Yi

Cii

Si

FACi

Xi Yi

Cii

Si

FACi

Xi Yi

Cii

Si

co1 co2

b[0] a[0] b[1] a[1] b[2] a[2] b[3] a[3]

sum[2] sum[3]sum[1]sum[0]

Page 26: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Edit ADDR4.v

module ADDR4(cout,sum,a,b,cin);

input cin;input [3:0] a;input [3:0] b;output [3:0] sum;output cout;

//Design Started Here!!!

endmodule

Page 27: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Apply Stimulus

• Edit ADDR4_test.v

// Apply Stimulusinitialbegin // ** Add stimulus here **

end

Page 28: EDA 實作 Verilog Tutorial 國研院國家晶片系統設計中心 July 2005 陳正斌

Apply Stimulus

Time Values

a b Cin

0 0 0 0

10 3 5 1

20 10 11 0

30 5 7 1

40 15 15 0

50 15 15 1

60 15 1 0

70 1 15 1

80 7 8 0

90 5 10 1

100 4 9 0

110 8 6 1

120 7 13 0

130 9 12 0

140 14 13 1