You are on page 1of 20

Técnicas

Técnicas de
de Síntese
Síntese Lógica
Lógica

• Síntese Sequencial
• (Geração de Macros)
• Optimização Lógica Multinível
• Mapeamento Tecnológico

IST – Março 2003 Horácio Neto


A:
A: Síntese
Síntese Sequencial
Sequencial

IST – Março 2003 Horácio Neto


Arquitectura
Arquitectura

RegistoA RegistoB RegistoC


Clk

Sel2
Lógica Sel1
Saídas
Entradas

Lógica
Estado *
Seguinte

Reset RegEstado En
Clk
Clk RegistoRES

IST – Março 2003 Horácio Neto


Controlador
Controlador -- Máq.
Máq. Moore
Moore
Reset outras

INI
Sel=XX
En=0
Botoes = 100 001
010

AB BC AC

Sel=00 Sel=11 Sel=01


En=1 En=1 En=1 000

sempre
sempre
sempre
FIM

Sel=XX
En=0
outras

IST – Março 2003 Horácio Neto


Máq.
Máq. Mealy
Mealy equivalente
equivalente
Reset Outras / XX0
Porque não
funciona?
INI

100 / 001 010 / 111 001 / 011 Lógica


Saídas

OPER

Entradas
000 / XX0 Lógica
Estado
XXX / XX0 Seguinte

Reset RegEstado
FIM Clk

Outras / XX0

IST – Março 2003 Horácio Neto


Sincronização
Sincronização da
da Máq.
Máq. Mealy
Mealy (1)
(1)

clk
Entrada E
Lógica Saída S
Saídas
Estado

E clk
Reg E' E
Lógica S E'
Reg
S'
Saídas S
Estado
S'

IST – Março 2003 Horácio Neto


Sincronização
Sincronização da
da Máq.
Máq. Mealy
Mealy (2)
(2)

E clk
Lógica S E
Saídas Reg S' S
Estado S'

E clk
Reg E'
Lógica S E
Saídas E'
Estado S

IST – Março 2003 Horácio Neto


Máq.
Máq. Mealy
Mealy sincronizada
sincronizada equivalente
equivalente
Reset Outras / XX0

INI

Lógica
100 / 001 010 / 111 001 / 011 Saídas
Reg

Entradas
OPER Lógica
Estado
Seguinte

XXX / XX0
Reset RegEstado
Clk

FIM
000 / XX0

Outras / XX0

IST – Março 2003 Horácio Neto


Codificação
Codificação de
de Estados
Estados

Problema modelado por grafo


• nós <=> estados
• peso de cada arco = medida da proximidade
desejada entre os pares
Pesquisa Actual
• ênfase na minimização de potência

IST – Março 2003 Horácio Neto


Influência
Influência da
da Codificação
Codificação

IST – Março 2003 Horácio Neto


Algoritmos
Algoritmos de
de Codificação
Codificação

Synthesis->Properties

IST – Março 2003 Horácio Neto


Atributos
Atributos de
de Codificação
Codificação

VHDL

attribute fsm_encoding: string;

attribute fsm_encoding of entidade_fsm: entity is “compact”;


-- dentro da definição de entidade

attribute fsm_encoding of estado_actual: signal is “user”;


-- dentro da definição de arquitectura

IST – Março 2003 Horácio Neto


Opções
Opções Principais
Principais “Automáticas”
“Automáticas”

• One-Hot ← valor de defeito


The "One-Hot" encoding option will ensure that an individual
state register is dedicated to one state. Only one flip-flop is active,
or hot, at any one time. One-hot encoding is very appropriate with
most FPGA targets where a large number of flip-flops are
available. It is also a good alternative when trying to optimize
speed or to reduce power dissipation.
Alerta: Inicialização / “Lock-Out”
• Compact
The "Compact" encoding option will minimize the number of
state variables and flip-flops. This technique is based on
hypercube immersion. Compact encoding is appropriate when
trying to optimize area.

IST – Março 2003 Horácio Neto


Codificação
Codificação definida
definida pelo
pelo utilizador
utilizador

-- codificacao binaria
type STATE_TYPE is (S1, S2, S3, S4);

attribute ENUM_ENCODING: STRING;


attribute ENUM_ENCODING of STATE_TYPE: type is "00 01 10 11";

-- codificacao one-hot
type STATE_TYPE is (S1, S2, S3, S4);

attribute ENUM_ENCODING: STRING;


attribute ENUM_ENCODING of STATE_TYPE: type is "0001 0010 0100 1000";

IST – Março 2003 Horácio Neto


Modelo
Modelo genérico
genérico
Definição do tipo como array
Requer modo “user”

1 TYPE STATE_TYPE IS (S1, S2, S3, S4) ;


TYPE STATE_TYPE IS ARRAY (1 downto 0) OF bit ;
constant S1 : STATE_TYPE := “00” ;
2
constant S2 : STATE_TYPE := “01” ;
constant S3 : STATE_TYPE := “11” ;
constant S4 : STATE_TYPE := “10” ;
TYPE STATE_TYPE IS ARRAY (3 downto 0) OF bit ;
3
constant S1 : STATE_TYPE := “0001” ;
constant S2 : STATE_TYPE := “0010” ;
constant S3 : STATE_TYPE := “0100” ;
constant S4 : STATE_TYPE := “1000” ;
IST – Março 2003 Horácio Neto
Definição
Definição da
da FSM
FSM por
por CASE
CASE

...
CASE estado_actual IS
WHEN S1 => estado_seguinte <= S2 ;
...
-- requer “others” se não é enum!
WHEN others => estado_seguinte <= "XX" ;
END CASE;
...

IST – Março 2003 Horácio Neto


Bloco
Bloco Combinatório
Combinatório como
como ROM
ROM

ROM

Saídas
Entradas
Lógica
Estado
Seguinte
+
Saídas

Reset RegEstado
Clk

IST – Março 2003 Horácio Neto


Bloco
Bloco Combinatório
Combinatório como
como ROM
ROM (1)
(1)

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity romfsm is
port (entradas : in std_logic_vector(2 downto 0);
clk, reset : in std_logic;
saidas : out std_logic_vector(1 downto 0));
end romfsm;

IST – Março 2003 Horácio Neto


Bloco
Bloco Combinatório
Combinatório como
como ROM
ROM (2)
(2)

architecture syn of romfsm is


type rom_type is array (31 downto 0) of std_logic_vector (3 downto 0);

constant ROM : rom_type :=


("0010", "1100", "1011", "1011", "1011", "1011", "1011", "1011",
"1011", "1011", "1011", "1011", "1011", "1011", "1011", "1011",
"1011", "1011", "1011", "1011", "1011", "1011", "1011", "1011",
"1011", "1011", "1011", "1011", "1011", "1011", "1011", "0001");

signal rom_in : std_logic_vector (4 downto 0);


signal rom_out : std_logic_vector (3 downto 0);
signal estado_actual, estado_seguinte : std_logic_vector (1 downto 0);

IST – Março 2003 Horácio Neto


Bloco
Bloco Combinatório
Combinatório como
como ROM
ROM (3)
(3)
begin
rom_out <= ROM(conv_integer(rom_in));
rom_in <= entradas & estado_actual;
saidas <= rom_out(1 downto 0);
estado_seguinte <= rom_out(3 downto 2);

SYNC_PROC: process (CLK, RESET)


begin
if (reset = '1') then
estado_actual <= "00";
elsif (CLK'event and CLK = '1') then
estado_actual <= estado_seguinte;
end if;
end process;
end syn;
IST – Março 2003 Horácio Neto

You might also like