我正在尝试将verilog中的Hex转换为BCD。我没有使用任何时钟或其他东西。在我的程序中,我一次输入一个输入并转换它并显示结果。但是我的程序给出了未定义的结果。我该如何解决?任何解决方案?
module HexToBCD(num,result);
input num;
output [7:0]result;
assign result[0]=num%2;
assign num=num/2;
assign result[1]=num%2;
assign num=num/2;
assign result[2]=num%2;
assign num=num/2;
assign result[3]=num%2;
assign num=num/2;
assign result[4]=num%2;
assign num=num/2;
assign result[5]=num%2;
assign num=num/2;
assign result[6]=num%2;
assign num=num/2;
assign result[7]=num%2;
assign num=num/2;
endmodule
此致
答案 0 :(得分:1)
我看到你的模块有一些不寻常的东西。
num
是1位宽,但您要将其除以2。
您正在分配给input
。
您对num
进行了8次相同的分配。 Verilog不是这样的;所有连续分配都是并行评估的。
答案 1 :(得分:0)
以下代码将8位二进制数转换为BCD等效数。有关该算法的说明,请参阅this link。
module bcd (
input [7:0] binary,
output reg [3:0] hundreds,
output reg [3:0] tens,
output reg [3:0] ones);
integer i;
always @(binary) begin
// set 100's, 10's, and 1's to zero
hundreds = 4'd0;
tens = 4'd0;
ones = 4'd0;
for (i=7; i>=0; i=i-1) begin
// add 3 to columns >= 5
if (hundreds >= 5)
hundreds = hundreds + 3;
if (tens >= 5)
tens = tens + 3;
if (ones >= 5)
ones = ones + 3;
// shift left one
hundreds = hundreds << 1;
hundreds[0] = tens[3];
tens = tens << 1;
tens[0] = ones[3];
ones = ones << 1;
ones[0] = binary[i];
end
end
endmodule