leyendo datos de una memoria

-2

He escrito el código para leer los datos de la memoria de la siguiente manera:

module memcode(clk1,we,dout);

reg [7:0] add = 8'b00000000;
reg [7:0] din;
input we,clk1;
integer i=0;
output [7:0] dout;
reg [7:0] dout;
reg [7:0] data;
wire [7:0] douta;
//assign data = dout;

always @ (posedge clk1) begin
  if (we == 1) begin
    if (i < 255) begin
      data <= din;
      add = add+1;
      i = i+1;
      dout = data;
      //dout = douta;
    end
  end
end

bram8 u1 (
  .clka(clk1),
  .wea(we),      // Bus [0 : 0] 
  .addra(add),   // Bus [7 : 0] 
  .dina(din),    // Bus [7 : 0] 
  .douta(dout)); // Bus [7 : 0] 

endmodule

Sin embargo, estoy recibiendo los errores:

ERROR:HDLCompilers:246 - "memcode.v" line 55 Reference to vector reg 'dout' is not a legal net lvalue
ERROR:HDLCompilers:102 - "memcode.v" line 55 Connection to output port 'douta' must be a net lvalue

Cuando ejecuto la sintaxis de verificación, no recibo ningún error; sin embargo, cuando intento sintetizar, obtengo los errores anteriores. ¿Alguien puede ayudarme, por favor, adónde voy mal?

    
pregunta sumi

2 respuestas

2

Hay muchos problemas con el código fuente. Si dibuja el diagrama de bloques que representa, los problemas se vuelven obvios:

  • din no tiene ninguna fuente
  • dout tiene dos fuentes
  • i nunca se inicializa

De hecho, está tan desordenado que realmente no está claro cuál fue tu verdadera intención. Si se suponía que este módulo representaba una memoria de solo lectura, ¿por qué tiene un we ? Y si tiene un we , ¿por qué no tiene un bus de entrada de datos?

    
respondido por el Dave Tweed
1

No hay tiempo para explorar en detalle ahora, pero intente cambiar douta a reg , y use todas las asignaciones no bloqueantes (es decir, <= ) en su bloque siempre.
También verifique la documentación del módulo bram8 y cómo se debe usar (por ejemplo, qué entradas espera, etc.)

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas