designing with verilog

Post on 25-Jan-2016

42 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Designing with Verilog. EECS150 Fall2008 - Lab Lecture #2 Chen Sun Adopted from slides designed by Greg Gibeling. Today. Lab #1 Solution Top Down vs. Bottom Up Partitioning & Interfaces Behavioral vs. Structural Verilog Blocking vs. Non-Blocking Verilog Hardware Administrative Info - PowerPoint PPT Presentation

TRANSCRIPT

9/5/2008 EECS150 Lab Lecture #2 1

Designing with Verilog

EECS150 Fall2008 - Lab Lecture #2

Chen SunAdopted from slides designed by Greg

Gibeling

9/5/2008 EECS150 Lab Lecture #2 2

Today Lab #1 Solution Top Down vs. Bottom Up Partitioning & Interfaces Behavioral vs. Structural Verilog Blocking vs. Non-Blocking Verilog <-> Hardware Administrative Info Lab #2 Primitives

9/5/2008 EECS150 Lab Lecture #2 3

Lab #1 Solution (1)

The Point Gets you experience with CAD tools

Simulation Synthesis iMPACT

Reinforces Timing Functional simulation isn’t enough Simulation != Synthesis

Debugging differences are very difficult

9/5/2008 EECS150 Lab Lecture #2 4

Lab #1 Solution (2) Review:

FPGA_TOP2.v FPGA <-> Board High level

instantiations Lab1Circuit.v

The accumulator Two modules

Unusual

Lab1Testbench.v

Lab1Testbench

FPGA_TOP2

Lab1Circuit(Accumulator)

Lab1Cell

8x

9/5/2008 EECS150 Lab Lecture #2 5

Top Down vs. Bottom Up (1) Top Down Design

Start by defining the project Then break it down Starts here:

Lab3Top Out

Select

In

9/5/2008 EECS150 Lab Lecture #2 6

Top Down vs. Bottom Up (2) Top Down Design

Ends here:

Out

Select

In

Lab2Top

Accumulator

Peak Detector

Mux

9/5/2008 EECS150 Lab Lecture #2 7

Top Down vs. Bottom Up (3)

Bottom Up Testing Faster, Easier and

Cheaper Test each little

component thoroughly

Allows you to reuse components

Peak Detector OutIn

PeakTestbench

Accumulator OutIn

AccTestbench

9/5/2008 EECS150 Lab Lecture #2 8

Partitioning & Interfaces (1) Partitioning

Break the large module up Decide what sub-modules make

sense Partitioning is for your benefit It needs to make sense to you

Each module should be: A reasonable size Independently testable

Might be built by different people

9/5/2008 EECS150 Lab Lecture #2 9

Partitioning & Interfaces (2)

Interfaces A concise definition of signals and

timing Timing is vital, do NOT omit it

Must be clean Don’t send useless signals across Bad partitioning might hinder this

An interface is a contract Lets other people use/reuse your module

9/5/2008 EECS150 Lab Lecture #2 10

Behavioral vs. Structural (1)

Rule of thumb: Behavioral doesn’t have sub-

components Structural has sub-components:

Instantiated Modules Instantiated Gates Instantiated Primitives

Most modules are mixed Obviously this is the most flexible

9/5/2008 EECS150 Lab Lecture #2 11

Behavioral vs. Structural (2)

Structural

StructuralStructuralBehavioral

Behavioral

Behavioral Primitive

9/5/2008 EECS150 Lab Lecture #2 12

Behavioral vs. Structural (3)

9/5/2008 EECS150 Lab Lecture #2 13

Blocking vs. Non-Blocking (1)

always @ (a) beginb = a;c = b;

end

always @ (posedge Clock) beginb <= a;c <= b;

end

C = B = A

B = Old AC = Old B

Verilog Fragment Result

9/5/2008 EECS150 Lab Lecture #2 14

Blocking vs. Non-Blocking (2)

Use Non-Blocking for FlipFlop Inference posedge/negedge require Non-Blocking Else simulation and synthesis wont match

Use ‘#1’ to show causality

always @ (posedge Clock) beginb <= #1 a;c <= #1 b;

end

9/5/2008 EECS150 Lab Lecture #2 15

Blocking vs. Non-Blocking (3)

If you use blocking for FlipFlops:

YOU WILL NOT GET WHAT YOU WANT!always @ (posedge Clock) begin

b = a; // b will go awayc = b; // c will be a FlipFlop

end// b isn’t needed at all

always @ (posedge Clock) beginc = b; // c will be a FlipFlopb = a; // b will be a FlipFlop

