eecs 470 lab 1 - verilog: hardware description language

60
EECS 470 Lab 1 Verilog: Hardware Description Language Department of Electrical Engineering and Computer Science College of Engineering University of Michigan September 2/3, 2021 (University of Michigan) Lab 1: Verilog September 2/3, 2021 1 / 60

Upload: others

Post on 01-Oct-2021

38 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: EECS 470 Lab 1 - Verilog: Hardware Description Language

EECS 470 Lab 1Verilog: Hardware Description Language

Department of Electrical Engineering and Computer ScienceCollege of EngineeringUniversity of Michigan

September 2/3, 2021

(University of Michigan) Lab 1: Verilog September 2/3, 2021 1 / 60

Page 2: EECS 470 Lab 1 - Verilog: Hardware Description Language

Overview

EECS 470

Verilog

Verilog Flow Control

Testing

Project 1

Lab Assignment

(University of Michigan) Lab 1: Verilog September 2/3, 2021 2 / 60

Page 3: EECS 470 Lab 1 - Verilog: Hardware Description Language

EECS 470

Help?

I Contact InformationI EECS 470 Staff Email - [email protected] Emails sent to the above address will go to all instructors so we can

respond to your questions faster.I EECS 470 Piazza (click for link)

I Most of your project related questions should be asked here so thatother people can benefit from the answer.

I Reminder: Please do not post program code in public questions.

I See up-to-date office hours on the course website.

(University of Michigan) Lab 1: Verilog September 2/3, 2021 3 / 60

Page 4: EECS 470 Lab 1 - Verilog: Hardware Description Language

EECS 470

Where? When?

I Due to the completely online natureI Labs will be released shortly before the start of the first lab each week.I A recording of the lab will be released at the end of each week.I Please refer to the slides and recording for demonstrations and tips!

I Lab attendance is optional but strongly recommended!I Three Lab Sections

I 011 – Friday 10:00 am to 12:00 pmI 012 – Friday 12:30 pm to 2:30 pmI 013 – Thursday 4:30 pm to 6:30 pm

I You can attend any of the lab sections. If the lab becomes very busy,please try to attend your own lab section hours (within reason).

I Labs assignments must be checked off during a live meeting with aninstructor. If you are unable to get checked off during lab, you can alsoget checked off during any office hours.

I Labs are due by the end of lab the week after they are assigned.

(University of Michigan) Lab 1: Verilog September 2/3, 2021 4 / 60

Page 5: EECS 470 Lab 1 - Verilog: Hardware Description Language

EECS 470

What?

Lab 1 – Verilog: Hardware Description LanguageLab 2 – The Build SystemLab 3 – Writing Good TestbenchesLab 4 – Revision ControlLab 5 – ScriptingLab 6 – SystemVerilog

(University of Michigan) Lab 1: Verilog September 2/3, 2021 5 / 60

Page 6: EECS 470 Lab 1 - Verilog: Hardware Description Language

EECS 470

Projects

Individual Verilog Projects

Project 1 – Priority Selectors (1%)Project 2 – Pipelined Multiplier, Integer Square Root (2%)Project 3 – Verisimple 5-stage Pipeline (5%)

Group Project

Project 4 – Out-of-Order Processor (35%)

(University of Michigan) Lab 1: Verilog September 2/3, 2021 6 / 60

Page 7: EECS 470 Lab 1 - Verilog: Hardware Description Language

EECS 470

Advice

I These projects will take a non-trivial amount of time, especially ifyou’re not a Verilog guru.

I You should start them early. Seriously. . .I Especially Project 3!

(University of Michigan) Lab 1: Verilog September 2/3, 2021 7 / 60

Page 8: EECS 470 Lab 1 - Verilog: Hardware Description Language

EECS 470

Project 4

I RISCV-V ISAI An open source ISA that has commercial productsI Better software support, education friendly and has various extensions

that include additional functionalityI Groups of 4 to 5

I Start thinking about your groups nowI You’ll be spending hundreds of hours together this semester, so work

with people with whom you get along.I Heavy Workload

I 100 hours/member, minimumI 150 to 300 hours/member, more realisticallyI This is a lower bound, not an upper bound. . .

I Class is heavily loaded to the end of the term

(University of Michigan) Lab 1: Verilog September 2/3, 2021 8 / 60

