Projetando Sistemas
Digitais com SystemVerilog
Edna Barros
Grupo de Engenharia da Computação
Centro de Informática -UFPE
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Especificação

Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Diagrama
de
Gajski
Definindo Entidades

Definição das portas do circuito
• A definição dos terminais de um módulo é feita da
seguinte forma.
module teste (
input logic A,B,
input C,
output logic S1,
output logic S2
);
endmodule
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
3
Definindo Entidades

Exemplo: no código abaixo está descrito um
somador de 1 bit
module somador1Bit ( input A, B, output Soma, Carry);
always_comb Soma <= A ^ B; //A xor B
always_comb Carry <= A & B; //A and B
endmodule
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
4
Principais Tipos

Para valores inteiros, SystemVerilog possui
uma boa diversidade de definições.
• Os bits dos tipos abaixo podem assumir apenas
valores zero ou um.
– shortint: inteiro sinalizado de 16 bits.
– int: inteiro sinalizado de 32 bits.
– longint: inteiro sinalizado de 64 bits.
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
5
Principais Tipos

Temos ainda o tipo integer o qual seus bits podem
assumir valor 1, 0, Z e X.
• integer: inteiro sinalizado de 64 bits.

Os tipos podem ser forçados a serem sinalizados
ou não-sinalizados. Para isso deve-se usar as
palavras signed ou unsigned.
int unsigned valor;
int signed valor;
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
6
Principais Tipos

O tipo byte representa um conjunto de oito bits
que podem ser interpretados como um inteiro
sinalizado ou um caractere ASCII.
byte valor;
byte unsigned valor;

Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
O tipo bit é usado basicamente na definição
de vetores e pode assumir apenas valores 0 e
1.
7
Principais Tipos

O tipos logic também é usado na definição de
vetores . Seus bits podem assumir valor 0, 1, Z e X.
Por padrão os terminais de entrada e saída dos
módulos possuem esse tipo.

SystemVerilog possui ainda os tipos real (64 bits) e
shortreal (32 bits). Esses ainda não são
sintetizáveis.
real valor;
shortreal valor;
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
8
Principais Tipos

Temos também o tipo string que representa
uma cadeia de caracteres. Esse tipo possui
um bom conjunto de métodos definidos. Deve
ser delimitado por aspas duplas e pode ter até
1024 caracteres.
string nome = “String”;
byte a = “A”
//Atribui A para a
bit [10:0] c = “41”
//Atribui 000_0100_0001 a C
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
9
Trabalhando com Números

Com SystemVerilog
podemos trabalhar com
números decimais, hexadecimais e binários. Para
tanto, devem ser declarados o tamanho em bits do
número e seu tipo.
6'd33
8'hA6
8'b1000_1101
• Obs: os números podem ser explicitamente sinalizados
através do uso de - ou +
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
10
Vetores de Bits

Para a definição de vetores de bits
procedemos das formas apresentadas abaixo.
• Vetor unidimensional
logic [msb: lsb] nome_vetor;
• Vetor bidimensional
logic [msb: lsb] nome_vetor [minimo :máximo];
• Vetor tridimensional
logic [msb:lsb] [máximo:mínimo] nome_vetor[mínimo: máximo]
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
11
Vetores de Bits

Exemplos
• Abaixo é definido um vetor de oito bits.
logic [7:0] vetor;
• No próximo exemplo temos um vetor de 64 posições,
sendo cada uma de 4 bits.
logic [3:0] matriz [0:63];
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
• Nessa construção temos 10 entradas de matrizes 4x8.
Configurando assim uma matriz tridimensional.
12
logic [3:0] [7:0] matriz [0:10];
Vetores de Bits

