首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在verilog测试平台中如何将4位十六进制数转换成bcd

在verilog测试平台中如何将4位十六进制数转换成bcd
EN

Stack Overflow用户
提问于 2014-06-26 11:40:15
回答 2查看 9.4K关注 0票数 2
代码语言:javascript
复制
`include "bcd.v"

module bcd_4(A,B,Cin,S,Cout);
input [15:0] A,B;
input Cin;
output [15:0] S;
output Cout;
wire w1,w2,w3;

bcd_adder U1(.A(A[3:0]),.B(B[3:0]),.Cin(Cin),.S(S[3:0]),.Cout(w1));
bcd_adder U2(.A(A[7:4]),.B(B[7:4]),.Cin(w1),.S(S[7:4]),.Cout(w2));
bcd_adder U3(.A(A[11:8]),.B(B[11:8]),.Cin(w2),.S(S[11:8]),.Cout(w3));
bcd_adder U4(.A(A[15:12]),.B(B[15:12]),.Cin(w3),.S(S[15:12]),.Cout(Cout));

endmodule

我用四位BCD加法器设计了一个四位BCD加法器.输入'A‘和'B’采用十六进制值。如何编写一个测试平台,使输入值仅为十进制?我还要检查以下条件:

代码语言:javascript
复制
if({Cout,S}==A+B+Cin) $display("pass");  
else $stop;  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-26 12:29:42

加法器的输入不采用十六进制值。它们是16位输入,代表4位BCD数字,每个4位.每个数字的输入可以从0到15小数点,但由于它们是BCD,任何大于9的值都将无效。

输入可以在任何基(二进制、八进制、十进制或十六进制)中指定。

以下各点是等同的:

代码语言:javascript
复制
A <= 10;
A <= 4'd10;
A <= 4'hA;
A <= 4'b1010;

如果您只想在您的测试平台中生成有效的BCD值输入,您应该生成完整的4位数字作为一个整数,然后将每个数字转换成适当的位来驱动您的设计。

例如,要驱动输入A (0到9999)的每个有效值,可以执行以下操作:

代码语言:javascript
复制
integer a;
for (a = 0; a < 10000; a = a + 1) begin

  // a is an integer
  // A is a 16-bit, 4-digit BCD value

  A[3:0] = a % 10;            // digit 0, ones place
  A[7:4] = (a / 10) % 10;     // digit 1, tens place
  A[11:8] = (a / 100) % 10;   // digit 2, hundreds place
  A[15:12] = (a / 1000) % 10; // digit 3, thousands place

end

为了对输出进行采样,您需要将4位4位BCD数字反转换为整数.

下面是一个完整的、可运行的示例,其中包括用于采样和验证输出的代码:http://www.edaplayground.com/x/2pT

票数 3
EN

Stack Overflow用户

发布于 2014-07-02 05:43:31

这样啊,原来是这么回事。我可以使用以下函数编写它

代码语言:javascript
复制
function integer hexatodecimal;
 input [16:0] a; 
 integer b;
 begin
 b=a[3:0]+a[7:4]*10+a[11:8]*100+a[15:12]*1000+a[16]*10000;
 hexatodecimal=b;
 end
endfunction

我可以调用这个函数将{Cout,S}转换为十六进制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24429569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档