Page 9: EECS 470 Lab 1 - Verilog: Hardware Description Language

EECS 470

Administrivia

I Homework 1 is due Wednesday, 8thth September, 2021 10:00 PM(turn in via Gradescope)

I Project 1 is due Sunday 12thth September, 2021 11:59 PM (turn invia submission script)

I Lab 1 is due Friday, 10th September, 2021 11:59 PM (turn in viagradescope)

(University of Michigan) Lab 1: Verilog September 2/3, 2021 9 / 60

Page 10: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Intro to Verilog

What is Verilog?I Hardware Description Language - IEEE 1364-2005

I Superseded by SystemVerilog - IEEE 1800-2009I Two Forms

1. Behavioral2. Structural

I It can be built into hardware. If you can’t think of at least one(inefficient) way to build it, it might not be good.

Why do I care?I We use Behavioral Verilog to do computer architecture here.I Semiconductor Industry Standard (VHDL is also common, more so in

Europe)

(University of Michigan) Lab 1: Verilog September 2/3, 2021 10 / 60

Page 11: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

The Difference Between Behavioral and Structural Verilog

Behavioral VerilogI Describes function of designI Abstractions

I Arithmetic operations(+,-,*,/)

I Logical operations(&,|,ˆ,~)

Structural VerilogI Describes construction of

designI No abstractionI Uses modules, corresponding

to physical devices, foreverything

Suppose we want to build an adder?

(University of Michigan) Lab 1: Verilog September 2/3, 2021 11 / 60

Page 12: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Structural Verilog by Example

a◦b◦

w_1

w_2

w_0

cin◦◦s

◦cout

u0u1

u2

u3

u4

Figure: 1-bit Full Adder

(University of Michigan) Lab 1: Verilog September 2/3, 2021 12 / 60

Page 13: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Structural Verilog by Example

module one_bit_adder(input wire a,b,cin,output wire sum,cout);wire w_0,w_1,w_2;xor u0(w_0,a,b);xor u1(sum,w_0,cin);and u2(w_1,w_0,cin);and u3(w_2,a,b);or u4(cout,w_1,w_2);

endmodule

(University of Michigan) Lab 1: Verilog September 2/3, 2021 13 / 60

Page 14: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Behavioral Verilog by Example

module one_bit_adder(input wire a,b,cin,output wire sum,cout);assign sum = a ^ b ^ cin;assign cout = ((a ^ b) & cin) | a & b;

endmodule

(University of Michigan) Lab 1: Verilog September 2/3, 2021 14 / 60

Page 15: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Behavioral Verilog by Example

module one_bit_adder(input logic a,b,cin,output logic sum,cout);

always_combbegin

sum = a ^ b ^ cin;cout = 1'b0;if ((a ^ b) & cin) | (a & b))

cout = 1'b1;end

endmodule

(University of Michigan) Lab 1: Verilog September 2/3, 2021 15 / 60

Page 16: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Verilog Semantics

LexicalI Everything is case sensitive.I Type instances must start with A-Z,a-z,_. They may contain

A-Z,a-z,0-9,_,$.I Comments begin with // or are enclosed with /* and */.

(University of Michigan) Lab 1: Verilog September 2/3, 2021 16 / 60

Page 17: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Data Types

Synthesizable Data Types

wires Also called nets

wire a_wire;wire [3:0] another_4bit_wire;

I Cannot hold state

logic Replaced reg in SystemVerilog

logic [7:0] an_8bit_register;reg a_register;

I Holds state, might turn into flip-flopsI Less confusing than using reg with combinational logic

(coming up. . . )

(University of Michigan) Lab 1: Verilog September 2/3, 2021 17 / 60

Page 18: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Data Types

Unsynthesizable Data Types

integer Signed 32-bit variabletime Unsigned 64-bit variablereal Double-precision floating point variable

(University of Michigan) Lab 1: Verilog September 2/3, 2021 18 / 60

Page 19: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Types of Values

Four State Logic

0 False, low1 True, highZ High-impedance, unconnected netX Unknown, invalid, don’t care

(University of Michigan) Lab 1: Verilog September 2/3, 2021 19 / 60

Page 20: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Values

Literals/ConstantsI Written in the format <bitwidth>’<base><constant>I Options for <base> are. . .

b Binaryo Octald Decimalh Hexadecimal

