La asignación concurrente o la conexión del puerto de salida debe ser un tipo de red

1

Para el siguiente código, obtengo varios errores:

1) Target <mem> of concurrent assignment or output port connection should be a net type.

2) in_d0_ is not a constant

¿Cómo se puede resolver este problema?

module module_cell44( in_d0,in_d1,in_d2,in_d3,out_61,out_68,clk );
    parameter DATA_WIDTH = 16;
    parameter ADDR_WIDTH = 8;
    parameter ADDR_DEPTH = 1 << ADDR_WIDTH;

// Interfaces
input clk;

input [DATA_WIDTH - 1:0] in_d0,in_d1,in_d2,in_d3;
output [DATA_WIDTH - 1:0] out_61,out_68;
reg [DATA_WIDTH - 1:0] out_61,in_d0_,in_d1_;
//Cell's memory array
reg [DATA_WIDTH - 1:0] mem[0:ADDR_DEPTH - 1];


// Procedural Assignments

always @ ( posedge clk )
begin
in_d0_ <= in_d0;
in_d1_ <= in_d1;
mem[in_d2]<=in_d3;
end


// Continues Assinmnents

 assign mem[in_d0_] = in_d1_;

endmodule
    
pregunta Yakov

2 respuestas

5

No puede conducir un tipo reg a través de una asignación continua (solo un wire puede ser manejado de esta manera).

Si esto es solo un ejemplo de lógica combinatoria, podría usar un bloque de combinación combinatoria:

always @* begin
    mem[in_d0_] = in_d1_;
end

Sin embargo, esto no parece tener mucho sentido para mí para escribir en un módulo de memoria, que generalmente es algo que está escrito en el borde del reloj. Quizás quieras hacer de esto un bloque cronometrado:

always @(posedge clk)
    mem[in_d0_] = in_d1_;
end
    
respondido por el Tim
0

Aunque es la propuesta de Cliff de eliminar Type Reg, como parte de eso, explica los tipos de Verilog en detalle en este documento.

Este documento detallará las diferencias entre los tipos de datos de registro y de red y propondrá una mejora en el lenguaje Verilog que eliminaría la necesidad de declarar los tipos de datos de registro en conjunto

Una propuesta para eliminar esos tipos de datos de registros feos de Verilog

    
respondido por el CapnJJ

Lea otras preguntas en las etiquetas