Armazenamento em Matriz de Registradores
Parte da seção Design e Verificação RTL do Journey de Verilog da Coddy. Lição 22 de 38.
Um array não empacotado pode modelar palavras de armazenamento de hardware. Uma escrita sincronizada pelo clock atualiza uma palavra selecionada; uma leitura contínua seleciona uma palavra sem um clock de leitura. A síntese pode implementar arrays pequenos com registradores ou inferir recursos de memória para padrões compatíveis. Nunca presuma que uma palavra não escrita começa em zero.
Trecho relevante; as declarações e conexões ao redor são fornecidas no desafio.
reg [7:0] mem [0:3];
always @(posedge clk)
if(we) mem[waddr] <= data;
assign q = mem[raddr];A escrita é acionada pela borda, enquanto a leitura acompanha a palavra armazenada selecionada.
Defina a habilitação de escrita e a temporização de leitura explicitamente; não dependa de conteúdos de memória initial não especificados.
Desafio
MédioImplemente quatro palavras de 8 bits. Em uma borda de subida, we escreve os dados em mem[waddr]. q é uma leitura combinacional assíncrona de mem[raddr]. A memória não possui reset nem conteúdo initial; o testbench escreve em cada endereço observado antes de lê-lo. As observações ocorrem após a borda, portanto uma escrita no mesmo endereço fica visível em q. 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.
Conclua design.v e preserve os nomes de módulo e as portas. 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 we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
// Substitua este placeholder pelo seu design.
assign q = 0;
endmoduleEsta 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
1RTL Combinacional Confiável
Valores padrão evitam latchesCodificadores de prioridadeValidação One-HotDecodificação segura de caseRecapitulação - Roteador de requisições4RTL Sequencial Controlado
Prioridade de Reset e EnableContadores SaturantesPipeline de Dados e ValidDetecção de Bordas AmostradasRecapitulação - Contador de Eventos7Projeto - Monitor de Amostras
Acumular AmostrasAceitar Amostras Habilitadas2Larguras e Aritmética com Sinal
Preservando Bits de CarryComparações com SinalDeslocamentos Aritméticos à DireitaOverflow e SaturaçãoRecapitulação — Diferença com Sinal5Memória e Tabelas de Consulta
Tabelas ROM CombinacionaisArmazenamento em Matriz de RegistradoresPortas de Leitura RegistradasEncaminhamento entre Leitura e EscritaRecapitulação — Banco com Duas LeiturasPratique por conta própria: Compilador de Verilog online