assign an_8bit_register = 8'b10101111;assign a_32bit_wire = 32'hABCD_EF01;assign a_4bit_logic = 4'hE;

(University of Michigan) Lab 1: Verilog September 2/3, 2021 20 / 60

Page 21: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Verilog OperatorsArithmetic

* Multiplication/ Division+ Addition- Subtraction% Modulus** Exponentiation

Bitwise~ Complement& And| Or~| Norˆ Xor~ˆ Xnor

Logical! Complement&& And|| Or

Shift>> Logical right shift<< Logical left shift

>>> Arithmetic right shift<<< Arithmetic left shift

Relational> Greater than>= Greater than or equal to< Less than<= Less than or equal to!= Inequality

!== 4-state inequality== Equality

=== 4-state equalitySpecial

{,} Concatenation{n{m}} Replication

?: Ternary

(University of Michigan) Lab 1: Verilog September 2/3, 2021 21 / 60

Page 22: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Setting Values

assign StatementsI One line descriptions of combinational logicI Left hand side must be a wire (SystemVerilog allows assign statements

on logic type)I Right hand side can be any one line verilog expressionI Including (possibly nested) ternary (?:)

Example

module one_bit_adder(input wire a,b,cin,output wire sum,cout);assign sum = a ^ b ^ cin;assign cout = ((a ^ b) & cin) | a & b;

endmodule

(University of Michigan) Lab 1: Verilog September 2/3, 2021 22 / 60

Page 23: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Setting Values

always BlocksI Contents of always blocks are executed whenever anything in the

sensitivity list happensI Two main types in this class. . .

I always_combI implied sensitivity lists of every signal inside the blockI Used for combinational logic. Replaced always @*

I always_ff @(posedge clk)I sensitivity list containing only the positive transition of the clk signalI Used for sequential logic

I All left hand side signals need to be logic type.

(University of Michigan) Lab 1: Verilog September 2/3, 2021 23 / 60

Page 24: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Always Block Examples

Combinational Block

always_combbegin

x = a + b;y = x + 8'h5;

end

Sequential Block

always_ff @(posedge clk)begin

x <= #1 next_x;y <= #1 next_y;

end

(University of Michigan) Lab 1: Verilog September 2/3, 2021 24 / 60

Page 25: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Blocking vs. Nonblocking Assignments

Blocking AssignmentI Combinational BlocksI Each assignment is

processed in order, earlierassignments block later ones

I Uses the = operator

vs.

Nonblocking AssignmentI Sequential BlocksI All assignments occur

“simultaneously,” delays arenecessary for accuratesimulation

I Uses the <= operator

(University of Michigan) Lab 1: Verilog September 2/3, 2021 25 / 60

Page 26: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Blocking vs. Nonblocking Assignment by Example

Blocking Examplealways_combbegin

x = new_val1;y = new_val2;sum = x + y;

endI Behave exactly as expectedI Standard combinational logic

new_val1x

new_val2y

sum

Figure: Timing diagram for theabove example.

(University of Michigan) Lab 1: Verilog September 2/3, 2021 26 / 60

Page 27: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Blocking vs. Nonblocking Assignment by Example

Nonblocking Examplealways_ff @(posedge clock)begin

x <= #1 new_val1;y <= #1 new_val2;sum <= #1 x + y;

endI What changes between

these two examples?I Nonblocking means that

sum lags a cycle behindthe other two signals

clocknew_val1

xnew_val2

ysum

Figure: Timing diagram for the above example.

(University of Michigan) Lab 1: Verilog September 2/3, 2021 27 / 60

Page 28: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Blocking vs. Nonblocking Assignment by Example

Bad Examplealways_ff @(posedge clock)begin

x <= #1 y;z = x;

endI z is updated after xI z updates on negedge

clock

clockreset

xyz

Figure: Timing diagram for theabove example.

(University of Michigan) Lab 1: Verilog September 2/3, 2021 28 / 60

Page 29: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Synthesis Tips

LatchesI What is a latch?

I Memory device without a clock

I Generated by a synthesis tool when a net needs to hold state withoutbeing clocked (combinational logic)

I Generally bad, unless designed in intentionallyI Unnecessary in this class

(University of Michigan) Lab 1: Verilog September 2/3, 2021 29 / 60

