Post on 07-Jun-2018
ELT601 – Eletrônica Digital IIGraduação em Engenharia Eletrônica
Universidade Federal de Itajubá IESTI
Prof. Rodrigo de Paula Rodrigues
Verilog HDLInferência de elementos de memória
Inferência de elementos de memória
Verilog | Elementos de memória
D Q
QJ Q
QK
Forma direta
Forma indireta
ELT601 – Eletrônica Digital II
QK
Descrição direta
Verilog | Elementos de memória
Latch D
D Q
QE
QDE
Q
ELT601 – Eletrônica Digital II
Q
Descrição direta
Verilog | Elementos de memória
// Latch D com habilitação
QDE
Q
s
nd
// Latch D com habilitação
module latchD( D, E, Q, Qb );
input D, E; // entradasoutput Q, Qb; // saídaswire nd, r, s; // sinais internos
not n1 ( nd, D );
and a1 ( s, E, D );
Qb
E
D
ELT601 – Eletrônica Digital II
Qr
and a1 ( s, E, D );and a2 ( r, E, nd );
nor no1( Qb, s, Q );nor no2( Q, r, Qb );
endmoduleSimulação no Quartus II
QE
Descrição indireta
Verilog | Elementos de memória
ou Sensibilidadeao nível
ouSensibilidade à borda
Comando 1
Comando 2Comando 3
always @( ... )
Comando N
...
ELT601 – Eletrônica Digital II
atribuição
Condição não coberta
Sensibilidade ao nível
Verilog | Elementos de memória
Nível alto
always @( a )begin
if ( a == 1’b1 )begin
Nível baixo
always @( b )begin
if ( b == 1’b0 )begin
ELT601 – Eletrônica Digital II
begin
// atribuição
end
end
begin
// atribuição
end
end
Sensibilidade à borda
Verilog | Elementos de memória
Borda de subida Borda de descida
always @( posedge a )begin
always @( negedge b )begin
ELT601 – Eletrônica Digital II
begin
// atribuição
end
begin
// atribuição
end
Sensibilidade por nível
Verilog | Elementos de memória
// Exemplo de sensibilidade por nível
module nivel ( A, B, C, E );input A, B, E; // entradasoutput C; // saídasreg C; // registros
always @( E )begin
if ( E == 1’b1 )
A
B C‘0’10
E
ELT601 – Eletrônica Digital II
if ( E == 1’b1 )C = A | B;
elseC = 1’b0;
end
endmodule
Descrição no Quartus II | Mapeamento na tecnologia
E
‘0’
Sensibilidade por nível
Verilog | Elementos de memória
// Exemplo de sensibilidade por nível
module nivel ( A, B, C, E );
input A, B, E; // entradasoutput C; // saídasreg C; // registros
always @( E )begin
A
B
E
C C
Latch D
D Q
ENA
ELT601 – Eletrônica Digital II
if ( E == 1’b1 )C = A | B;
end
endmodule
Descrição no Quartus II
ENA
Latch D com habilitação
Verilog | Elementos de memória
Latch D
D Q
E
// Latch D com habilitação
module latchD( D, E, Q );
input D, E; // entradasoutput Q; // saídasreg Q; // registros
always @( D or E )begin
ELT601 – Eletrônica Digital II
Eif ( E == 1’b1 )
Q = D;end
endmodule
Descrição no Quartus II
Latch D com habilitação e clear
Verilog | Elementos de memória
// Latch D com habilitação
Latch D
D Q
QE
// Latch D com habilitação
module latchD( D, E, CLR, Q, Qb );input D, E, CLR; // entradasoutput Q, Qb; // saídasreg Q; // registros
always @( D or E or CLR )begin
if ( CLR == 1’b0 )Q = 1’b0;
ELT601 – Eletrônica Digital II
QE Q = 1’b0;else if ( E == 1’b1 )
Q = D;end
assign Qb = ~Q;
endmoduleDescrição no Quartus II
clr
Sensibilidade à borda
Verilog | Elementos de memória
// Exemplo de sensibilidade à borda
module borda( A, B, C, E );input A, B, E; // entradasoutput C; // saídasreg C; // registros
always @( posedge E )begin
C = A | B;
A
B
E
C C
FF D
D Q
ELT601 – Eletrônica Digital II
C = A | B;
end
endmodule
Descrição no Quartus II
Flip-flop D
Verilog | Elementos de memória
// FF D
module ffd( CLK, D, Q);input CLK, D; // entradasoutput Q; // saídasreg Q; // registros
always @( posedge CLK )begin
Q = D;
FF D
D Q
ELT601 – Eletrônica Digital II
Q = D;
end
endmodule
Descrição no Quartus II | Mapeamento na tecnologia
Flip-flop D com RESET assíncrono
Verilog | Elementos de memória
// FF D com RESET assíncrono
module ffdr( CLK, D, RST, Q);input CLK, D, RST; // entradasoutput Q; // saídasreg Q; // registros
always @( negedge CLK or negedge RST )begin
if ( !RST ) Q = 1’b0;
FF D
D Q
ELT601 – Eletrônica Digital II
if ( !RST ) Q = 1’b0; else Q = D;
end
endmodule
Descrição no Quartus II
RST
Flip-flop D com RESET síncrono
Verilog | Elementos de memória
// FF D com RESET síncrono
module ffdrs( CLK, D, RST, Q);input CLK, D, RST; // entradasoutput Q; // saídasreg Q; // registros
always @( posedge CLK)begin
if ( !RST ) Q = 1’b0; FF D
D Q
RST
‘0’10
D
RST
ELT601 – Eletrônica Digital II
if ( !RST ) Q = 1’b0; else Q = D;
end
endmodule
Descrição no Quartus II | Mapeamento na tecnologia
RST
CLK
Aplicação: Registrador paralelo de 4 bits
Verilog | Elementos de memória
S[3]
Latch D
D Q
ENA
S[2]
Latch D
D Q
ENA
S[1]
Latch D
D Q
ENA
S[0]
Latch D
D Q
ENA
Hreg4bits
ELT601 – Eletrônica Digital II
E[3] E[2] E[1] E[0]
Hreg4bits
Aplicação: Registrador paralelo de 4 bits
Verilog | Elementos de memória
reg4bits
E S
H
4 4
// Registrador paralelo de 4 bits com habilitação
module reg4bits( E, H, S );
input [3:0] E; // entradasinput H; // entradasoutput [3:0] S; // saídasreg [3:0] S; // registros
always @( H or E )begin
ELT601 – Eletrônica Digital II
Descrição no Quartus II
Hbegin
if ( H )S = E;
end
endmodule
Aplicação: Registrador síncrono paralelo de 4 bits
Verilog | Elementos de memória
Q[3]
FF D
D Q
Q[2]
FF D
D Q
Q[1]
FF D
D Q
Q[0]
FF D
D Q
Hreg4sCLK
ENA ENA ENA ENA
ELT601 – Eletrônica Digital II
D[3] D[2] D[1] D[0]
reg4sCLK
Aplicação: Registrador síncrono paralelo de 4 bits
Verilog | Elementos de memória
reg4s
D Q
H
4 4
// Registrador síncrono paralelo de 4 bits
module reg4s ( CLK, H, D, Q );
input [3:0] D; // entradasinput CLK, H; // entradasoutput [3:0] Q; // saídasreg [3:0] Q; // registros
always @( posedge CLK )beginCLK
ELT601 – Eletrônica Digital II
Descrição no Quartus II
begin
if ( H )Q = D;
end
endmodule
CLK
Parâmetros
Verilog | Elementos de memória
parameter [a:b] nome = ;
nome único para o parâmetro
palavra
valor
valor numéricolimites
[ ]
ELT601 – Eletrônica Digital II
palavrareservada
valor numéricopara o parâmetro
[ … ] parâmetro opcional
limites
Instância de módulos parametrizados
Verilog | Elementos de memória
regNbits
E S
H
N N
// Registrador paralelo de “N” bits com habilitação
module regNbits( E, H, S );
parameter N = 2;
input [N-1:0] E; // entradasinput H; // entradasoutput [N-1:0] S; // saídasreg [N-1:0] S; // registros
ELT601 – Eletrônica Digital II
Descrição no Quartus II
Halways @( H or E )begin
if ( H )S = E;
end
endmodule
Aplicação
Verilog | Elementos de memória
regNbits
E S
H
N N
// Registrador paralelo de “6” bits com habilitação
module teste_reg( E1, E2, H, S1, S2 );
input [2:0] E1; // entradasoutput [2:0] S1; // saídasinput H; // entradasinput [5:0] E2; // entradasoutput [5:0] S2; // saídas
// Instância parametrizada
ELT601 – Eletrônica Digital II
Descrição no Quartus II
H // Instância parametrizada
regNbits #(3) reg3bits( E1, H, S1);regNbits #(6) reg6bits( E2, H, S2);
endmodule
Operador de concatenação
Verilog | Elementos de memória
{ , , …, }v1 v2 vn
delimitação dos vetores a concatenar
Vetores (sinal ou registro) a serem concatenados
ELT601 – Eletrônica Digital II
vetores a concatenar
Operador de concatenação
Verilog | Elementos de memória
wire [ 2: 0 ] a, b;reg [0:4] c;
a = 3b’101; b = 6; c = 5’01010;
{ }
{ 3’b111, 2b’00 } 5‘b11100
ELT601 – Eletrônica Digital II
{ a, 2b’11 } 5‘b10111
{ b, c } 8‘b11001010
{ a[0], b[2], c[2:3] } 4‘b1101
Aplicação: Registrador de deslocamento
Verilog | Elementos de memória
Q[3]23
FF D
D Q
FF D
D Q
FF D
D Q
FF D
D QE S
Q[2]22
Q[1]21
Q[0]20
ELT601 – Eletrônica Digital II
regserialCLK
Aplicação: Registrador de deslocamento
Verilog | Elementos de memória
regserial
E Q4
CLK
S
// Registrador serial de 4 bits
module regserial ( CLK, E, Q, S );
input CLK, E, // entradasoutput S; // saídasoutput [3:0] Q; // saídasreg [3:0] Q; // registros
always @( posedge CLK )begin
ELT601 – Eletrônica Digital II
CLK beginQ = { E, Q[3:1] };
end
assign S = Q[0];
endmodule
Exercícios
Verilog | Elementos de memória
1 Altere o registrador de deslocamento de forma a incluir um sinal de seleção para a direção do deslocamento
2 Implemente um registrador paralelo para serial com sinal de carregamento síncrono
ELT601 – Eletrônica Digital II
Verilog | Elementos de memória
Obrigado
ELT601 – Eletrônica Digital II