No he aclarado en absoluto esta parte de Verilog cuando uso < = o cuando =
Tengo algunos bloques siempre que hacen algunos agregados, restan y multiplican un ejemplo es el siguiente:
module Calcs
#
(
parameter RC = 24'h0186DA,
RV = 24'h018666
)
(
input clk, // Clock
//SOME INPUT VALUES FOR VAL1 VAL2 VAL.....
output reg go
);
reg [63:0] val1;
reg [63:0] val2;
reg [63:0] val3;
reg [63:0] val4;
reg [63:0] ValSelected;
reg [127:0] Mult1;
reg [127:0] Mult2;
reg [128:0] Subs;
reg [128:0] Mult3;
reg isNeg;
reg go1;
reg [63:0] LastVal1;
reg [63:0] LastVal2;
reg [63:0] LastValSelected;
always @ (posedge clk) begin
Is_Valid = (val1 != 0) && (val2 !=0);
if (val4 >= val3) ValSelected = val3;
else if (val4 < val3) ValSelected = val4;
if (Is_Valid) begin
Mult1 = val2 * RV;
Mult2 = val1 * RC;
Subs = Mult2 - Mult1;
isNeg = Subs < 0;
if (!isNeg) Mult3 = ValSelected * Subs;
else Mult3 = 0;
if (Mult3 > 1) begin
if (((val1 != LastVal1) || (val2 != LastVal2)) || (ValSelected != LastValSelected)) go1 <= 1'b1;
else if(((val1 == LastVal1) || (val2 == LastVal2)) || (ValSelected == LastValSelected)) go1 <= 1'b0;
end
end
end
always @ (posedge clk) begin
if (go1) begin
LastVal1 = val1;
LastVal2 = val2;
LastValSelected = ValSelected;
go <= 1'b1;
end
else go <= 1'b0;
end
endmodule
Hay un comportamiento extraño cuando uso < = para establecer el valor en go1, esto nunca se ejecuta y si lo cambio por = esto se ejecuta siempre y si se cumple, go1 nunca vuelve a 0
¿Puede alguien ayudarme a entender esto?
perdón si el código tiene algunos problemas, solo hay un ejemplo
Muchas gracias!