Page 30: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Synthesis Tips

LatchesI Always assign every variable on every pathI This code generates a latchI Why does this happen?

always_combbegin

if (cond)next_x = y;

end

(University of Michigan) Lab 1: Verilog September 2/3, 2021 30 / 60

Page 31: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Synthesis Tips

Possible Solutions to Latchesalways_combbegin

next_x = x;if (cond)

next_x = y;end

always_combbegin

if (cond)next_x = y;

elsenext_x = x;

end

(University of Michigan) Lab 1: Verilog September 2/3, 2021 31 / 60

Page 32: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Modules

Intro to ModulesI Basic organizational unit in VerilogI Can be reused

Module Example

module my_simple_mux(input wire select_in, a_in, b_in; //inputs listedoutput wire muxed_out); //outputs listedassign muxed_out = select_in ? b_in : a_in;

endmodule

(University of Michigan) Lab 1: Verilog September 2/3, 2021 32 / 60

Page 33: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Modules

Writing ModulesI Inputs and outputs must be listed, including size and type

format: <dir> <type> <[WIDTH-1:0]> <name>;e.g. output logic [31:0] addr;

I In module declaration line or after it, inside the module

Instantiating ModulesI Two methods of instantiation

1. e.g. my_simple_mux m1(.a_in(a),.b_in(b),.select_in(s),.muxed_out(m));

2. e.g. my_simple_mux m1(a,b,s,m);

I The former is much safer. . .I Introspection (in testbenches): module.submodule.signal

(University of Michigan) Lab 1: Verilog September 2/3, 2021 33 / 60

Page 34: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

How to Design with Verilog

I Remember – Behavioral Verilog implies no specific hardware designI But, it has to be synthesizableI Better be able to build it somehow

(University of Michigan) Lab 1: Verilog September 2/3, 2021 34 / 60

Page 35: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Keys to Synthesizability

Combinational LogicI Avoid feedback (combinatorial loops)I Always blocks should

I Be always_comb blocksI Use the blocking assignment operator =

I All variables assigned on all pathsI Default valuesI if(...) paired with an else

(University of Michigan) Lab 1: Verilog September 2/3, 2021 35 / 60

Page 36: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog

Keys to Synthesizability

Sequential LogicI Avoid clock- and reset-gatingI Always blocks should

I Be always_ff @(posedge clock) blocksI Use the nonblocking assignment operator, with a delay <= #1

I No path should set a variable more than onceI Reset all variables used in the blockI //synopsys sync_set_reset “reset”

(University of Michigan) Lab 1: Verilog September 2/3, 2021 36 / 60

Page 37: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog Flow Control

Flow Control

All Flow ControlI Can only be used inside procedural blocks (always, initial, task,

function)I Encapsulate multiline assignments with begin...endI Remember to assign on all paths

Synthesizable Flow ControlI if/elseI case

(University of Michigan) Lab 1: Verilog September 2/3, 2021 37 / 60

Page 38: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog Flow Control

Flow Control

Unsythesizable Flow ControlI Useful in testbenchesI For example. . .

I forI whileI repeatI forever

(University of Michigan) Lab 1: Verilog September 2/3, 2021 38 / 60

Page 39: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog Flow Control

Flow Control by Example

Synthesizable Flow Control Example

always_combbegin

if (muxy == 1'b0)y = a;

elsey = b;

end

The Ternary Alternative

wire y;assign y = muxy ? b : a;

(University of Michigan) Lab 1: Verilog September 2/3, 2021 39 / 60

Page 40: EECS 470 Lab 1 - Verilog: Hardware Description Language

Verilog Flow Control

Flow Control by Example

Casez Example

always_combbegin

casez(alu_op)3'b000: r = a + b;3'b001: r = a - b;3'b010: r = a * b;...3'b1??: r = a ^ b;

endcaseend

(University of Michigan) Lab 1: Verilog September 2/3, 2021 40 / 60

Page 41: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Testing

What is a test bench?I Provides inputs to one or more modulesI Checks that corresponding output makes senseI Basic building block of Verilog testing

Why do I care?I Finding bugs in a single module is hard. . .I But not as hard as finding bugs after combining many modulesI Better test benches tend to result in higher project scores

(University of Michigan) Lab 1: Verilog September 2/3, 2021 41 / 60

Page 42: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Intro to Test Benches

Features of the Test BenchI Unsynthesized

I Remember unsynthesizable constructs? This is where they’re used.I In particular, unsynthesizable flow control is useful in testbenches (e.g.

for, while)I Programmatic

I Many programmatic, rather than hardware design, features are availablee.g. functions, tasks, classes (in SystemVerilog)

(University of Michigan) Lab 1: Verilog September 2/3, 2021 42 / 60

Page 43: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Anatomy of a Test Bench

A good test bench should, in order. . .1. Declare inputs and outputs for the module(s) being tested2. Instantiate the module (possibly under the name DUT for Device Under

Test)3. Setup a clock driver (if necessary)4. Setup a correctness checking function (if necessary/possible)5. Inside an initial block. . .

5.1 Assign default values to all inputs, including asserting any availablereset signal

5.2 $monitor or $display important signals5.3 Describe changes in input, using good testing practice

(University of Michigan) Lab 1: Verilog September 2/3, 2021 43 / 60

Page 44: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Unsythesizable Procedural Blocks

initial BlocksI Procedural blocks, just like alwaysI Contents are simulated once at the beginning of a simulationI Used to set values inside a test benchI Should only be used in test benches

(University of Michigan) Lab 1: Verilog September 2/3, 2021 44 / 60

Page 45: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Unsythesizable Procedural Blocks

initial Block Example

initialbegin

@(negedge clock);reset = 1'b1;in0 = 1'b0;in1 = 1'b1;@(negedge clock);reset = 1'b0;@(negedge clock);in0 = 1'b1;...

end

(University of Michigan) Lab 1: Verilog September 2/3, 2021 45 / 60

Page 46: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Tasks and Functions

taskI Reuse commonly repeated

codeI Can have delays (e.g. #5)I Can have timing information

(e.g. @(negedge clock))I Might be synthesizable

(difficult, not recommended)

functionI Reuse commonly repeated

codeI No delays, no timingI Can return values, unlike a

taskI Basically combinational logicI Might be synthesizable

(difficult, not recommended)

(University of Michigan) Lab 1: Verilog September 2/3, 2021 46 / 60

Page 47: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Tasks and Functions by Example

task Exampletask exit_on_error;

input [63:0] A, B, SUM;input C_IN, C_OUT;begin

$display("@@@ Incorrect at time %4.0f", $time);$display("@@@ Time:%4.0f clock:%b A:%h B:%h CIN:%b SUM:%h"

"COUT:%b", $time, clock, A, B, C_IN, SUM, C_OUT);$display("@@@ expected sum=%b", (A+B+C_IN) );$finish;

endendtask

(University of Michigan) Lab 1: Verilog September 2/3, 2021 47 / 60

Page 48: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Tasks and Functions by Example

function Examplefunction check_addition;

input wire [31:0] a, b;begin

check_addition = a + b;end

endfunction

assign c = check_addition(a,b);

(University of Michigan) Lab 1: Verilog September 2/3, 2021 48 / 60

Page 49: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Intro to System Tasks and Functions

I Just like regular tasks and functionsI But they introspect the simulationI Mostly these are used to print informationI Behave just like printf from C

(University of Michigan) Lab 1: Verilog September 2/3, 2021 49 / 60

Page 50: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

List of System Tasks and Functions

$monitor Used in test benches. Prints every time an argumentchanges. Very bad for large projects.e.g. $monitor("format",signal,...)

$display Can be used in either test benches or design, but not aftersynthesis. Prints once. Not the best debugging techniquefor significant projects.e.g. $display("format",signal,...)

$strobe Like display, but prints at the end of the current simulationtime unit.e.g. $strobe("format",signal,...)

$time The current simulation time as a 64 bit integer.$reset Resets the simulation to the beginning.

$finish Exit the simulator, return to terminal.More available at ASIC World.

(University of Michigan) Lab 1: Verilog September 2/3, 2021 50 / 60

Page 51: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Test Benches by Example

Test Bench Setup

module testbench;logic clock, reset, taken, transition, prediction;

two_bit_predictor(.clock(clock),.reset(reset),.taken(taken),.transition(transition),.prediction(prediction));

alwaysbegin

clock = #5 ~clock;end

(University of Michigan) Lab 1: Verilog September 2/3, 2021 51 / 60

Page 52: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Test Benches by Example

Test Bench Test Casesinitialbegin

$monitor("Time:%4.0f clock:%b reset:%b taken:%b trans:%b""pred:%b", $time, clock, reset, taken,transition, prediction);

clock = 1'b1;reset = 1'b1;taken = 1'b1;transition = 1'b1;@(negedge clock);@(negedge clock);reset = 1'b0;@(negedge clock);taken = 1'b1;@(negedge clock);...$finish;

end

(University of Michigan) Lab 1: Verilog September 2/3, 2021 52 / 60

Page 53: EECS 470 Lab 1 - Verilog: Hardware Description Language

Testing

Test Bench Tips

Remember to. . .I Initialize all module inputsI Then assert resetI Use @(negedge clock) when changing inputs to avoid race

conditions

(University of Michigan) Lab 1: Verilog September 2/3, 2021 53 / 60

Page 54: EECS 470 Lab 1 - Verilog: Hardware Description Language

Project 1

Project 1 Administrivia

GradingI Objective Grading

I 70 points possibleI Test cases automatically run

I Subjective GradingI 30 points possibleI Verilog style graded by handI Some Verilog Style Guidelines (click for link)I In general, the goal is to make your code easy to read

(University of Michigan) Lab 1: Verilog September 2/3, 2021 54 / 60

Page 55: EECS 470 Lab 1 - Verilog: Hardware Description Language

Project 1

Project 1 Administrivia

Submission ScriptI Run from the directory above the directory your project is in. . .I For example:

$ pwd/afs/umich.edu/user/j/n/jnnwa$ cd classes/eecs470/projects$ lsproject1 project2 project3$ /afs/umich.edu/user/j/n/jnnwa/Public/470submit -p 1project1

(University of Michigan) Lab 1: Verilog September 2/3, 2021 55 / 60

Page 56: EECS 470 Lab 1 - Verilog: Hardware Description Language

Project 1

Project 1 Hints

Hierarchical DesignI Used to expand modules

I Build a 64-bit adder out of 1-bit addersI Build a 4-bit and out of 2-bit ands

I No additional logic is needed!I Project 1 Part C and D

I Build a 4-bit priority selector out of only 2-bit priority selectors!I Build a 4-bit rotating priority selector out of only 2-bit rotating priority

selectors and a simple counter!

(University of Michigan) Lab 1: Verilog September 2/3, 2021 56 / 60

Page 57: EECS 470 Lab 1 - Verilog: Hardware Description Language

Project 1

Project 1 Hints

module and2(input [1:0] a,output logic x

);assign x=a[0] & a[1];

endmodule

module and4(input [3:0] in,output logic out

);logic [1:0] tmp;and2 left(.a(in[1:0]),.x(tmp[0]));and2 right(.a(in[3:2]),.x(tmp[1]));and2 top(.a(tmp),.x(out));

endmodule

(University of Michigan) Lab 1: Verilog September 2/3, 2021 57 / 60

Page 58: EECS 470 Lab 1 - Verilog: Hardware Description Language

Project 1

Project 1 Hints

and2

and2and2

xtmp[0]

a[0]

xtmp[1]

a[1]

a[1]

in[3]

a[0]

in[2]

a[1]

in[1]

a[0]

in[0]

x

out

and4

(University of Michigan) Lab 1: Verilog September 2/3, 2021 58 / 60

Page 59: EECS 470 Lab 1 - Verilog: Hardware Description Language

Lab Assignment

Lab Assignment

I Follow the tutorial, this is one of the most important documents inthis class. . .

I Assignment on the course website.I Submission: Place yourself on the help queue and we will check you

off when you feel comfortable you can demonstrate what is required

(University of Michigan) Lab 1: Verilog September 2/3, 2021 59 / 60

Page 60: EECS 470 Lab 1 - Verilog: Hardware Description Language

Lab Assignment

Useful Links

I Consider using VS Code with Remote SSH via Scott Smith’s helpfulguide

I Get comfortable using CAEN VNC if you canI Review the GTKwave Waveform Viewer tutorial should VNC be too

delayedI Read the Screen tutorial before synthesizing your projects.I Assignment on the course website.I Submission: Place yourself on the help queue and we will check you

off.

(University of Michigan) Lab 1: Verilog September 2/3, 2021 60 / 60