• No results found

Copyright Bengt Oelmann

N/A
N/A
Protected

Academic year: 2021

Share "Copyright Bengt Oelmann "

Copied!
11
0
0

Loading.... (view fulltext now)

Full text

(1)

Copyright Bengt Oelmann

2002 1

Konstruktion av sekventiell logik

Š Innehåll

„ Timing i synkrona system

„ Synkrona processer i VHDL

„ VHDL-kod som introducerar latchar och vippor

„ Initiering av minneselement

„ Mealy- och Moore-maskiner i VHDL

„ Byggblock: räknare, register, RAM/ROM

Timing i synkrona system

Š Generell modell för synkront system

Kombinatorisk logik

Q1 D2 Q2

C

t

C-Q

t

C-Q

t

LOGIK

t

SETUP

t

MARGINAL

C

Q1

D2

t

LOGIK

t

SETUP

En klockcykel är summan av alla fördröjningar:

MARGINAL SETUP

LOGIK Q

C

t t t

t

T =

+ + +

Då vi inte har någon timing-marginal så klockas system på maximal klockfrekvens:

SETUP LOGIK Q

C

t t

t f T

+

= +

=

1 1

min max

t

C-Q

och t

SETUP

är

fördröjningar i vippan

(2)

Copyright Bengt Oelmann 2002 3

Synkrona processer i VHDL

Š Synkrona processer

„ Kallas även för klockade processer

„ Alla aktiveras samtidigt, på t.ex positiv klockflank

„ Signal- och variabeltilldelningar i processen resulterar i D-vippor

ingångar utgångar

clock

Behåller det gamla värdet

Läser in det nya värdet i vippan

clk’event and clk=’1’

clk

clk’event

Exempel: positivt flanktriggad D-vippa i VHDL

library ieee;

use ieee.std_logic_1164.ALL

entity dff IS

port (d, clk : in std_logic;

q : out std_logic);

end dff;

architecture behavior of dff is begin

process(clk) begin

if (clk’event and clk = ’1’) then q <= d;

else q <= q;

end if;

end process;

end behavior;

clk

d q

dff

(3)

Copyright Bengt Oelmann 2002 5

Fler exempel på vippor

architecture dataflow of pos_dff is

q <= d when (clk’event and clk=’1’) else q;

D Q

architecture dataflow of neg_dff is

q <= d when (clk’event and clk=’0’) else q;

D Q

Exempel på D-latch

architecture dataflow of dlatch is q <= d when (clk = ’1’) else q;

D Q

(4)

Copyright Bengt Oelmann 2002 7 Signal- och variabeltilldelningar leder till införande av register

Exempel: Kod som inför vippor i konstruktionen

Skriv en funktion som tar in ett 8-bitars tal i ett register om det är större än 10.

Om det är mindre än 10 ska registret innehålla 10.

entity load_ge_10 is port (

clk : in std_logic;

d : in std_logic_vector (7 downto 0);

q : out std_logic_vector (7 downto 0));

end load_ge_10;

architecture rtl of load_ge_10 is begin

process (clk) begin

