• Ingen resultater fundet

Components and Sequential Circuits

N/A
N/A
Info
Hent
Protected

Academic year: 2022

Del "Components and Sequential Circuits"

Copied!
66
0
0

Indlæser.... (se fuldtekst nu)

Hele teksten

(1)

Components and Sequential Circuits

Martin Schoeberl

Technical University of Denmark Embedded Systems Engineering

February 17, 2022

(2)

Overview

I Vending machine project

I Repeat combinational building blocks I Power user II

I Components and top-level I Sequential circuits

(3)

Admin

I Sadly still in quarantine:-(

I Where are you sitting today?

I How is the lab work going so far?

I Continue to organize yourself in groups of 2–3 I 1 is also OK

I You can ask for finding a group via slack (in channel general)

I Register atthis spreadsheet I Next week physical at B308-A012

I Guest lecture by Jens on timing

(4)

A Vending Machine from 1952

(5)

The Vending Machine

I Final project is a vending machine I Specification document will given

I Put into the public in chisel-lab I Inputs: coins, buy

I Display: price and current amount I Output: release can or error

I Small challenge to multiplex the display

I State machine with data path is thebrainof the VM I Guided step by step over several weeks

(6)

Vending Machine Specification I

I Sell 1 item and not returning any money I Set price with 5 switches (1–31 kr.)

I Display price on two 7-segment displays (hex.) I Accept 2 and 5 kr. (two push buttons)

I Display sum on two 7-segment displays (hex.) I Amount entered so far

I Does not return money, left for the next purchase

(7)

Vending Machine Specification II

I Push buttonBuy

I If not enough money, activatealarmas long as buy is pressed

I If enough money, activaterelease itemfor as long asbuyis pressed and reducesumby the price of the item

I Optional extras (for a 12) I Display decimal numbers

I Supplement alarm by some visuals (e.g., blinking display) I Count coins and display an alarm when compartment is full

(>20 coins)

I Have some text scrolling on the display I Supplement alarm with some audio I Talk to the user

I ...

I Your ideas :-)

(8)

Design and Implementation

I Implementation shall be a state machine plus datapath I Design your datapath on a sheet of paper

I Datapath

I Does add and subtract

I Contains a register to hold the sum I Needs some mulitplexer to operate I Display needs multiplexing

I Implemented with some counters and a multiplexer I Show each part of your design to a TA

I 7-segment decoder, 7-segment with a counter, display multiplexer, complete vending machine

(9)

Vending Machine Design and Implementation Steps

I We start in week 6

I Hexadecimal to 7-segment decoder I 7-segment display with a counter I Multiplexed Seven-Segment Display I Testing the Vending Machine I Complete Vending Machine I Show your working design to a TA

(10)

Final Report

I One report per group I A single PDF

I Your group number is part of the file name (e.g., group7.pdf) I Code as listing in an appendix (no .zip files)

I Hand in in DTU Learn I Content

I Abstract

I Preface (Who did what)

1. Introduction and Problem Formulation 2. Analysis and Design

3. Implementation 4. Testing

5. Results 6. Discussion 7. Conclusion

(11)

Questions on Final Project?

(12)

Combinational Circuit with Conditional Update

I Value first needs to be wrapped into aWire I Updates with the Chisel update operation:=

I Withwhenwe can express a conditional update I The condition is an expression with a Boolean result I The resulting circuit is a multiplexer

I The rule is that the last enabled assignment counts I Here the order of statements has a meaning

val enoughMoney = Wire ( Bool () ) enoughMoney := false.B

