Tengo una pequeña duda relacionada con la condición de inicialización en Verilog. Como en una declaración dada:
module rf(out1,ack,en,a,f,c,d,e,clka);
input [7:0] a,f,c,d,e;
input clka, en;
output reg [7:0] out1;
output reg ack;
reg[7:0] b[1:5];
reg [1:0] first=0; reg [2:0] k;
initial begin
for (k = 1; k <6; k = k + 1) begin
b[k] = 0;
end
end
always @(negedge clka) begin
if (en==1) begin
if (first==0) begin
first<=1;
end
if (first==1) begin
first<=2;
b[1]<=a;
b[2]<=f;
b[3]<=c;
b[4]<=d;
b[5]<=e;
end
end
end
endmodule
Inicialicé reg primero = 0; Es correcto ? Ya que está dando un resultado correcto después de la simulación, ¿pero hay algún problema cuando lo sintetizamos? Utilicé la primera condición porque quería ejecutar sentencias escritas dentro de (primer == 1) ejecución después de un pulso de reloj.
¿Es el camino correcto? Si no es así, ¿qué debo hacer si quiero ejecutar algunas declaraciones después de uno o dos pulsos de reloj?
Espero haber explicado mi confusión claramente.
P.S:
module median_five_sh(out1,ack,reset,a,f,c,d,e,clka);
input [7:0] a,f,c,d,e;
input clka,reset;
output reg [7:0] out1;
output reg ack;
reg en0,en1,en2,en3,en4,en5,en6,en7,en8,en9;
reg[7:0] b[1:5],tmp;
reg first;
reg [3:0] i1,i2,n1,k;
initial begin
for (k = 1; k <6; k = k + 1) begin
b[k] = 0;
end
end
always @( posedge reset) begin
en0<=0;en1<=0;en2<=0;en3<=0;en4<=0;en5<=0;en6<=0;en7<=0;en8<=0;en9<=0;
first<=0;
i1<=0;i2<=0;n1<=0;k<=0;
tmp=0;
end
always @(negedge clka) begin
if (reset==1) begin
statement;
en0<=1;
en1<=1;
.
.
end
end
endmodule
El código anterior está simulando y dando salida correcta pero está dando el error después de la síntesis.
** Error: la señal en0 en la unidad .... está conectada a los siguientes controladores múltiples:
* Quería ejecutar sentencias escritas en siempre @ (restablecimiento de posición) solo una vez mientras estaba inicialmente. Básicamente es su inicialización de variables utilizadas en posterior declaración.