if (clk'event and clk = '1') then if d > 10 then

q <= d;

else

q <= conv_std_logic_vector(10,8);

end if;

end if;

end process;

end rtl;

10

10 d

q 2:1 MUX

clk

0

1

d>10

Initiering av vippor

Š Initiering av vippor behövs efter systemstart

Š Två typer av initiering

„ Synkron reset/preset

„ Asynkron reset/preset

Š Exempel: synkron reset

if (clk’event and clk = ’1’) then if reset = ’1’ then q <= ’0’;

else q <= d;

end if;

end if;

D Q

reset

(5)

Copyright Bengt Oelmann 2002 9

forts. initiering av vippor

Š Exempel: Asynkron reset

Š Exempel: Asynkron preset

process (clk, preset) begin

if preset = ’1’ then q <= ’1’;

elsif (clk’event and clk = ’1’) then q <= d;

end if;

end process;

D Q

preset

process (clk, reset)

begin

if reset = ’1’ then q <= ’0’;

elsif (clk’event and clk = ’1’) then q <= d;

end if;

end process;

D Q

reset

Konstruktion av tillståndsmaskiner

Š Syntesprocedur för manuell syntes:

Ta fram tillståndsgraf för det givna problemet Ta fram tillståndsgraf för det givna problemet

Ta fram tillståndstabell Ta fram tillståndstabell

Gör tillståndskodning Gör tillståndskodning

Ta fram transitionsgraf Ta fram transitionsgraf

Välj vippa (D-, T-, JK- … vippa) Välj vippa (D-, T-, JK- … vippa)

Ta fram excitationsgraf Ta fram excitationsgraf

Ta fram och minimera logiska funktioner för

λ

och δ

Ta fram och minimera logiska funktioner för

λ

och δ

Ta fram grindnät

Ta fram grindnät

(6)

Copyright Bengt Oelmann 2002 11

Konstruktion av tillståndsmaskiner

Š Syntesprocedur för automatisk syntes

Ta fram tillståndsgraf för det givna problemet Ta fram tillståndsgraf för det givna problemet

Skriv VHDL-kod som motsvarar tillståndsgrafen Skriv VHDL-kod som motsvarar

tillståndsgrafen

Låt syntesverktyget göra tillståndskodning och syntes till grindnät Låt syntesverktyget göra tillståndskodning

och syntes till grindnät

Exempel på tillståndsmaskin i VHDL

architecture rtl of fsm_simple is type state_type is (start, r1, r2);

signal state : state_type;

begin -- rtl

update_state : process (clk, reset) begin -- process fsm

if reset = '0' then state <= start;

elsif clk'event and clk = '1' then case state is

when start => if A = '0' then state <= start; else state <= r1; end if;

when r1 => if A = '0' then state <= r1; else state <= r2; end if;

when r2 => if A = '0' then state <= r2; else state <= start; end if;

end case;

end if;

end process update_state;

output_logic : process(state) begin

case state is

when start => z <= '0';

when r1 => z <= '1';

when r2 => z <= '0';

end case;

end process output_logic;

end rtl;

r2

z=0 start z=0

r1 z=1 A=0

A=1

A=1 A=0

A=0

A=0

(7)

Copyright Bengt Oelmann 2002 13

Mealy typ i VHDL

architecture mealy of fsm2 is type state is (S1, S2, S3, S4);

signal present_state, next_state: state;

begin

process (aIn, present_state) begin CASE present_state IS

when s1 => if (aIn = ’1’)

then yOut <= ’0’; next_state <= s4;

else yOut <= ’1’; next_state <= s3;

end if;

when s2 => yOut <= ’1’; next_state <= s3;

when s3 => yOut <= ’1’; next_state <= s1;

when s4 => if (aIn = ’1’)

then yOut <= ’1’; next_state <= s2;

else yOut <= ’0’; next_state <= s1;

end if;

end case;

end process;

process begin

wail until clk = ’1’;

present_state <= next_state;

end process;

end mealy;

S1 S4

S3 S2

aIn=1/yOut=1

aIn=-/yOut=1 aIn=0/yOut=0

aIn=1/yOut=0

aIn=0/

yOut=1 aIn=-/

yOut=1

aIn yOut

next_state present_state

Moore typ i VHDL

library ieee; use ieee.std_logic_1164.all;

entity fsm1 is

port (aIn, clk: in std_logic; yOut: out std_logic);

end fsm1;

architecture moore of fsm1 is type state is (s1, s2, s3, s4);

signal present_state, next_state: state;

begin

process (aIn, present_state) begin case present_state is

when s1 => yOut <= ’0’;

if (aIn = ’1’) then next_state <= s1 else next_state <= s2;

when s2 => yOut <= ’0’; next_state <= s3;

when s3 => yOut <= ’1’; next_state <= s4;

when s4 => yOut <= ’1’; next_state <= s1;

end case;

end process;

process begin

wait until clk = ’1’;

present_state <= next_state;

end process;

end moore;

S1 S2

S4 S3

yOut=0 aIn=0

yOut=0

yOut=1 yOut=1

aIn=0

aIn=0 aIn=0 aIn=1

(8)

Copyright Bengt Oelmann 2002 15

Räknare i VHDL

library ieee;

use ieee.std_logic_1164.ALL;

use work.numeric_std.ALL;

entity modulo8 IS PORT(clk: in std_logic;

cnt: buffer unsigned (7 downto 0));

END count8;

architecture rtl of count8 is begin

process (clk) begin

if rising_edge(clk) then cnt <= cnt +1;

end if end process;

end rtl;

Š Modulo-8 räknare

Skiftregister i VHDL

entity shift_r is port (

clk, resetn, d_in, shift_en : in std_logic;

shift_out : out std_logic_vector(3 downto 0));

end shift_r;

architecture rtl of shift_r is

signal shift_reg: std_logic_vector(3 downto 0);

begin

process (clk, resetn) begin

if resetn = '0' then shift_reg <= (others=>'0');

elsif clk'event and clk = '1' then if shift_en='1' then

shift_reg(3 downto 1) <= shift_reg(2 downto 0);

-- shift_reg <= shl(shift_reg, "1");

-- shift_reg <= shift_reg sll 1;

shift_reg(0) <= d_in;

end if;

f;

end process;

shift_out <= shift_reg;

end rtl;

d_in shift_out shift_en resetn

Alternativa skrivsätt

(9)

Copyright Bengt Oelmann 2002 17

Minnen i VHDL

Š Ett RAM eller ROM kan skapas på två sätt

„ Man använder en array med konstanter

„ Man instansierar en färdig minnesmodul

Exempel på 4 × 8 ROM i VHDL

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity ROM is

port (

address : in std_logic_vector(1 downto 0);

dout : out std_logic_vector(7 downto 0));

end ROM;

architecture rtl of ROM is

type rom_table is array (0 to 3) of std_logic_vector(7 downto 0);

constant rom_contents : rom_table := rom_table'("00101111",

"11010000",

"01101010",

"11101101");

