Transcript Aula4

VERILOG HDL
Instruções de Laço
• Repeat
• While
• For
• O laço Repeat não é usado para síntese de circuitos
• O laço While é usado para síntese de circuitos
sequenciais
• O laço For é usado para síntese de circuitos
combinacionais
VERILOG HDL
Instruções de Laço
• O Laço for
expressões de
comparação
Sintaxe:
for (<índice =valor inicial>; <índice == valor final>; <incremento/decremento do
índice>);
<
>
>=
<=
O laço For é usado para síntese de circuitos combinacionais
VERILOG HDL
Exemplo da construção FOR LOOP:
• Descrever em VERILOG um circuito para determinar a ordem do bit
‘1’ de mais alta significância em um vetor de entrada de 8 bits.
Solução:
ordem_bit
A
8 bits
B
3 bits
VERILOG HDL
Solução:
module ordem_bit
(output reg [2:0]B,
input [7:0] A);
i, índice do for (variável não é sintetizada)
integer i;
always @(*) begin
B = 0;
for (i = 0; i <= 7; i = i+1)
if (A[i]==1)
B = i;
end
endmodule
VERILOG HDL
Simulação:
VERILOG HDL
Exemplo 2:
• Dê uma especificação de alto nível de um sistema combinacional que
computa a distância entre dois 1’s no vetor de bits de entrada (8 bits). Suponha
que o vetor tenha exatamente dois 1’s. Por exemplo se x = (1,0,1,0,0,0,0,0) então
a distância é 2.
VERILOG HDL
module distancia_bit
(output reg [2:0] B,
input [7:0] A);
integer i;
reg [2:0] j,k;
always @(*) begin
B=0;
k=0;
j=0;
for (i = 0; i <= 7; i = i+1)
if (A[i]==1)
j = i;
// bit de maior ordem
for (i = 7; i >= 0; i = i-1)
if (A[i]==1)
k = i;
// bit de menor ordem
B = j - k; // cálculo da diferença na ordem dos bits
end
endmodule
VERILOG HDL
module distancia_bit
(output reg [2:0] B,
input [7:0] A);
Simulação:
integer i;
reg [2:0] j,k;
always @(*) begin
B=0;
k=0;
j=0;
for (i = 0; i <= 7; i = i+1)
if (A[i]==1)
j = i;
// bit de maior ordem
for (i = 7; i >= 0; i = i-1)
if (A[i]==1)
k = i;
// bit de menor ordem
B = j - k; // cálculo da diferença na ordem dos bits
end
endmodule
VERILOG HDL
Exercício:
Um sistema combinacional tem uma entrada x, a qual
representa um dígito decimal.
A saída z é o quadrado de x se x for maior do que 4; caso
contrário, a saída z é duas vezes x.
Dê uma descrição Verilog do sistema
VERILOG HDL
Solução:
module exercicio1
(output reg [6:0]z,
input [3:0] x);
always @(*) begin
if (x > 4)
z = x*x;
else z = 2*x;
end
endmodule
VERILOG HDL
Simulação:
VERILOG HDL
Simulação:
12.8 ns
(tap)
tap -> tempo de atraso de propagação
VERILOG HDL
Simulação:
21.0ns
(tap)
tap -> tempo de atraso de propagação