when ( coinSum >= price ) { enoughMoney := true.B

(13)

Comparison

I The usual operations (as in Java or C)

I Unusual equal and unequal operator symbols

I To keep the original Sala operators usable for references I Operands areUIntandSInt

I Operands can beBoolfor equal and unequal I Result isBool

>, >=, <, <=

=== , =/=

(14)

Boolean Logical Operations

I Operands and result areBool I Logical NOT, AND, and OR val notX = !x

val bothTrue = a && b val orVal = x || y

(15)

The “Else” Branch

I We can express a form of “else”

I Note the.in.otherwise

val w = Wire ( UInt () ) when ( cond ) {

w := 1. U } . otherwise {

w := 2. U }

(16)

A Chain of Conditions

I To test for different conditions I Select with a priority order

I The first expression that is true counts I The hardware is a chain of multiplexers

val w = Wire ( UInt () ) when ( cond ) {

w := 1. U

} . elsewhen ( cond2 ) { w := 2. U

} . otherwise { w := 3. U }

2

cond2

3

w

cond

1

(17)

Default Assignment

I Practical for complex expressions

I Forgetting to assign a value on all conditions I Would describe a latch

I Runtime error in Chisel

I Assign a default value is good practise

val w = WireDefault (0. U) when ( cond ) {

w := 3. U }

// ... and some more complex conditional assignments

(18)

Logic Can Be Expressed as a Table

I Sometimes more convenient I Still combinational logic (gates) I Is converted to Boolean expressions I Let the synthesize tool do the conversion!

I We use theswitchstatement switch ( sel ) {

is (" b00 ".U) { result := " b0001 ".U}

is (" b01 ".U) { result := " b0010 ".U}

is (" b10 ".U) { result := " b0100 ".U}

is (" b11 ".U) { result := " b1000 ".U}

}

(19)

A Decoder

a1

Decoder a0

b0 b1 b2 b3

I Converts a binary number ofnbits to anm-bit signal, wherem≤2n

I The output is one-hot encoded (exactly one bit is one) I Building block for am-way Mux

I Used for address decoding in a computer system I Maybe of use for the display multiplexer

(20)

Truth Table of a Decoder

a b

00 0001 01 0010 10 0100 11 1000

(21)

An Encoder

a1

Encoder a0

a2 a3

b0 b1

I Converts one-hot encoded signal I To binary representation

(22)

Truth Table of an Encoder

a b

0001 00 0010 01 0100 10 1000 11

???? ??

I Only defined for one-hot input

(23)

Encoder in Chisel

I We cannot describe a function with undefined outputs I We use a default assignment of"b00"

b := " b00 ".U switch (a) {

is (" b0001 ".U) { b := " b00 ".U}

is (" b0010 ".U) { b := " b01 ".U}

is (" b0100 ".U) { b := " b10 ".U}

is (" b1000 ".U) { b := " b11 ".U}

}

(24)

Power User II

I Every craftsmen starts with good-quality tools I “Tools amplify your talent”1

I The better your tools, the more productive you are I The better you know them, the more productive you are I IDEs (Eclipse, InelliJ) are nice, I love them too

I But we shall go beyond it I Use tools (and write your own)

I Help with: google, man pages, or even plain –help (or -h) I https://www.oreilly.com/learning/

ten-steps-to-linux-survival

I This is about command line tools, not just Linux

(25)

Power User II

I Use the command line, shell, terminal I In Windows: PowerShell

I You may want to install the Linux subsystem I Universal Unix commands (Windows, Mac, Linux) I Navigating the file system:

I Change directory:cd I Print working directory:pwd I Make a directory:mkdir abc I Create a file:echo test > abc.txt I Show file content:cat abc.txt I Remove a file:rm abc.txt I Run your Chisel code withsbt run

I You used the terminal already from within IntelliJ ;-)

(26)

Power User II

I We talked aboutgitlast week I To version your source

I Maybe hosting on GitHub

I Most teaching material is on GitHub I Usegit pullto update the lab material I Show how to use it, now!

I Clone a repo:git clone path I Get the newest version:git pull

I Further commands:git commit, push, log, status I Overview of changes: gitk

(27)

Structure With Bundles

I ABundleto group signals I Can be different types

I Defined by a class that extendsBundle I Named fields asvals within the block I Like a C struct or VHDL record class Channel() extends Bundle {

val data = UInt (32. W) val valid = Bool () }

(28)

Using a Bundle

I Create it withnew I Wrap it into aWire

I Field access withdotnotation val ch = Wire (new Channel () ) ch . data := 123. U

ch . valid := true.B val b = ch . valid

(29)

Write, Reg, and IO

I UInt,SInt, andBitsare Chisel types, not hardware I Wire,Reg, orIOgenerates hardware