O acesso aos elementos do vetor são demonstrados
nos exemplos abaixo.
string [4:0] vet = { “H”, ”P”, ”C”, ”I”, “n”};
vet[3] = vet[2];
logic [7:0] matriz [0:4];
matriz [0] = 8’b1010_0011;
matriz [0] [7] = 1’b0;
logic [3:0] [7:0] matriz [0:7];
matriz [0] = 8'b1010_0011;
matriz [0][2][7] = 1'b1;
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
13
Operadores

Os operadores de SystemVerilog são
parecidos com os da linguagem C. Nesta
apresentação é demonstrado apenas um
subconjunto dos operadores da linguagem.
• Temos os seguintes operadores unários lógicos
~ : negação bit a bit
! : negação lógica
+ : positivo
- : negativo
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
14
Operadores
• Operadores lógicos binários
>> : deslocamento lógico para a direita.
<< : deslocamento para a esquerda.
== : verifica a igualdade entre os operandos.
!= : verifica e diferença entre dois operandos.
=< : menor ou igual
>= : maior ou igual.
> : maior.
< : menor.
| ou || : ou lógico.
^ : ou exclusivo.
& ou && : and lógico.
? : operador condicional
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
<condição> ? <expressão_verdadeira> :<expressão_falsa> ;
15
Operadores
• Operadores de atribuição
= : atribuição simples
+= : atribuição com soma
-= : atribuição com subtração
*= : atribuição com multiplicação
/= : atribuição com divisão
%= : atribuição do resto
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
16
Operadores
• Operadores Aritméticos
* : multiplicação.
/ : divisão.
%: resto da divisão.
+ : soma.
- : subtração.
– Observação: em operações lógicas o valor Z é tratado
como X.
– Observação: em operações aritméticas a presença de
um bit Z ou X torna todo o resultado X.
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
17
Circuitos Síncronos e Assíncronos
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO

Com SystemVerilog podemos construir
circuitos síncronos e assíncronos com o uso
das construções always_ff e always_comb.

always_ff é usado para criar um bloco
síncrono de código.

always_comb é usado para a descrição de
lógica puramente combinacional.
19
Circuitos Síncronos e Assíncronos

No caso da construção always_ff a definição
de quais os valores irão sincronizar o bloco de
código é feita através das palavras posedge e
negedge.
• posedge indica que a partir da subida de um
determinado sinal o bloco síncrono será ativado.
• negedge indica que a partir da descida de um
determinado sinal o bloco síncrono será ativado.
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
20
Circuitos Síncronos e Assíncronos

O exemplo abaixo demonstra a forma de
declaração da construção always_ff
always_ff @ ( posedge clk or posedge rst or negedge neg
)
begin
local para a descrição da lógica síncrona.
end
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
21
Circuitos Síncronos e Assíncronos

Para circuitos assíncronos é usado o bloco
always_comb. Tal bloco será sensível à
mudança de qualquer sinal nele contido.
always_comb
begin
local para a descrição da lógica assíncrona.
end
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
22
Decisões
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO

Em SystemVerilog temos basicmente duas formas de efetuar
tomadas de decisões.

Uma delas é feita através da construção if, else if e else.

Outra forma é através do comando case.

Diferentemente de VHDL, em que existem construções
diferentes
para
circuitos
síncronos
e
assíncronos,
SystemVerilog apresenta essas duas formas de construir
tomadas de decisões para ambos tipos de lógica.
23
Decisões

Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Construção if else
if ( condição )
begin
//Local para a inserção de comandos.
end
else if ( condição )
begin
if ( condição )
begin
//Local para a inserção de comandos.
end
else
begin
//Local para a inserção de comandos.
end
end
else
begin
//Local para a inserção de comandos.
end
Os comandos if podem
ser
encadeados
e
anihados. Caso exista
uma cláusula else e
nenhum
dos
testes
condicionais se confirme
ela será executada.
24
Decisões

Construção Case
• Na construção case um teste de valor é executado e de
acordo com o resultado um conjunto de operações é
executado.
case (X)
2’b00: Y = A + B;
2’b01: Y = A – B;
2’b10: Y = A / B;
default: Y = 0;
endcase
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
25
Exemplos

Multiplexador 4x1
module mux_4bits (
input [3:0] a, b, c, a[3:0]
b[3:0]
d,
input [1:0] sel,
c[3:0]
output logic [3:0] y);d[3:0]
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
always_comb
case (sel)
2’b00: y <= a;
2’b01: y <= b;
2’b10: y <= c;
default: y <= d;
endcase
endmodule
y[3:0]
sel[1:0]
26
Exemplos

Registrador de deslocamento do quatro bits.
module Shift_reg4 (
input Data_in, clock, reset,
output logic Data_out);
logic [3:0] Data_reg;
always_comb Data_out = Data_reg[0];
always_ff @ (negedge reset or posedge clock) begin
if (reset == 0) Data_reg <= 0;
else Data_reg <= {Data_in, Data_reg[3:1]};
end
endmodule
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
27
Prática

Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Construa o contador indicado abaixo
O contador é trigado na subida do
clock.
O valor de Data_in deverá ser
carragado quando load = 1.
O
contador
conta
quando
counter_on = 1.
Caso cont_up = 1 o contador é
incrementado, Caso count_up = 0
o contador é decrementado.
O reset deve ser assíncrono.
28
Formas de Descrição de Circuitos

Em SystemVerilog temos quatro
diferentes de descrever circuitos.
•
•
•
•
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Forma Estrutural
Fluxo de Dados
Forma Comportamental
RTL
formas
Formas de Descrição de Circuitos

Forma Estrutural
• Representa circuitos lógicos usando primitivas
da linguagem.
– Exemplo
sel
not n1(sel_n, sel);
and a1(sel_b, b, sel_b);
and a2(sel_a, a, sel);
or o1(out, sel_b, sel_a);
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
b
n1
a1
sel_b
sel_n
a
o1
a2
sel_a
out
Formas de Descrição de Circuitos

Forma Estrutural
• Os comandos
concorrente.
são
module or_nand_1 (
input enable, x1, x2, x3, x4,
output logic y);
logic w1, w2;
or (w1, x1, x2);
or (w2, x3, x4);
nand (y, w1, w2, enable);
endmodule
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
executados
de
forma
Formas de Descrição de Circuitos

Fluxo de Dados
• Representa sinais de saída em função de sinais
de entrada.
always_comb out <= (sel & a) | (~sel & b);
b
sel
sel_b
sel_n
out
sel_a
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
a
Formas de Descrição de Circuitos

Fluxo de Dados
• Todas
as
atribuições
permanentes
executam
concorrentemente.
• A ordem das atribuições no arquivo não importa.
module or_nand_2 (
input enable, x1, x2, x3, x4,
output logic y);
always_comb y <= !(enable & (x1 | x2) & (x3 | x4));
endmodule
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Formas de Descrição de Circuitos

Forma Comportamental
• Representa o comportamento na forma de um
algoritmo.
module mux_2x1(input a, b, sel,
output logic out);
always_comb
if (sel == 1) out = a;
else out = b;
endmodule
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
a
b
Black Box
2x1 MUX
sel
out
Formas de Descrição de Circuitos

Forma Comportamental
• As duas principais formas de descrição
comportamental são initial e always_comb.
– initial: determina um bloco não sintetizável que será
executado apenas uma vez no início da simulação.
– always_comb: determina um bloco sintetizável que
ira executar de forma repetida.
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Formas de Descrição de Circuitos

Descrição Comportamental
• Exemplo: initial e always_comb
…
initial begin
Soma = 0;
Carry = 0;
end
…
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
…
always_comb begin
Soma = A ^ B;
Carry = A & B;
end
…
Formas de Descrição de Circuitos

Decrição RTL (Register Transfer Level)
• Descreve o que acontece a cada transição ativa
do sinal de relógio.
– Exemplo:
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
always_ff @(posedge clock) begin
pisca <= ~pisca;
end
Mapeamento de Portas

