He escrito un código verilog y la simulación RTL está funcionando bien. Después de esto, sinteticé el diseño utilizando la herramienta XST en Xilinx ISE 13.2. La simulación post-síntesis está mostrando algunos resultados inesperados. No sé qué salió mal, ya que no hubo advertencias durante la simulación. ¿Qué debería hacer ahora? ¿Hay alguna manera de depurar netlist nivel post síntesis? ¿Cómo puedo saber qué hace mi herramienta de síntesis (XST) con mi diseño? He incluido parte de mi código fuente. Es para el control de FSM de mi diseño.
always @ (posedge clock)
begin
case (state) // s0, s1, s2, s3, s_reset are parameters
s_reset:
begin
if(start_proc)
state <= s0;
else
state <= s_reset;
end
s0: begin
pixel_value <= dataOut_bigimage;
pixel_ref <= dataOut_smallimage;
j <= j+1;
if(j==1'b1)
i <= i+1;
if ({i,j} == 2'b11)
if(base_col == 3'b101)
begin
base_row_prev <= base_row;
base_col_prev <= base_col;
base_col <= 3'b000;
base_row <= base_row+1;
end
else
begin
base_col <= base_col+1;
base_col_prev <= base_col;
base_row_prev <= base_row;
end
state <= s1;
end
s1: begin
if (pixel_value <= pixel_ref)
accumulator <= accumulator+1;
else
accumulator <= accumulator;
if({i,j} == 2'b00)
state <= s2;
else state <= s0;
end
s2: begin
if (accumulator > 2'b01)
begin
matchcount <= matchcount+1;
rowmatch[matchcount] <= base_row_prev;
colmatch[matchcount] <= base_col_prev;
end
accumulator <= 2'b00;
if (base_row == 2'b11)
state <= s3;
else
state <= s0;
end
s3: begin
task_done <= 1'b1;
state <= s3;
end
Cada cosa dentro del bloque siempre es del tipo de datos reg y se inicializa correctamente en un bloque inicial separado
Gracias de antemano