I AWireis a combinational circuit I ARegis a register

I AIOis a connection (for a module)

I Can wrap any Chisel type, alsoBundleorVec I Give it a name by assigning it to aval

val number = Wire ( UInt () ) val reg = Reg ( SInt () )

(30)

Using = or :=

I Later assign or reassign a value or expression with:=

number := 10. U reg := value - 3. U

I Note the small difference between=and:=

I May be confusing to start with

I Use=whencreatinga hardware object to give it a name I Use:=when assigning or reassigning to anexisting

hardware object

(31)

Components/Modules

I Components/Modules are building blocks

I Component and module are two names for the same thing I Components have input and output ports (= pins)

I Organized as aBundle I Wrapped into anIO() I assigned to a fieldio

I We build circuits as a hierarchy of components I In Chisel a component is calledModule

I Components/Modules are used to organize the circuit I Similar to using methods in Java

(32)

Input/Output Ports

I Ports are theinterfaceto a module I Ports are bundles with directions I Ports used to connect modules class AluIO extends Bundle {

val function = Input ( UInt (2. W)) val inputA = Input ( UInt (4. W)) val inputB = Input ( UInt (4. W)) val result = Output ( UInt (4. W)) }

(33)

An Adder Module

I Aclassthatextends Module

I Interface (port) is aBundle, wrapped into anIO(), and stored in the fieldio

I Circuit description in the constructor class Adder extends Module {

val io = IO (new Bundle { val a = Input ( UInt (4. W)) val b = Input ( UInt (4. W))

val result = Output ( UInt (4. W)) })

val addVal = io .a + io .b io . result := addVal }

(34)

Connections

I Simple connections just with assignments, e.g., adder . io .a := ina

adder . io .b := inb

I Note the dot access to the fieldioand then the IO field

(35)

Module Usage

I Create withnewand wrap into aModule() I Interface port via theiofield

I Note the assignment operator:=oniofields val adder = Module (new Adder () )

adder . io .a := ina adder . io .b := inb

val result = adder . io . result

(36)

Example: Arithmetic Logic Unit

ALU Y

fn

B A

I Also called ALU

I A central component of a microprocessor I Two inputs, one function select, and an output I Part of thedatapath

(37)

Example: Arithmetic Logic Unit

class Alu extends Module { val io = IO (new Bundle {

val a = Input ( UInt (16. W)) val b = Input ( UInt (16. W)) val fn = Input ( UInt (2. W)) val y = Output ( UInt (16. W)) })

// some default value is needed io .y := 0. U

// The ALU selection switch ( io . fn ) {

is (0. U) { io .y := io .a + io .b } is (1. U) { io .y := io .a - io .b } is (2. U) { io .y := io .a | io .b } is (3. U) { io .y := io .a & io .b } }

}

(38)

Hierarchy of Components Example

CompA

CompB CompD

CompC

(39)

Components CompA and CompB

