дополнение не работает в цикле for-loop verilog

Я пытаюсь написать код Verilog, который будет умножать два числа с плавающей запятой. пытаясь умножить на две мантиссы путем сдвига и добавления, я сталкиваюсь с проблемами. Проблема в том, что когда я пытаюсь обновить переменную «сдвинуть и добавить», C_m_tmp, ничего не происходит (C_m_tmp = C_m_tmp + tmp;). Я пропустил все блоки кода, которые не имеют отношения к моей проблеме. Может ли кто-нибудь сказать мне, что я ошибаюсь?

`timescale 1ns / 1ps
module float_mult( A_m, B_m, C_m);
    input [22:0]A_m, B_m;
    output [45:0]C_m;

    reg [45:0] C_m_tmp;
    reg [22:0] A_m_tmp;
    reg [22:0] B_m_tmp;
    reg [45:0] tmp;
    reg [4:0]i;

    initial begin         
        assign C_m_tmp = 46'b0;
    end
 //need to remove the leading one from mantissas
always@ (A_m) begin
    A_m_tmp = A_m >> 1;
    A_m_tmp = A_m_tmp ^ 23'b10000000000000000000000;
end
always@ (B_m) begin
    B_m_tmp = B_m >> 1;
    B_m_tmp = B_m_tmp ^ 23'b10000000000000000000000;
 end
 always@(A_m_tmp, B_m_tmp) begin
    for (i=0; i <=22; i=i+1)
        if (B_m_tmp[i] == 1)begin
            tmp =  {23'b0,A_m_tmp};
            tmp = tmp <<i;
            C_m_tmp = C_m_tmp + tmp;    //this line does nothing
        end
 end
    always@(C_m_tmp)begin
        if (C_m_tmp[45] == 1) begin
            C_e_tmp = C_e_tmp + 1'b1;
        end

    end


    assign C_e = C_e_tmp + 8'b01111111;
    assign C_m = C_m_tmp[45:23];
    assign C_s = C_s_tmp;        

endmodule

person willieG    schedule 01.04.2016    source источник
comment
Избавьтесь от assign в начальном блоке   -  person Greg    schedule 02.04.2016
comment
Используйте always@* или always_comb вместо ручного списка чувствительности.   -  person sharvil111    schedule 02.04.2016


Ответы (1)


initial begin         
assign C_m_tmp = 46'b0;
end

нет необходимости в приведенном выше коде.

Вместо этого вы можете сделать

always@(C_m_tmp)begin
C_m_tmp = 'b0;
        if (C_m_tmp[45] == 1) begin
            C_e_tmp = C_e_tmp + 1'b1;
        end

    end
person Sourabh    schedule 03.04.2016
comment
Мне пришлось инициализировать C_m_tmp в другом блоке, но это БЫЛ начальный блок, который портил код. Большое спасибо. - person willieG; 08.04.2016