begin -- rtl

dout <= rom_contents(conv_integer(address));

end rtl;

(10)

Copyright Bengt Oelmann 2002 19 Definiera färdig RAM module från ett bibliotek

Exempel #1: RAM i VHDL

architecture rtl of rmodul is

component RAM4_8 port (

din: in std_logic_vector(7 downto 0), address0, address1, we : in std_logic;

dout : out std_logic_vector(7 downto 0);

end component;

begin -- rtl ram1:

RAM4_8 port map ( din => d, address0 => a0, address1 => a1, we => we, dout => q) end rtl;

din dout

address0

address1 we

RAM4_8 din

a0

a1 we

q

Definiera en minnesmatris

Exempel #2: RAM i VHDL

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity ram32_16 is port (

addr : in std_logic_vector(4 downto 0);

clk, we_n : in std_logic;

din : in std_logic_vector(15 downto 0);

dout : out std_logic_vector(15 downto 0));

end ram32_16;

architecture rtl of ram32_16 is

type ram_type is array (31 downto 0) of std_logic_vector(15 downto 0);

signal ram_array : ram_type;

begin process(clk) begin

if clk'event and clk='1' then if we_n='0' then

ram_array(conv_integer(addr)) <= din;

end if;

end if;

end process;

dout <= ram_array(conv_integer(addr));

end rtl;

din dout

addr we_n

RAM32_16

(11)

Copyright Bengt Oelmann 2002 21

SLUT på Föreläsning 5

Š Innehåll

„ Timing i synkrona system

„ Synkrona processer i VHDL

„ VHDL-kod som introducerar latchar och vippor

„ Initiering av minneselement

„ Mealy- och Moore-maskiner i VHDL

„ Byggblock: räknare, register, RAM/ROM

References

Related documents

Privatization of government owned banks in Pakistan was the main reason behind the overcome of weak banking sector and as part of this policy, for the very first time in 1991,

Dimensionera en 4-ingångars nand-grind för symmetriskt omslag, samt bestäm den totala switchande kapacitansen i grinden och jämför med en motsvarande grind i min.. transistorerna

Bestäm antalet segment en ledare med resistans R int och kapacitansen C int ska ha då den ska drivas med drivare som sätts in med jämna mellanrum längs ledaren (repeaters) så att

The goal of this project is to develop techniques and methods for floating-gate circuits that allow the same degree of design automation as digital standard-cell design does

The logic delay for this is not dependent on the input buffer size which makes it possible to detect an arbitrarily large number of code- word lengths at a constant speed.. The

Signalen kan gå i båda riktningarna, antingen in eller ut - signalens värde kan läsas av komponenten.. -Signalen kan också drivas av

Funktion: Varje gång signalen x ändrar värde ska värdet x+10 tilldelas z. Ö2.2 Skriv VHDL-kod, entity och arkitektur till

• Uträkningarna skall vara tillräckligt fullständiga för att visa hur slutresultatet erhållits.. • Approximationer ska motiveras och