如何将两位BCD码转换成二进制?
How to convert two digit BCD into binary?
我想做一个基于fpga板(spartan 3)的计算器。我有以下代码
module bcd_converter(
input [7:0] R,
output reg [3:0] Hundreds,
output reg [3:0] Tens,
output reg [3:0] Ones
);
integer i;
always @ (R)
begin
Hundreds = 4'd0;
Tens = 4'd0;
Ones = 4'd0;
for(i=7;i>=0;i = i-1) begin
if(Hundreds >= 5)
Hundreds = Hundreds + 3;
if(Tens >= 5)
Tens = Tens + 3;
if(Ones >= 5)
Ones = Ones + 3;
Hundreds = Hundreds<<1;
Hundreds[0] = Tens[3];
Tens = Tens << 1;
Tens[0] = Ones[3];
Ones = Ones<<1;
Ones[0] = R[i];
end
end
endmodule
但是,提供的代码仅将二进制转换为 BCD。我正在寻找一种方法来扭转这种算法。 BCD转二进制有没有更好的方法?
您可以使用单独的 case 语句将每个 BCD 数字解码为二进制,然后将结果相加。例如,对于数百个,您的案例陈述将如下所示:
case(hundreds)
4'd0 : hundreds_bin = 9'd0;
4'd1 : hundreds_bin = 9'd100;
4'd2 : hundreds_bin = 9'd200;
4'd3 : hundreds_bin = 9'd300;
//..etc etc
我想做一个基于fpga板(spartan 3)的计算器。我有以下代码
module bcd_converter(
input [7:0] R,
output reg [3:0] Hundreds,
output reg [3:0] Tens,
output reg [3:0] Ones
);
integer i;
always @ (R)
begin
Hundreds = 4'd0;
Tens = 4'd0;
Ones = 4'd0;
for(i=7;i>=0;i = i-1) begin
if(Hundreds >= 5)
Hundreds = Hundreds + 3;
if(Tens >= 5)
Tens = Tens + 3;
if(Ones >= 5)
Ones = Ones + 3;
Hundreds = Hundreds<<1;
Hundreds[0] = Tens[3];
Tens = Tens << 1;
Tens[0] = Ones[3];
Ones = Ones<<1;
Ones[0] = R[i];
end
end
endmodule
但是,提供的代码仅将二进制转换为 BCD。我正在寻找一种方法来扭转这种算法。 BCD转二进制有没有更好的方法?
您可以使用单独的 case 语句将每个 BCD 数字解码为二进制,然后将结果相加。例如,对于数百个,您的案例陈述将如下所示:
case(hundreds)
4'd0 : hundreds_bin = 9'd0;
4'd1 : hundreds_bin = 9'd100;
4'd2 : hundreds_bin = 9'd200;
4'd3 : hundreds_bin = 9'd300;
//..etc etc