Após criar vários módulos componentes de
um mesmo circuito, SystemVerilog nos
permite ligá-los em um módulo maior de
três formas diferentes.
• Conexão por Posição
• Conexão Explícita.
• Conexão por Casamento
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Mapeamento de Portas

Conexão por Posição
• As conexões são dadas através da posição
das portas do módulo filho.
• A ordem de ligação das portas é significativa.
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Mapeamento de Portas

Conexão por Posição
• Exemplo:
module modulo_Filho(
input sig_a, sig_b,
output logic sig_c,sig_d);
// descrição do module
endmodule
module modulo_Pai(...);
logic [3:0] g;
child_mod U1(g[3],g[1],
g[0],g[2]);
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
endmodule
modulo_Pai
Mapeamento de Portas

Conexão Explícita
• Neste caso os sinais de ligação internos são
explicitamente ligados às portas dos módulos
componentes.
• A ordem de ligação das portas não é
significativa.
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Mapeamento de Portas

Conexão Explícita
module modulo_Filho(
input sig_a, sig_b,
output logic sig_c,sig_d);
// descrição do module
endmodule
module modulo_Pai( ... );
logic [3:0] g;
modulo_Filho U1( .sig_c(g[0]),
.sig_b(g[1]),
.sib_d(g[2]),
.sig_a(g[3])
);
endmodule
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
modulo_Pai
Mapeamento de Portas

Conexão por Casamento
• Neste caso a conexão se dá de forma totalmente
implícita.
• Sinais internos ao módulo pai são declarados com
o mesmo nome das portas dos módulos filhos. A
conexão se dá de forma automática.
• Esse tipo de conexão está muito sujeita a erros.
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Mapeamento de Portas

Conexão por casamento
module modulo_Filho(
input a, b,
output logic c,d);
// descrição do module
endmodule
module modulo_Pai(...);
logic a,b,c,d;
child_mod U1( .* );
endmodule
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
modulo_Pai
a
a
b
c
b
c
d
modulo_Filho
d
Projetando um sistema digital

Estrutura: controle + processamento
A
entity sistema is
port(...)
end sistema;
B
4
4
L2
L1
L1
L2
Z
F
ALU
2
N
L3
L3
4
C
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
architecture estrut of sistema is
signal ...
component processamento
port(...)
component controle
port(...)
begin
U0: controle portmap(...);
U1: processamento portmap(...);
end estrut;
Projeto: Implementação Multi-ciclo
PCWriteCond
PCSource
PCWrite
Outputs ALUOp
IorD
ALUSrcB
MemRead
ALUSrcA
Control
MemWrite
RegWrite
MemtoReg
Op
RegDst
IRWrite
[5– 0]
26
Ins truc tion [25– 0]
Shift
left 2
Ins truction
[31-26]
PC
0
M
u
x
1
Address
Mem ory
M em D ata
Write
data
Instruction
[25– 21]
Read
register 1
Instruction
[20– 16]
Read
Read
register 2 data 1
Registers
W rite
Read
register
data 2
Instruction
[15– 0]
Instruction
register
Instruction
[15– 0]
M emory
data
regis ter
0
M
Instruction u
x
[15– 11]
1
0
M
u
x
1
16
S ign
ex tend
32
GRECO
S hift
left 2
Zero
A LU
0
4
W rite
data
Instruction [5– 0]
Cin - CENTRO
DE INFORMÁTICA
UFPE
B
Jump
address [31-0]
PC [31-28]
0
M
u
x
1
A
28
1 M
u
2 x
3
ALU
control
ALU
res ult
ALUO ut
0
M
1 u
x
2
Compondo a Unidade de
Processamento:
ALU: Unidade Lógico-Aritmética
A
B
32 32
ALU
32
f
000
001
010
011
100
101
110
111
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
operação
S=A
S = A+B
S = A-B
S = A and B
S = A xor B
S = not A
S = inc A
S = A comp B
S
descrição
GT
N
O
EQ
LT
Z
flags afetados
Z,N
Soma
Z,N,O
Subtração
Z,N,O
And lógico Z
Ou exclusivo Z
Complemento Za 1
Incremento Z, N, O
Comparação EQ,GT,LT
Compondo a Unidade de
Processamento....

