Hola EE StackExchange!
Hace varios meses que intento diseñar una CPU simple de 8 bits. Sin embargo, estoy experimentando un problema: la ALU genera el resultado de la operación dos ciclos de reloj después de que se ha presentado con datos válidos. ¿Por qué sucede esto y, lo que es más importante, hay alguna manera de rectificar este comportamiento? La arquitectura FPGA contra la que estoy simulando es Spartan 3, y la ALU está escrita en verilog.
El código siguiente:
module alu (input [7:0] a,b,
input [3:0] opcode,
input clk, reset,
output reg [7:0] y,
output reg cout);
/* Decode the instruction */
always @(posedge clk)
if(reset == 1)
begin
y <= 8'b0;
cout <= 0;
end
else if(reset == 0)
begin
case (opcode)
4'h00 /* OR */: y <= a | b;
4'h01 /* AND */: y <= a & b;
4'h02 /* NOTA */: y <= ~a;
4'h03 /* XOR */: y <= a ^ b;
4'h04 /* ADD */: y <= a - b;
4'h05 /* SUB */: y <= a - b;
endcase
end
endmodule //alu