end

9/5/2008 EECS150 Lab Lecture #2 16

Blocking vs. Non-Blocking (4)

file xyz.v: module XYZ(A, B, Clock);

input B, Clock;output A;reg A;always @ (posedge Clock)

A = B;endmodule

file abc.v: module ABC(B, C, Clock);

input C, Clock; output B; reg B; always @ (posedge Clock)

B = C; endmodule

Race Conditions

THIS IS WRONG!!

9/5/2008 EECS150 Lab Lecture #2 17

Blocking vs. Non-Blocking (5)

file xyz.v: module XYZ(A, B, Clock);

input B, Clock;output A;reg A;always @ (posedge Clock)

A <= B;endmodule

file abc.v: module ABC(B, C, Clock);

input C, Clock; output B; reg B; always @ (posedge Clock)

B <= C; endmodule

Race Conditions

THIS IS CORRECT!!

9/5/2008 EECS150 Lab Lecture #2 18

Verilog <-> Hardware (1)

+ Sum

A

B

assign Sum = A + B;

reg [1:0] Sum;always @ (A or B) begin

Sum = A + B;end

0

Sum

AB

9/5/2008 EECS150 Lab Lecture #2 19

Verilog <-> Hardware (2)

assign Out = Select ? A : B;

reg [1:0] Out;always @ (Select or A or B) begin

if (Select) Out = A;else Out = B;

end

Mux

0

1

S

Out

B

A

Select

9/5/2008 EECS150 Lab Lecture #2 20

Verilog <-> Hardware (3)

assign Out = Sub ? (A-B) : (A+B);

reg [1:0] Out;always @ (Sub or A or B) begin

if (Sub) Out = A - B;else Out = A + B;

end

Mux

0

1

S

+

B

A

Sub

Out

9/5/2008 EECS150 Lab Lecture #2 21

Verilog <-> Hardware (4)

reg [1:0] Out;always @ (posedge Clock) begin

if (Reset) Out <= 2’b00;else Out <= In;

end

Q

QSET

CLR

DIn

Reset

Out

Clock

9/5/2008 EECS150 Lab Lecture #2 22

Administrative Info

Cardkeys Go to 253 Cory Will be activated on: September 15th

9/5/2008 EECS150 Lab Lecture #2 23

Lab #2 (1)

Lab2Top Accumulator

Stores sum of all inputs Written in behavioral verilog Same function as Lab1Circuit

Peak Detector Stores largest of all inputs Written in structural verilog

9/5/2008 EECS150 Lab Lecture #2 24

Lab #2 (2)

Out

Select

In

Lab2Top

Accumulator

Peak Detector

Mux

9/5/2008 EECS150 Lab Lecture #2 25

Lab #2 (3)

Register+

Accumulator

In

Enable

Clock

Out

Reset

88

8

8

Accumulator.v

9/5/2008 EECS150 Lab Lecture #2 26

Lab #2 (4)

PeakDetector.v

Register

PeakDetector

In

Enable

Clock

Out

Reset

≥8

8

8

8

9/5/2008 EECS150 Lab Lecture #2 27

Primitives (1)

wire SIntermediate, SFinal, CPropagrate, CGenerate;

xor xor1( SIntermediate, In, Out);and and1( CGenerate, In, Out);xor xor2( SFinal, SIntermediate, CIn);and and2( CPropagate, In, CIn);or or1( COut, CGenerate,

CPropagate);

FDCE FF( .Q( Out),.C( Clock),.CE( Enable),.CLR( Reset),.D( SFinal));

9/5/2008 EECS150 Lab Lecture #2 28

Primitives (2)

wire SIntermediate, SFinal, CPropagrate, CGenerate;

xor xor1( SIntermediate, In, Out);and and1( CGenerate, In, Out);xor xor2( SFinal, SIntermediate,

CIn);and and2( CPropagate, In, CIn);or or1( COut, CGenerate,

CPropagate);

FDCE FF( .Q( Out),.C( Clock),.CE( Enable),.CLR( Reset),.D( SFinal));

9/5/2008 EECS150 Lab Lecture #2 29

Primitives (3)

wire SIntermediate, SFinal, CPropagrate, CGenerate;

xor xor1( SIntermediate, In, Out);and and1( CGenerate, In, Out);xor xor2( SFinal, SIntermediate, CIn);and and2( CPropagate, In, CIn);or or1( COut, CGenerate,

CPropagate);

FDCE FF( .Q( Out),.C( Clock),.CE( Enable),.CLR( Reset),.D( SFinal));

top related