Permitir que a saída da ALU seja deslocada
• Registrador de deslocamento
– Load e shift síncronos (descida)
– Clear assíncrono
– Deslocamentos (n vezes):
• Esquerda
– Entrada: 0
• Direita (lógico e aritmético)
– Entrada: 0 ou MSB (Bit mais significativo)
• Rotação (direita ou esquerda):
– Entrada: LSB, MSB
– Saída: MSB, LSB (Bit Menos Significativo)
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Compondo a Unidade de
Execução...
Entrada A
f
Entrada B
ALU
eq, gt, lt
shift
ck
Reg. desl
shift
descrição
000
nada
001
Load (no shift)
010
Desl.
Desl.Esquerda
Esquerdannvezes
vezes
011
Desl. Direita Lógico n vezes
100
Desl. Direita aritmético n vezes
101
Rotação direita n vezes
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
110
Rotação esquerda n vezes
3
3
n
reset
Saída_execução
Projetando a Unidade de Controle
Máquinas de estados finitos
FSM
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Máquinas de estado - FSM
Computador = Processamento + Controle
Status
Registradores
Unidades Funcionais
Combinacionais ( ALU)
Barramento
Controle
FSM gera sequencias
de sinais de controle
Instrui ao processamento
o que fazer
Controle
Estado
Sinais de controle
(saída)
Status
e entradas
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Processamento
Executando um programa
Busca instrução
Decodifica instrução
Incrementa PC
Busca operando
Executa instrução
Armazena resultado
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Metodologia de projeto
Seis passos
1. Entender especificação informal do problema
2. Obter especificação abstrata da FSM
3. Minimização de estados
4. Codificação de estados
5. Escolher tipos de FF para implementação do reg. de estados
6. Implementar a FSM
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Exemplo: Máquina de vendas autom.
Comportamento:
entrega pacote de bombom a cada 15 centavos depositado
slot para moedas
não dá troco
Passo 1: Entendendo o problema:
N 10¢
Diagrama de Blocos
Coin
Sensor
D 5¢
Reset
Clk
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Vending
Machine
FSM
Open
Gum
Release
Mechanism
Passo 2. Especificação abstrata
Moedas típicas:
Reset
3 moedas de R$0.10
1 moeda de R$0.05 e uma moeda de R$0.10
1 moeda de R$0.10 e uma moeda de R$0.05
5¢
2 moedas de R$0.10
2 moedas de R$0.05 e uma de R$0.10
S1
5¢
10¢
Entradas: 5¢,10¢ , reset
Saída: open
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
10¢
S2
5¢
10¢
S4
S5
S6
[open]
[open]
[open]
S3
5¢
S0
10¢
S7
S8
[open]
[open]
Diagrama de estados:
Passo3: Minimização de Estados
Present
State
Reset
0¢
0¢
N
5¢
D
5¢
N
10¢
D
N, D
10¢
15¢
[o p en]
15¢
reutilizar estados
sempre que possível
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Inputs
D N
0
0
1
1
0
0
1
1
0
0
1
1
X
0
1
0
1
0
1
0
1
0
1
0
1
X
Next
State
Output
Open
0¢
5¢
10¢
X
5¢
10¢
15¢
X
10¢
15¢
15¢
X
15¢
0
0
0
X
0
0
0
X
0
0
0
X
1
Tabela de estados simbólicos
Passo 4: Codificação de estados
Present State
Q1 Q0
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
0
0
0
1
1
0
1
1
Inputs
D
N
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Next State
D1 D0
Output
Open
0 0
0 1
1 0
X X
0 1
1 0
1 1
X X
1 0
1 1
1 1
X X
1 1
1 1
1 1
X X
0
0
0
X
0
0
0
X
0
0
0
X
1
1
1
X
Passo 5. Escolha do FF para implementação
D FF
Q1
Q1 Q0
DN
Q1
Q1 Q0
DN
N
D
Q1
D
Q0
N
N
D
Q0
K-map for D0
D1 D
Q
CLK
R
Q1
N
D
Q0
K-map for D1
Q1 Q0
DN
Q0
K-map for Open
Q1
Q \ Q1
D1 = Q1 + D + Q0 N
\reset
N
\ Q0
Q0
\N
Q1
N
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Q1
D
OPEN
D0
D
Q
CLK
R
\reset
Q0
D0 = N Q0 + Q0 N + Q1 N + Q1 D
OPEN = Q1 Q0
Q \ Q0
8 Gates
Passo 5. Escolha de FF para implementação
J-K FF
Present State
Q1 Q0
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
0
0
0
1
1
0
1
1
Inputs
D N
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Next State
D1 D0
0
0
1
X
0
1
1
X
1
1
1
X
1
1
1
X
0
1
0
X
1
0
1
X
0
1
1
X
1
1
1
X
J1
0
0
1
X
0
1
1
X
X
X
X
X
X
X
X
X
K1
J0 K 0
X
X
X
X
X
X
X
X
0
0
0
X
0
0
0
X
0
1
0
X
X
X
X
X
0
1
1
X
X
X
X
X
X
X
X
X
0
1
0
X
X
X
X
X
0
0
0
X
Passo 6: Implementação:
Q1 Q0
DN
Q1
Q1 Q0
DN
Q1
J1 = D + Q0 N
K1 = 0
N
D
N
J0 = Q0 N + Q1 D
D
Q0
K-map for J1
Q1
Q1 Q0
K0 = Q1 N
Q0
K-map for K1
Q1
Q1 Q0
DN
N
Q0
DN
J
D
N
D
N
CLK
\ Q0
K
R
Q
Q1
Q
\ Q1
N
D
OPEN
Q1
Q0
K-map for J0
Q0
K-map for K0
D
CLK
\ Q1
J
K
N
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
\reset
R
Q
Q0
Q
\ Q0
7 Gates
Metodologia de projeto
Seis passos
1. Entender especificação informal do problema
2. Obter especificação abstrata da FSM
3. Minimização de estados
4. Codificação de estados
5. Escolher tipos de FF para implementação do reg. de estados
6. Implementar a FSM
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Máquinas Moore e Mealy
Xi
Inputs
Zk
Outputs
Com binational
Logic for
Outputs and
Next State
Máquinas Mealy
Saídas dependem
dos estados e entradas
State Re gis ter
Clock
State
Fe edback
Sinais assincronos
State
Regis ter
Xi
Inputs
Zk
Outputs
Clock
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
state
feedback
Máquinas Moore
Comb.
Logic for
Outputs
Combina tional
Logic for
Nex t State
(Flip-flop
Inputs)
Mudanças na entrada
causa mudanças
imediatas nas saídas
Saídas como função
somente do estado
corrente
Saídas são alteradas
sincronamente com
mudança de estados
Diagramas de Estados
Mealy
Machine
N D + Res et
(N D + Rese t)/0
Reset/0
Moore
Machine
Reset
0¢
0¢
[0]
Reset
Reset/0
N/0
5¢
5¢
N D/ 0
N
D
ND
[0]
D/0
N
N/0
10¢
10¢
D
D/1
N D/ 0
N+D/1
[0]
N+D
ND
15¢
15¢
[1]
Reset
Reset/1
Saídas associadas com transições
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Saídas associadas
com estados
Representando uma FSM
Notação algorítmica
 Linguagens de Descrição de Hardware:

