Asignaciones simultáneas sin bloqueo a cables y registros en Verilog

1

Estoy interesado en escribir el módulo Verilog que simultáneamente actualizará varias salidas Algo así como el siguiente código, realiza 3 operaciones al mismo tiempo (clk 10):

module mymodule (a,b,c,d,e);
input a;
input b;
output c;
output d;
output e;

wire b;
wire a;
wire c;
wire d;

reg e;

initial begin
c <=  #10  (a+b);
d <=  #10  a;
e  <= #10  b;
end

endmodule

¿Es ese código legal?

    
pregunta Yakov

2 respuestas

4

// No se puede sintetizar debido a que #delays no se puede traducir a algo que sea la asignación de cables.

reg clk ; //Rising edge every 10 timesteps
initial begin
  clk = 0;
  #5;
  forever begin
    #5 ;
    clk = ~clk;
  end
end

// Sintetizable porque he evitado el uso de un retraso

reg [31:0] counter;
always @(posedge clk or negedge rst_n) begin
  if (~rst_n) begin
    counter <= 32'b0; // <-- reset value! assigned on negedge of reset
  else
    counter <= counter + 1;


always @(posedge clk or negedge rst_n) begin
  if (~rst_n) begin
    c <= 1'b0;
    d <= 1'b0;
    e <= 1'b0;
  end
  else if (counter == 10) begin
    c <=  (a+b);
    d <=   a;
    e <=   b;
    end
  end
endmodule
    
respondido por el Zhaba
1

No. c , d y e deben declararse como reg s

    
respondido por el Eric

Lea otras preguntas en las etiquetas