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