class CompA extends Module { val io = IO (new Bundle {

val a = Input ( UInt (8. W)) val b = Input ( UInt (8. W)) val x = Output ( UInt (8. W)) val y = Output ( UInt (8. W)) })

// function of A }

class CompB extends Module { val io = IO (new Bundle {

val in1 = Input ( UInt (8. W)) val in2 = Input ( UInt (8. W)) val out = Output ( UInt (8. W)) })

// function of B

(40)

Component CompC

class CompC extends Module { val io = IO (new Bundle {

val in_a = Input ( UInt (8. W)) val in_b = Input ( UInt (8. W)) val in_c = Input ( UInt (8. W)) val out_x = Output ( UInt (8. W)) val out_y = Output ( UInt (8. W)) })

// create components A and B val compA = Module (new CompA () ) val compB = Module (new CompB () ) // connect A

compA . io .a := io . in_a compA . io .b := io . in_b io . out_x := compA . io .x // connect B

(41)

Chisel Main

I Create one top-level Module

I Invoke the Chisel code emitter from the App I Pass the top module (e.g.,new Hello()) I Optional: pass some parameters (in anArray)

I Following code generates Verilog code forHello World object Hello extends App {

emitVerilog (new Hello () ) }

(42)

Hello World in Chisel

class Hello extends Module { val io = IO (new Bundle {

val led = Output ( UInt (1. W)) })

val CNT_MAX = (50000000 / 2 - 1) .U val cntReg = RegInit (0. U (32. W)) val blkReg = RegInit (0. U (1. W)) cntReg := cntReg + 1. U

when ( cntReg === CNT_MAX ) { cntReg := 0. U

blkReg := ˜ blkReg }

io . led := blkReg

(43)

Generated Verilog for Hello

I Hellois the top-level of our blinking LED I No real need to read this code

I But pin assignment for the synthsis I Additional pins: clockandreset I User pin names with a leadingio module Hello(

input clock, input reset, output io_led );

(44)

Generated Verilog for Hello

I We can find our two register definitions

I @... gives Chisel source and line number (e.g., 17) reg [31:0] cntReg; // @[Hello.scala 17:23]

reg [31:0] _RAND_0;

reg blkReg; // @[Hello.scala 18:23]

(45)

Generated Verilog for Hello

I The increment and comparison against maximum value assign _T_1 = cntReg + 32’h1; // @[Hello.scala 20:20]

assign _T_2 = cntReg == 32’h2faf07f; // @[Hello.scala 21:15]

assign _T_3 = ˜ blkReg; // @[Hello.scala 23:15]

assign io_led = blkReg; // @[Hello.scala 25:10]

(46)

Generated Verilog for Hello

I Verilog register code

always @(posedge clock) begin if (reset) begin

cntReg <= 32’h0;

end else if (_T_2) begin cntReg <= 32’h0;

end else begin cntReg <= _T_1;

end end

(47)

Verilog Generation Summary

I Verilog is generated for synthesis I We do not need to read it

I Just pins are interesting I Additional clock and reset I Pin names with additionalio

(48)

File Organization in Scala/Chisel

I A Scala file can contain several classes (and objects) I For large classes use one file per class with the class name I Scala has packages, like Java

I Use folders with the package names for file organization I sbtlooks into current folder andsrc/main/scala/

I Tests shall be insrc/test/scala/

(49)

File Organization in Scala/Chisel

project src

main scala

package

sub-package test

scala package target

generated

(50)

What is a Minimal Chisel Project?

I Scala class (e.g.,Hello.scala) I Build info inbuild.sbtforsbt:

scalaVersion := " 2.12.13 "

scalacOptions ++= Seq (

" - feature ",

" - language : reflectiveCalls ", )

resolvers ++= Seq (

Resolver . sonatypeRepo (" releases ") )

(51)

Minimal Chisel Project Cont.

// Chisel 3.5

addCompilerPlugin (" edu . berkeley . cs " %

" chisel3 - plugin " % " 3.5.0 " cross CrossVersion . full )

libraryDependencies += " edu . berkeley . cs " %%

" chisel3 " % " 3.5.0 "

libraryDependencies += " edu . berkeley . cs " %%

" chiseltest " % " 0.5.0 "

(52)

Show It

I The absolute minimum is two files I build.sbt

I A single.scalafile

(53)

Sequential Building Blocks

I Contain a register

I Plus combinational circuits

D Q

clock

val q = RegNext (d)

(54)

Register With Reset

D Q init

reset

data

val valReg = RegInit (0. U (4. W)) valReg := inVal

(55)

Timing Diagram of the Register with Reset

clock reset

inVal 3 5 2 7 4

regVal 0 5 2 7

A B C D E F

I Also called waveform diagram I Logic function over time

I Can be used to describe a circuit function I Useful for debugging

(56)

Register with Enable

D Q

enable

data

I Only whenenabletrue is a value is stored val enableReg = Reg ( UInt (4. W))

when ( enable ) {

(57)

A Register with Reset and Enable

I We can combine initialization and enable

val resetEnableReg = RegInit (0. U (4. W)) when ( enable ) {

resetEnableReg := inVal }

I A register can also be part of an expression I What does the following circuit do?

val risingEdge = din & ! RegNext ( din )

(58)

A Register with an Adder is a Counter

+ D Q 1

I Is a free running counter I 0, 1, ... 14, 15, 0, 1, ...

val cntReg = RegInit (0. U (4. W)) cntReg := cntReg + 1. U

(59)

A Counter with a Mux

val cntReg = RegInit (0. U (8. W))

cntReg := Mux ( cntReg === 9.U , 0.U , cntReg + 1. U) I This counter counts from 0 to 9

I And starts from 0 again after reaching 9

I Starting from 0 is common in computer engineering I A counter is the hardware version of afor loop I Often needed

(60)

Counting Events

D Q +

1

event

val cntEventsReg = RegInit (0. U (4. W)) when ( event ) {

cntEventsReg := cntEventsReg + 1. U

(61)

Counting Up and Down

I Up:

val cntReg = RegInit (0. U (8. W)) cntReg := cntReg + 1. U

when ( cntReg === N) { cntReg := 0. U }

I Down:

val cntReg = RegInit (N) cntReg := cntReg - 1. U when ( cntReg === 0. U) {

cntReg := N }

(62)

Common Acronyms

ADC analog-to-digital converter ALU arithmetic and logic unit

ASIC application-specific integrated circuit

Chisel constructing hardware in a Scala embedded language

CISC complex instruction set computer CRC cyclic redundancy check

DAC digital-to-analog converter DFF D flip-flop, data flip-flop DMA direct memory access

DRAM dynamic random access memory FF flip-flop

(63)

Common Acronyms II

FIFO first-in, first-out

FPGA field-programmable gate array HDL hardware description language HLS high-level synthesis

IC instruction count

IDE integrated development environment IO input/output

ISA instruction set architecture JDK Java development kit

JIT just-Iin-time

JVM Java virtual machine LC logic cell

(64)

Common Acronyms III

LRU least-recently used MMIO memory-mapped IO

MUX multiplexer OO object oriented

RISC reduced instruction set computer SDRAM synchronous DRAM

SRAM static random access memory TOS top-of stack

UART universal asynchronous receiver/transmitter VHDL VHSIC hardware description language VHSIC very high speed integrated circuit

(65)

Lab Today

I Components and Small Sequential Circuits I Lab 3 Page

I Each exercise contains a test, which initially fails I sbt testruns them all

I To just run a single test, run e.g., sbt "testOnly SingleTest"

When all tests succeed your are done ;-) I Except: additional some drawing exercise

(66)

Summary

I Vending machine is your final project

I The vending machine and the report are part of your grade I A digital circuit is organized in components

I Components have ports with directions

I Sequential circuits are combinations of registers with combinational circuits

Referencer

RELATEREDE DOKUMENTER

Indtil 1768 og sandsynligvis længere har alle kaptajnerne sejlet med helt identiske instruxer, men naturligvis lidt forskellige efter som man skulle via Indien eller direkte til K

- Hvis alt det, du gjorde, og alt det, der skete i dit arbejde med skulpturen, har noget med det spørgsmål, du formulerede i starten af sessionen at gøre - hvad kunne det så være.. -

Opsiger et medlem sin stilling og fratræder, efter at konflikten er gået gang men før den er afsluttet, kan medlemmet ikke få dagpenge fra a-kassen, mens konflikten varer..

Skal du påbegynde orlov efter konfliktens start er du ikke berettiget til løn fra arbejdsgiveren, men alene til barselsdagpenge fra Udbetaling Danmark fra 4 uger før fødslen og

Skal du påbegynde orlov efter konfliktens start er du ikke berettiget til løn fra arbejdsgiveren, men alene til barselsdagpenge fra Udbetaling Danmark fra 4 uger før fødslen og

Som det fremgår af tabel 1, oplevede forældrene indenfor alle 7 fokusområder, gene- relt at råde over flere metoder og kompetencer samt at være mere tilfredse med deres metoder

Den anden vigtige årsag til udstillingernes succes hos anmelderne er, at (i hvert fald den ene halvdel af) kunstnerne tager tyren ved hornene og konfronterer de barske

For example, a new, generated elevation model (test file) may be compared to an existing model (reference file), and in case there is a difference in elevations greater than the