Menu
Coddy logo textTech

Portas de Leitura Registradas

Parte da seção Design e Verificação RTL do Journey de Verilog da Coddy. Lição 23 de 38.

Uma leitura registrada captura dados da memória em uma borda de clock e mantém esse valor depois dela. Uma habilitação de leitura pode preservar a saída anterior nos ciclos desabilitados. Redefinir o registrador de leitura não exige limpar cada palavra da memória. Com atribuições de leitura e escrita não bloqueantes, a expressão de leitura vê a palavra anterior à borda.

Trecho relevante; as declarações e conexões ao redor são fornecidas no desafio.

always @(posedge clk) begin
    if(we) mem[waddr] <= data;
    if(rst) q <= 0;
    else if(re) q <= mem[raddr];
end

O registrador de saída atualiza apenas na borda especificada e no caminho habilitado.

Latência de leitura do documento, comportamento de leitura desabilitada e qual redefinição de estado realmente limpa.

challenge icon

Desafio

Médio

Implemente uma memória de quatro palavras de 8 bits com escrita síncrona e leitura registrada de q. we escreve nas bordas de subida. rst limpa sincronamente apenas q; caso contrário, re carrega q a partir de mem[raddr] antes da borda; re=0 mantém q. A memória não é reiniciada, e as escritas são independentes de rst. Se a leitura e a escrita compartilharem um endereço em uma borda, q receberá a palavra antiga. Os testes inicializam as palavras antes das leituras habilitadas. Colunas de saída: q. Todos os controles e dados permanecem estáveis antes de cada borda de subida do clock; os resultados são observados depois.

Complete design.v e preserve os nomes e as portas do módulo. O testbench.v bloqueado fornece as alterações de entrada e imprime as saídas depois que elas se estabilizam. Ele escolhe um cenário usando um argumento do simulador, como +CASE=1; não é necessária entrada padrão. Não adicione impressão, atrasos ou encerramento da simulação ao design. A saída esperada é uma linha de valores decimais por observação, separados por um espaço e terminando com uma nova linha.

Experimente você mesmo

module dut (input clk, input rst, input we, input re, input [1:0] waddr, input [1:0] raddr, input [7:0] data, output reg [7:0] q);
    // Substitua este placeholder pelo seu design.
    initial q = 0;
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Design e Verificação RTL

Pratique por conta própria: Compilador de Verilog online