•
•
•
•
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
VHDL
Verilog
SystemC
SystemVerilog
Máquinas de Estados

Uma máquina de estados em SystemVerilog
possui o seguinte formato.
module nome_modulo (
input … ,
output … );
enum logic [tamanho-1: 0] {estado_0, estado_1, ... } estado;
always_ff @ (negedge reset or posedge clk)
if (reset == 1'b0) state <= state_0;
else
case (estado)
estado_0: estado <= estado_1;
estado_1: ...
...
default: estado <= estado_0;
endcase
always_comb ...
Cin - CENTRO
DE INFORMÁTICA
UFPE
66
GRECO
endmodule
Tipo Enumerados

O programador SystemVerilog tem a possibilidade de
criar novos tipos enumerados. Para tanto, deve usar o
modelo abaixo.
•
enum logic [tamanho-1: 0] {estado_0, estado_1, ... } estado;
– O comando acima define uma enumeração onde o estado poderá
assumir qualquer valor entre os declarados entre chaves.
– Os parâmetros entre colchetes define número de bits necessários
para representar o conjunto de estados.
Cin - CENTRO
DE INFORMÁTICA
UFPE
67
GRECO
Tipo Enumerados

Outra forma de declarar tipos enumerados é mostrada
abaixo.
• enum {estado_0,estado_1, ... } estados;
– Neste caso a definição é simplificada porém a ferramenta de síntese
usa um tamanho padrão para representar o conjunto de estados.
– Possivelmente serão usados vetores de 32 bits para representar o
conjunto de estados. Isso poderá gerar grande disperdício de
componentes.
Cin - CENTRO
DE INFORMÁTICA
UFPE
68
GRECO
Tipo Enumerados

Exemplos de uso:
enum logic [1:0]{busca, decodifica, opera, reset}
cont;
cont <= busca;
enum { verde, branco, grena } verdadeiro_tricolor;
verdadeiro_tricolor <= verde;
Cin - CENTRO
DE INFORMÁTICA
UFPE
69
GRECO
Implementação do bloco que determinará o
próximo estado da máquina
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Implemntação do bloco que
determinará a saída
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Projeto: Arquitetura
GRECO
F1
Instrução
Opcode Funct
Descrição
Nop
lw reg,
desl(reg_base)
sw reg,
desl(reg_base)
lb reg, desl(reg_base)
000000
100011
No operation (todos os outros campos são zero)
Carrega palavra localizada a partir do endereço dado por (reg_base+desl) no registrador reg
00000
F2
101011
Escreve registrador reg a partir do endereço de memória dado por (reg_base+end)
100000
Carrega byte localizado no endereço dado por (reg_base+desl) no byte menos significativo
do registrador reg. O sinal deve ser expandido.
Carrega meia palavra localizada a partir do endereço ((reg_base) + desl) na parte menos
significativa do registrador reg. O sinal deve ser extendido.
Escreve byte menos significativo do registrador reg no endereço de memória dado por
(reg_base+desl). Somente um byte é escrito na memória
Escreve meia palavra menos significativa do registrador reg a partir do endereço de
memória dado por (reg_base+desl). Somente dois bytes são escritos na memória
Carrega valor constante na parte mais significativa do registrador reg = constante, os demais
bits são iguais a zero.
Carrega reg_hi para rd
Carrega reg_lo para rd
Regi. <- Regj. + Regk (com overflow)
Regi = regj + cte (com overflow)
Regi. <- Regj. – Regk (com overflow)
Regi. <- Regj. + Regk (sem overflow)
Regi = regj + cte
Regi. <- Regj. – Regk
Regi. <- Regj. And Regk
Regi = regj and cte
Regi. <- Regj. xor Regk
Regi = regj xor cte
Reg_hi e Reg_lo = rs * rt
Reg_hi = rs/rt (quociente) e Reg_lo= resto da divisão
Desloca registrador regs para dir. n vezes (aritmético), armazena valor deslocado em
registrador regd.
Desloca registrador regs para esq. n vezes (lógico), armazena valor deslocado em registrador
regd.
Desloca registrador regs para esquerda n vezes, armazena valor deslocado em registrador
regd.
PC=PC + (desl*4) se regi = regj
PC = PC + (desl*4) se regi <> regj
Regi =1 se regj < regk senão regi=0
Regi =1 se regj < cte senão regi=0
Desvio para end
PC = (regi)
R31 = PC; PC = end
Retorno de Exceção
Para a execução do programa
lh reg, desl(reg_base) 100001
Cin - CENTRO
DE INFORMÁTICA
UFPE
6
sb reg,
desl(reg_base)
sh reg,
desl(reg_base)
lui reg, constante
101000
mfhi rd
mflo rd
add regi, regj,regk
addi regi, regj, cte
sub regi, regj, regk
addu regi, regj,regk
addiu regi, regj, cte
subu regi, regj, regk
and regi, regj,regk
andi regi, regj, cte
xor regi, regj, regk
xori regi, regj, cte
mult rs, rt
div rs, rt
sra regd, regs, n
000000
000000
000000
001000
000000
000000
001001
000000
000000
001101
000000
001110
000000
000000
000000
010000
010010
100000
srl regd, regs, n
000000
000010
sll regd, regs, n
000000
000000
beq regi, regj, desl
bne regi, regj, end
slt regi, regj, regk
slti regi, regj, cte
j end
jr regi
jal end
rte
Break
000100
000101
000000
001010
000010
000000
000011
010000
000000
101001
001111
100010
100001
100011
100100
100110
011000
011010
000011
101010
001000
010000
001101
F3
Opcode
Opcode
6
Opcode
6
5
rs1
rb
5
5
5
5
6
Rs2
rd
count
funct
rd
5
deslocamento
16
endereço
26
Projeto: Implementação Multi-ciclo
PCWriteCond
PCSource
PCWrite
Outputs ALUOp
IorD
ALUSrcB
MemRead
ALUSrcA
Control
MemWrite
RegWrite
MemtoReg
Op
RegDst
IRWrite
[5– 0]
26
Ins truc tion [25– 0]
Shift
left 2
Ins truction
[31-26]
PC
0
M
u
x
1
Address
Mem ory
M em D ata
Write
data
Instruction
[25– 21]
Read
register 1
Instruction
[20– 16]
Read
Read
register 2 data 1
Registers
W rite
Read
register
data 2
Instruction
[15– 0]
Instruction
register
Instruction
[15– 0]
M emory
data
regis ter
0
M
Instruction u
x
[15– 11]
1
0
M
u
x
1
16
S ign
ex tend
32
GRECO
S hift
left 2
Zero
A LU
0
4
W rite
data
Instruction [5– 0]
Cin - CENTRO
DE INFORMÁTICA
UFPE
B
Jump
address [31-0]
PC [31-28]
0
M
u
x
1
A
28
1 M
u
2 x
3
ALU
control
ALU
res ult
ALUO ut
0
M
1 u
x
2
Diagrama de estados
s0
s1
s2
s3
busca instrução
s4
... s5
s6
próxima instrução
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Executa
instrução
The FPGA Design Process
Design entry
Synthesis
Device
mapping
Device
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Test Development
Functional simulation
Timing simulation
O ambiente Quartus
Processing
Design entry
Editor de
texto
Editor de
waveform
Compilador
Database
builder
Logic
synthesizer
Editor
gráfico
Editor de
símbolos
Time
extractor
Partitioner
Fitter
Netlist
writer
Design
doctor
Assembler
Editor de
floorplan
Simulador
Editor
waveform
Message
processor
&
Hierarchy
display
Device
program.
Timinig
analyzer
Cin - CENTRO
DE INFORMÁTICA
UFPE
GRECO
Verification
Programming
Download

infra-hw-systemverilog