Top Banner
IN2305-II Embedded Programming Lecture 2: Digital Logic
22

IN2305-II Embedded Programming

Jan 02, 2016

Download

Documents

garrison-burke

IN2305-II Embedded Programming. Lecture 2: Digital Logic. Main Subjects. Combinational logic: no memory (state) Sequential logic: state (clocked) VHDL implementation issues How to model / synthesize digital circuits. VHDL in a Nutshell. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: IN2305-II Embedded Programming

IN2305-IIEmbedded Programming

Lecture 2:Digital Logic

Page 2: IN2305-II Embedded Programming

in2305-II: L2 2

Main Subjects

Combinational logic: no memory (state)Sequential logic: state (clocked)VHDL implementation issuesHow to model / synthesize digital circuits

Page 3: IN2305-II Embedded Programming

in2305-II: L2 3

VHDL in a Nutshell

y <= x or c;c <= a and b;z <= y when p else not y when not p;process (s) begin a <= not s; end process; -- a <= not s;

concurrent execution model: everything executes in parallel (data flow)

behavioral versus structural specification: structural = composition (“wiring”)

sequential behavior (state):

z <= y when p; -- no else => latchprocess (clk) begin y <= x; -- sample x when clk changes -> latch if clk = ‘1’ then q <= d; -- d-ff (pos edge-trig)end process;

note: within process: sequential execution model

Page 4: IN2305-II Embedded Programming

in2305-II: L2 4

Combinational Logic

y <= a and b;ab

y

ab

y

a y

y <= a or b;

y <= not a;

Essence of combinatorics: process triggered by the input events(y assignment is synchronous with a and b signal changes)

Page 5: IN2305-II Embedded Programming

in2305-II: L2 5

Example Combinational Blocks

with a select -- enc y <= “00” when “0001”, “01” when “0010”, “10” when “0100”, “11” when “1000”;

ad

ydec

24

a yenc4 2

with a select -- dec z <= “0001” when “00”, “0010” when “01”, “0100” when “10”, “1000” when “11”;y <= z when d = ‘1’ else “0000”;

Page 6: IN2305-II Embedded Programming

in2305-II: L2 6

Example Combinational Blocks

ab

ymux

with s select -- mux y <= a when ‘0’, b when ‘1’;

s

a

b

8

8

op

8y

with op select -- alu y <= a + b when ‘00’, a and b when ‘01’, ...

Page 7: IN2305-II Embedded Programming

in2305-II: L2 7

Sequential Logic

process (clk) -- d-ffbegin if rising_edge(clk) then q <= d; end if;end process;

d

Essence of state: assignment is NOT triggered by input eventsbut by an auxiliary signal (usually called a clock)

q

clk

process (d) -- bufferbegin q <= d; -- only sensitive to d => combinational!end process;

dff

Page 8: IN2305-II Embedded Programming

in2305-II: L2 8

Comb. + Sequential: FSM

process -- fsmbegin wait until rising_edge(clk); case s is when 0x”00” => if (x = ‘1’) then s <= 0x”01”; end if; y <= ‘1’; when 0x”01” => .. .. end case;end process;

s

clk

dff

cmb

Mealy FSM: y = f(s,x) Moore FSM: y = f(s)

x y

Page 9: IN2305-II Embedded Programming

in2305-II: L2 9

Example Sequential Blocks (1)

yram

process -- rambegin wait until rising_edge(clk); if (we = ‘1’) then mem(a) <= d; end if; y <= mem(a);end process;

clk

da

we

Page 10: IN2305-II Embedded Programming

in2305-II: L2 10

Example Sequential Blocks (2)

yctr

process -- counterbegin wait until rising_edge(clk); if (rst = ‘1’) then c <= (others => ‘0’); else c <= c + 1; end if; y <= c;end process;

clk

rst

Page 11: IN2305-II Embedded Programming

in2305-II: L2 11

Tri-state Logic: Busses

ay

oe_a

b

oe_b

y <= a when oe_a = ‘1’ else ‘Z’;

y <= b when oe_b = ‘1’ else ‘Z’;

More efficient than mux for n-bit data paths

