Menu
Coddy logo textTech

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.

challenge icon

Desafio

Médio

Implemente 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;
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