Bit mismatch solve
diff --git a/verilog/dv/FPU_Half/FPU_Half_tb.v b/verilog/dv/FPU_Half/FPU_Half_tb.v
index 23db252..e5e9efc 100644
--- a/verilog/dv/FPU_Half/FPU_Half_tb.v
+++ b/verilog/dv/FPU_Half/FPU_Half_tb.v
@@ -125,6 +125,7 @@
wait(mprj_io_0 == 16'hBCF0);
*/
// Observe Output pins [23:8] for FMUL
+ /*
wait(mprj_io_0 == 16'h60C2);
wait(mprj_io_0 == 16'h30A7);
wait(mprj_io_0 == 16'h67FF);
@@ -133,6 +134,25 @@
wait(mprj_io_0 == 16'h5124);
wait(mprj_io_0 == 16'h6058);
wait(mprj_io_0 == 16'h0000);
+ */
+ // Observe Output pins [23:8] for FADD/FSUB
+
+ wait(mprj_io_0 == 16'h5848);
+ wait(mprj_io_0 == 16'h3CE7);
+ wait(mprj_io_0 == 16'h5A92);
+ wait(mprj_io_0 == 16'h5E40);
+ wait(mprj_io_0 == 16'hE09C);
+ wait(mprj_io_0 == 16'hDCDA);
+ wait(mprj_io_0 == 16'hDF0E);
+ wait(mprj_io_0 == 16'h0000);
+ wait(mprj_io_0 == 16'hD7FC);
+ wait(mprj_io_0 == 16'hBBAE);
+ wait(mprj_io_0 == 16'hD9EE);
+ wait(mprj_io_0 == 16'h4D20);
+ wait(mprj_io_0 == 16'hC920);
+ wait(mprj_io_0 == 16'hDCD8);
+ wait(mprj_io_0 == 16'hDF04);
+ wait(mprj_io_0 == 16'hBD78);
$display("MPRJ-IO state = %h", mprj_io[23:8]);
diff --git a/verilog/rtl/FPU/Dec_gpr_ctl.v b/verilog/rtl/FPU/Dec_gpr_ctl.v
index ad2c597..babaa54 100644
--- a/verilog/rtl/FPU/Dec_gpr_ctl.v
+++ b/verilog/rtl/FPU/Dec_gpr_ctl.v
@@ -46,7 +46,7 @@
integer p;
always @(*) begin
if(rst_l == 1'b0) begin
- w0v = 32'h00000000;
+ w0v = 31'h00000000;
for(p=1; p<32; p=p+1) begin
gpr_in[p] = {XLEN{1'b0}};
end
diff --git a/verilog/rtl/FPU/FPU_decode.v b/verilog/rtl/FPU/FPU_decode.v
index ca3d2f5..cc706fb 100644
--- a/verilog/rtl/FPU/FPU_decode.v
+++ b/verilog/rtl/FPU/FPU_decode.v
@@ -101,7 +101,7 @@
always @(posedge clk) begin
if(rst_l == 1'b0 | illegal_config)
begin
- control_signals_r <= 114'h0;
+ control_signals_r <= 115'h0;
end
else
@@ -113,7 +113,7 @@
end
else if((~valid_execution) | ((~fpu_active) & (fpu_complete)))
begin
- control_signals_r <= 114'h0;
+ control_signals_r <= 115'h0;
end
else
begin
diff --git a/verilog/rtl/FPU/beh_lib.v b/verilog/rtl/FPU/beh_lib.v
index 32a2894..67b166f 100644
--- a/verilog/rtl/FPU/beh_lib.v
+++ b/verilog/rtl/FPU/beh_lib.v
@@ -18,7 +18,7 @@
end
else always @(posedge clk or negedge rst_l)
if (rst_l == 0)
- dout[WIDTH - 1:0] <= 0;
+ dout[WIDTH - 1:0] <= {{WIDTH{0}};
else
dout[WIDTH - 1:0] <= din[WIDTH - 1:0];
endgenerate
@@ -707,4 +707,4 @@
wire SE;
assign SE = 0;
assign l1clk = clk;
-endmodule
\ No newline at end of file
+endmodule
diff --git a/verilog/rtl/FPU/iccm_controller.v b/verilog/rtl/FPU/iccm_controller.v
index 611396f..21544ac 100644
--- a/verilog/rtl/FPU/iccm_controller.v
+++ b/verilog/rtl/FPU/iccm_controller.v
@@ -71,7 +71,7 @@
ctrl_fsm_ns = LOAD;
else
ctrl_fsm_ns = DONE;
- default: ctrl_fsm_ns = RESET;
+ //default: ctrl_fsm_ns = RESET;
endcase
end
assign rx_byte_d = rx_byte_i;
@@ -82,7 +82,7 @@
always @(posedge clk_i or negedge rst_ni)
if (!rst_ni) begin
we_q <= 1'b0;
- addr_q <= 13'b0000000000000;
+ addr_q <= 14'b00000000000000;
rx_byte_q0 <= 8'b00000000;
rx_byte_q1 <= 8'b00000000;
rx_byte_q2 <= 8'b00000000;
diff --git a/verilog/rtl/FPU/uart_rx_prog.v b/verilog/rtl/FPU/uart_rx_prog.v
index 7af5031..7a046df 100644
--- a/verilog/rtl/FPU/uart_rx_prog.v
+++ b/verilog/rtl/FPU/uart_rx_prog.v
@@ -53,8 +53,8 @@
s_IDLE :
begin
r_Rx_DV <= 1'b0;
- r_Clock_Count <= 0;
- r_Bit_Index <= 0;
+ r_Clock_Count <= 16'h0000;
+ r_Bit_Index <= 3'b000;
if (r_Rx_Data == 1'b0) // Start bit detected
r_SM_Main <= s_RX_START_BIT;
@@ -69,7 +69,7 @@
begin
if (r_Rx_Data == 1'b0)
begin
- r_Clock_Count <= 0; // reset counter, found the middle
+ r_Clock_Count <= 16'h0000; // reset counter, found the middle
r_SM_Main <= s_RX_DATA_BITS;
end
else
@@ -77,7 +77,7 @@
end
else
begin
- r_Clock_Count <= r_Clock_Count + 1;
+ r_Clock_Count <= r_Clock_Count + 16'd1;
r_SM_Main <= s_RX_START_BIT;
end
end // case: s_RX_START_BIT
@@ -88,23 +88,23 @@
begin
if (r_Clock_Count < CLKS_PER_BIT-1)
begin
- r_Clock_Count <= r_Clock_Count + 1;
+ r_Clock_Count <= r_Clock_Count + 16'd1;
r_SM_Main <= s_RX_DATA_BITS;
end
else
begin
- r_Clock_Count <= 0;
+ r_Clock_Count <= 16'h0000;
r_Rx_Byte[r_Bit_Index] <= r_Rx_Data;
// Check if we have received all bits
if (r_Bit_Index < 7)
begin
- r_Bit_Index <= r_Bit_Index + 1;
+ r_Bit_Index <= r_Bit_Index + 3'b001;
r_SM_Main <= s_RX_DATA_BITS;
end
else
begin
- r_Bit_Index <= 0;
+ r_Bit_Index <= 3'b000;
r_SM_Main <= s_RX_STOP_BIT;
end
end
@@ -117,13 +117,13 @@
// Wait CLKS_PER_BIT-1 clock cycles for Stop bit to finish
if (r_Clock_Count < CLKS_PER_BIT-1)
begin
- r_Clock_Count <= r_Clock_Count + 1;
+ r_Clock_Count <= r_Clock_Count + 16'd1;
r_SM_Main <= s_RX_STOP_BIT;
end
else
begin
r_Rx_DV <= 1'b1;
- r_Clock_Count <= 0;
+ r_Clock_Count <= 16'h0000;
r_SM_Main <= s_CLEANUP;
end
end // case: s_RX_STOP_BIT
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v
index 222fde8..5ef6c51 100644
--- a/verilog/rtl/user_proj_example.v
+++ b/verilog/rtl/user_proj_example.v
@@ -94,7 +94,7 @@
// Ouptut at LA bits [31:16]
assign la_data_out[31:0] = 32'h00000000;
assign la_data_out[47:32] = (&la_oenb[47:32]) ? FPU_hp_result : 16'h0000;
- assign la_data_out[127:48] = {79{1'b0}};
+ assign la_data_out[127:48] = {80{1'b0}};
// Assuming LA probes [65:64] are for controlling the count clk & reset
assign clk = (~la_oenb[64]) ? la_data_in[64] : wb_clk_i;