dec

Page 12: IN2305-II Embedded Programming

in2305-II: L2 12

Simple Processor (Delta)

r0 r1

pc

alu

..

decrom

a

rn...

data bus

Page 13: IN2305-II Embedded Programming

in2305-II: L2 13

VHDL Implementation IssuesStructural synthesis

entities reg, tristate-buf, rom, enc, alu, connected by bus each entity behavioral example: Delta-1 source code

Behavioral synthesis entities cpu, rom cpu entirely behavioral example: X32 source code pro: simple, understandable code, virtually no HW design con: more burden on synthesizer, less efficient HW (space),

potentially larger critical path which may lead to slower freq.

Trade-off depends on appl. and available resources

Page 14: IN2305-II Embedded Programming

in2305-II: L2 14

Behavioral Approachprocess -- delta cpu (behavioral)begin wait until rising_edge(clk); .. case op is when .. => pc <= op(..); -- jp .. when .. => r(a) <= acc; -- st r.. when .. => acc <= acc + op(..); -- add #.. when .. => acc <= acc and r(a); -- and r.. when .. => if (zero = ‘1’) then -- bz .. pc <= op(..); end if; end case; if (-- not jp/bz/bc/..) then pc <= pc + 1;end process;

Page 15: IN2305-II Embedded Programming

in2305-II: L2 15

Button Debouncer

Vcc

GND

x:x

y:

time

x’

10

x

2

t’t,x

t,x’

x

x’

0: output’, timer enable’1: output, timer enable2: output, timer enable’

tmre t

clk

Page 16: IN2305-II Embedded Programming

in2305-II: L2 16

Debouncer Code (1)process -- fsm (behavioral)begin wait until rising_edge(clk); case s is when “00” => if (x = ‘1’) then s <= ”01”; end if; when ”01” => if (t = ‘1’) then s <= “00” when (x = ‘0’) else “10” when (x = ‘1’); end if; when “10” => if (x = ‘0’) then s <= “00”; end if; end case; output <= ‘0’ when (s = “00”) else ‘1’; timer_enable <= ‘1’ when (s = “01”) else ‘0’;end process;

Page 17: IN2305-II Embedded Programming

in2305-II: L2 17

Debouncer Code (2)process -- timer (behavioral)begin wait until rising_edge(clk); if (timer_enable = ‘0’) then counter <= (others => ‘0’); t <= ‘0’; else if (counter < THRESHOLD) then counter <= counter + 1; else t <= ‘1’; end if; end if;end process;

Page 18: IN2305-II Embedded Programming

in2305-II: L2 18

Demo using FPGA boardFPGAs are a flexible, low-cost “bread-board” to experiment with HW using SW (VHDL) instead of ICs and wiresXilinx Board:

Cheap: $99

Page 19: IN2305-II Embedded Programming

in2305-II: L2 19

Demo

Demo ..

(vhdl_projects.tgz, debouncer)

Page 20: IN2305-II Embedded Programming

in2305-II: L2 20

Autorepeat

input:

output:

time

i’

/o/o’

i/o’

t1’.i

t1.i t2.i

t2’.i

i’

t1 t2

t2’.i

t2.i /o

i’

t2

i’

clk

t2

Page 21: IN2305-II Embedded Programming

in2305-II: L2 21

Autorepeat Codeprocess -- fsm, using counter is more simplebegin wait until rising_edge(clk); case s is when “00” => if i = ‘1’ then c <= ..; s <= ”01”; end if; when ”01” => if i = ‘0’ then s <= “00”; end if; c <= c + 1; if c > .. then c <= ..; s <= “10”; end if; when “10” => if i = ‘0’ then s <= “00”; end if; c <= c + 1; if c > .. then c <= ..; s <= “11”; end if; when “11” => if i = ‘0’ then s <= “00”; end if; c <= c + 1; if c > .. then c <= ..; s <= “10”; end if; end case; output <= ‘1’ when s = “01” and s = “11” else ‘0’;end process;

Page 22: IN2305-II Embedded Programming

in2305-II: L2 22

Demo

Demo ..

(vhdl_projects.tgz, reaction timer)