1

線形関数シフト レジスタの 32 ビット浮動小数点ベクトルを連結しようとすると、ビヘイビア シミュレーションではすべてうまくいきます。ただし、合成後、「random_float」ネットは 31 ビットに切り詰められています。「サイン」が無視されているようです。何か案は?

logic       [7:0]   exponent_seed      =   8'b01100101;
logic       [22:0]  mantissa_seed      =   23'b01001011101011110010100;
logic       [31:0]  random_float       =   32'b00000000000000000000000000000000;
logic       [7:0]   exponent           =   exponent_seed;
logic       [22:0]  mantissa           =   mantissa_seed;
logic               sign               =   1'b0;  

wire                exponent_feedback  =   exponent[7] ^ exponent[5] ^ exponent[4] ^ exponent[3];

always @ (exponent or mantissa or sign)
    begin
        random_float <= {sign, exponent, mantissa};
    end

 always @ (posedge clk or posedge reset)
    begin
        if (reset)
            begin
                exponent        <= exponent_seed;
                mantissa        <= mantissa_seed;
            end
         else
            begin
                //use concatenation to shift and feed the vector.
                exponent <= {exponent[6:0], exponent_feedback};
                mantissa <= {mantissa[21:0], mantissa_feedback};
            end
    end        

PS私は、関連するコードであると私が信じているものだけを含めました。

4

1 に答える 1

2

後世のために、以下は合成が定数を最適化するのを防ぎます:

(*KEEP = "TRUE"*) logic       [31:0]  random_float       =   32'b00000000000000000000000000000000;
于 2015-07-16T22:59:44.890 に答える