Verilog将十进制小数转二进制小数
module DecimalToBinary (
input [18:0] decimal_fraction, // 19位输入,表示小数部分
output reg [18:0] binary_output //19位输出,表示二进制输出
);
reg [24:0] decimal_fraction_reg;
reg [6:0] i;
reg [18:0] binary_output_reg = 19'b0;
always @(*) begin
binary_output = 19'b0; // 初始化19位二进制输出
decimal_fraction_reg=decimal_fraction;
// 循环将小数部分转换为二进制
// 将小数部分乘以2,取整数部分作为二进制位
// 重复这个过程19次(小数部分有19位)
for (i = 0; i < 19; i=i+1) begin
decimal_fraction_reg = decimal_fraction_reg<<1;
if(decimal_fraction_reg<20'd1000_000)binary_output_reg[19-i-1]=1'b0;
else begin binary_output_reg[19-i-1] = 1'b1; decimal_fraction_reg = decimal_fraction_reg-20'd1000_000 ;end
end
binary_output=binary_output_reg[18:0];
end
endmodule