原Verilog程序如下:
wire [22:0] Total_Max;
reg [23:0] Mixed_Max;
wire [23:0] overflow_elim;
assign overflow_elim = mixed_audio[23:0] * Total_Max/Mixed_Max;
仿真之后得出的结果overflow_elim 总是0。
于是将overflow_elim 的位宽从24bit增加到48bit,即:
wire [47:0] overflow_elim;
然后就能出线正确的结果。
这其中的思想应该和软件是一致的,需要足够的存储空间来存储mixed_audio[23:0] * Total_Max的计算结果。
Total_Max是23bit的数,因此和mixed_audio相乘之后的最大值为48bit。然后在进行除法操作。