2012-11-12 57 views
0

如何在Verilog中将二进制数乘以十? 它是那样简单verilog中乘以十的数字

reg [7:0] a,b; 
reg[31:0] p; 
b= 8'b00001001; 
p=a*b; 

升级到Windows 8,我的赛灵思工作大气压。需要尽快知道计划阶段。

回答

2

近二十二进制是1010!对于乘以两个8位数字,结果只需要16位,所以reg [15:0] p可以。怎么样:

​​

wire [13:0] p; 
assign p = a * 4'd10; 
+0

你确定a * b给出16位结果吗?我认为在Verilog算术结果中,capasity和它的论点是一样的。 –

0

我不知道的HDL综合工具有多好,在乘以转换为位移位。我不想为这个代码偶然综合乘法器(即使你的CPU不太可能使用乘法器)。

wire [7:0] a; 
wire [11:0] shift2; 
wire [11:0] shift1; 
wire [11:0] result; 

assign shift2 = a << 3; // a * 8 
assign shift1 = a << 1; // a * 2 
assign result = shift2 + shift1; 
+0

当操作数被修复时,现代综合工具往往非常高效。使用'*常数'还可以使这些工具进行功耗优化,并且在推动时机时可以自由选择更快的架构。 – Morgan