Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Workshop de Verilog
MsC. Cezar Reinbrecht
LINGUAGEM VERILOG
Workshop em Verilog
Descrição Estrutural - Netlist
• Representação 
para portas lógicas 
puras.
• Resultado da etapa 
de síntese lógica.
Descrição Comportamental
• Nível Modelamento/Algorítmico
– Representação sem considerações de 
temporização.
– Preocupação apenas com algoritmo de solução.
• RTL ( Register Transfer Level)
– Representação com consideração temporal na 
transição entre registradores do tipo flip-flop.
– Preocupação da descrição comportamental com o 
hardware a ser implementado
Tipos de Dados e Representação
• Tipos
– 0 – Zero
– 1 - Um
– X – Indefinido ou Conflito Lógico (curto-circuito)
– Z – Alta impedância
• Representação Númerica
#BITS ’ BASE NUMERO
– Exemplo:
8’b00001010 8’o12
8’d10 8’h0A
Classe de Sinais
• NETS
– Atribuições não-procedurais, ou seja, sinais que são 
atribuídos fora de processo.
• WIRE (PADRÃO)
• REGISTER
– Atribuições procedurais, ou seja, sinais que são atribuídos 
dentro de processos.
– CUIDADO!!! REGISTER não significa lógica sequencial.
• REG
Atribuições
• Atribuição Contína
wire a;
assign a = b + c;
• Atribuição Procedural
reg a;
always @(*)
begin
a = b + c; 
end
+
b
c
a
Seleção, Concatenação e 
Replicação de Bits
• Seleção
– Sinal [BMS:bms]
– Exemplo:
assign operando = instruction[10:0];
assign opcode = instruction[15:11];
• Concatenação
– Sinal = {Sinal_A,Sinal_B,...}
– Exemplo:
assign imm = {5’b00000,operando};
• Replicação
– {Quantidade{Sinal/Valor}}
– Exemplo
assign imm = {16{1’b0}};
///Exemplo Extensor de Sinal
wire [15:0] imm;
assign imm = { {5{operando[10]}}, operando};
Definição do Módulo
• Definir o nome do módulo a ser projetado, 
bem como, suas interfaces.
XUXU
module xuxu (
input A,
input B,
input C,
output S
);
/// CORPO 
endmodule
A
B
C
S
Interfaces
• Ao definir as interfaces deve-se:
– Definir o sentido da conexão:
• Input – Entrada
• Output – Saída
• Inout – Entrada e saída (apenas casos muito específicos)
– Definir o tamanho da conexão:
• 1 bit – Padrão, não é necessário descrever nada
• N Bits – utilizar [BMS : 0]
• Exemplo
input [7 : 0] A //entrada A de 8 bits
output [31 : 0] S //saída S de 32 bits
*BMS – BIT MAIS SIGNIFICATIVO
Parâmetros
• Constante utilizada 
para parametrizar a 
implementação.
• Quando o módulo for 
instanciado, entidade 
que chama pode 
alterar os parâmetros.
module xuxu
#(
parameter A = 3,
parameter TAM = 8
)
(
input A,
output [ (tam-1) : 0] S
);
/// CORPO 
endmodule
Instanciação
• Invocar outro módulo dentro do módulo em 
desenvolvimento.
decoderdecoder
somadorsomador
Módulo ULA
OP
A
B
RES
module xuxu (
input [7:0] A,
input [7:0] B,
input [2:0] OP,
output [7:0] RES
);
wire mode;
decoder unidade1 ( .codigo(OP), .mode(mode));
somador unidade2 ( .a(A), .b(B), .enable(mode));
endmodule
mode
Unidade 1
Unidade 2
Lógica Combinacional
module always_c (
input mode, 
input a,
output reg c
);
always @ (*)
begin 
if (mode == 1) 
c = a + 1; 
else 
c = a - 1;
end
endmodule
0
1
mode
a
1
a
1
c
mode
a
+
-
Lógica Sequencial
module always_c ( input clock,
input reset,
input mode, input a,
output reg c
);
always @ (posedge clock, posedge reset)
Begin
if ( reset ) //RESET SEMPRE NO 1o IF
c <= 0;
else
if (mode == 1) 
c <= a + 1; 
else 
c <= a - 1;
end
0
1
mode
a
1
a
1
c
mode
a
clk
+
-
Que elementos os diferenciam?
module always_c (
input mode, 
input a,
output reg c
);
always @ (*)
begin 
if (mode == 1) 
c = a + 1; 
else 
c = a - 1;
end
endmodule
module always_c ( input clock,
input reset,
input mode, input a,
output reg c
);
always @ (posedge clock, posedge reset)
Begin
if ( reset ) 
c <= 0;
else
if (mode == 1) 
c <= a + 1; 
else 
c <= a - 1;
end
endmodule
BLOCKING
NON–BLOCKING 
Testbench
• Mecanismo para 
verificar se o módulo 
projetado realiza 
corretamente as suas 
funções.
• Utiliza processo initial
– Processo que executa 
apenas uma vez
Delay e Timescale
• Delay
– #ATRASO
• Timescale
– Define:
• Unidade de tempo
• Precisão da simulação
– Colocar no testbench acima de module:
‘timescale 1ns/1ns ou ‘timescale 1ns/100ps
Exemplos Testbench
‘timescale 1ns/1ns
module main;
reg a, b, c; 
wire sum, carry;
Somador soma(a,b,c,res);
initial
begin
a = 0; b = 0; c = 0;
#5
a = 0; b = 1; c = 0;
#5
a = 1; b = 0; c = 1;
#5
a = 1; b = 1; c = 1;
• #5
end
endmodule
‘timescale 1ns/1ns
module main;
reg a, b, c; 
wire sum, carry;
Somador soma(a,b,c,res);
initial
begin
a = 0; b = 0; c = 0;
#5
a = 0; b = 1; c = 0;
#5
$display (“Resultado é %d”, res);
end
endmodule
Para mostrar no terminal as informações, use $display
DICAS DE IMPLEMENTAÇÃO
Workshop Verilog
MUX
0
1 c
mode
a
b
wire c;
assign c = mode ? a : b;
reg c;
always @(*)
begin
if (mode)
c = a;
else
c = b;
end
MUX Grande
2
3
e
mode
a
b
wire e;
assign e = ( mode[1] ? ( mode[0] ? a : b ) : ( mode[0] ? c : d) );
reg e;
always @(*)
begin
case (mode)
2’b00: e = d;
2’b00: e = c;
2’b00: e = b;
2’b00: e = a;
default: e = a;
endcase
end
1
0
c
d
Aritméticos e Lógicos
Operação Símbolo
Soma +
Subtração -
Multiplicação *
Divisão /
E bit-wise &
E lógico &&
OU bit-wise |
OU lógico ||
NÃO bit-wise ~
Não lógico !
Shift Right >>
Shift Left <<
Relacional Símbolo
Igual ==
Diferente !=
Maior que >
Menor que <
Maior ou igual >=
Menor ou igual <=
Flip-flop e Reset Parametrizável
reg [PARAM-1 : 0] q;
always @(posedge clock, posedge reset)
begin
if (reset)
q <= { PARAM { 1’b0 } };
else
q <= d;
end
q
clock
d
reset
Cuidado com Lógica Combinacional
always @ (*)
begin 
if (mode == 1) 
c = a + 1; 
end
mode
+
a
1
a
c
mode
X
LATCH NÃO
circuito combinacional
COMPLETO!!
precisa do else
Tranquilo na Lógica Sequencial
always @ (posedge clk, posedge reset)
begin 
if (reset)
c <= 0;
else 
if (mode == 1) 
c <= a + 1; 
end
1
0
mode+
a
1
a
c
mode clk
Não precisa do else
Instanciação com Parâmetros
module somador #(
parameter TAM = 8
)
(
input [TAM-1:0] A,
input [TAM-1:0] B,
output [TAM:0] S
)
…..
endmodule
module ula (…)
reg [31:0] V1, V2;
wire [32:0] RES;
somador #(.TAM(32)) inst0 (
.A(V1),
.B(V2),
.S(RES)
)
endmodule
Criar Clock no Testbench
reg clock;
always #10 clock = ~clock;
initial
begin
clock = 0;
end
always
begin 
clock = 0;
#5
clock = 1;
#5
end
Criar Memória para o Testbench
reg [7:0] mem [0:1023];
//PARA INICIALIZAR COM DADOS SE PRECISAR
$readmem(“memoria.txt”,mem);
always @(posedge clock)
begin
if (write_en)
mem[addr] <= data_in;
end
assign data_out = read_en ? mem[addr] : {TAM{1’b0}};
EXERCÍCIOS
Workshop em Verilog
Ferramenta – Coding Ground
• Tutorials Point
– Ir em www.tutorialspoint.com
– Escolher Coding Ground -> Online IDE
• Verilog
– Crie o projeto Meu_BIP
• Desenvolva os códigos e simule com terminal
http://www.tutorialspoint.com/
Ferramenta – Coding Ground
Exercício 1 – Módulo ULA
• Desenvolva o seguinte circuito combinacional
e seu testbench:
– A, B e S devem ser parametrizáveis
F Função
2’b00 Soma
2’b01 E
2’b10 Não B
2’b11 Subtração
Exercício 2 – Módulo Decoder
• Faça um Decodificador conforme regras da 
tabela abaixo e seu testbench:
Entrada Saídas
Código S0 S1 S2 S3 S4 S5
5’b00000 1’b0 2’b00 1’b0 1’b0 2’b00 1’b0
5’b00001 1’b1 2’b00 1’b0 1’b0 2’b00 1’b1
5’b00010 1’b1 2’b00 1’b0 1’b1 2’b00 1’b0
5’b00011 1’b1 2’b01 1’b0 1’b1 2’b00 1’b0
5’b00100 1’b1 2’b10 1’b0 1’b1 2’b00 1’b0
5’b00101 1’b1 2’b10 1’b1 1’b1 2’b00 1’b0
5’b00110 1’b1 2’b10 1’b0 1’b1 2’b11 1’b0
5’b00111 1’b1 2’b10 1’b1 1’b1 2’b11 1’b0
Exercício 3 – Módulo Acumulador
• Desenvolva o circuito sequencial abaixo e seu 
testbench:
– entradas e acumulador devem ser parametrizáveis
1
0 acumulador
WrACC clock
dir
reset
3
2
1
0
imm
Select
ula
0
Exercício 4 – Módulo Contador• Desenvolva o circuito sequencial abaixo e seu 
testbench:
– contador deve ser parametrizável
1
0 contador
WrPC clock
reset
+1
Exercício 5 – Módulo BIP
• Desenvolva o circuito abaixo, utilizando como 
palavra de dados 16 bits.
AcumuladorAcumulador
ULAULA
DecoderDecoder
ContadorContador
WrPC
S0
S1
S2
S3
S4
Código (5 bits)
Operando (11 bits)
Instrucao (16 bits)P_Addr (16 bits) D_Addr (16 bits)
Imm (16 bits)
Extensor 1 0
F
Select
WrACC
S5
Mode
Imm (16 bits)
D_RW
Imm (16 bits)
Data_In(16 bits)Data_Out(16 bits)
Módulo BIP
A (16 bits)
B (16 bits)
Dir (16 bits)
Dir (16 bits)
Exercício 5
• Testbench disponibilizado junto com material:
– Enderço:
• sites.ieee.org/sb-ufrgs/wkshop_verilog
– Contém:
• Testbench
• Programa em binário
• Dados em binário
• Descrição do Programa
Conclusão Exercícios
• Vocês acabaram de implementar e verificar um 
processador didático chamado BIP (Basic Instruction-
set Processor)
• Foi utilizado o BIP I, que possui 8 instruções apenas
• Em casa, estude o material em www.bipide.com.br e 
desenvolva em ordem o BIP II, o BIP III e o BIP IV. 
• A IDE disponibilizada permite criar programas em 
Assembly, testá-los e gerar os binários para atualizar 
o testbench.
http://www.bipide.com.br/
APÊNDICE A – PROJETANDO FSM
Workshop em Verilog
Projetando Máquinas de Estado
• Técnica dos Três Processos
1º Processo - State
module always_c (clk, reset, in1, out1);
parameter IDLE = 0;
parameter SETUP = 1;
parameter FININSH = 2;
always @ (posedge clk, posedge reset)
begin
if (reset)
state <= IDLE;
else
state <= next_state;
end
STATE
always @ (*)
begin
case (state) 
IDLE: begin
if ( entradas )
next_state = SETUP;
else
next_state = IDLE;
end
SETUP: next_state = FINISH;
FINISH: next_state = IDLE;
default: next_state = IDLE;
endcase
end
2º Processo – Next State
NEXT STATE
always @ (*)
begin
case (state) 
IDLE: begin
if ( entradas )
saídas = 1;
else
saídas = 0;
end
SETUP: next_state = saídas = 1;
FINISH: next_state = saídas = 0;
default: next_state = saídas = 0;
endcase
end
3º Processo - Outputs
OUTPUTS

Mais conteúdos dessa disciplina