0

你如何在verilog中将二进制数乘以十?是不是这么简单

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

升级到 Windows 8,我的 xilinx 正在使用 atm。需要尽快了解规划阶段。

4

2 回答 2

2

几乎 - 10 二进制是1010!对于两个 8 位数字相乘,您只需要 16 位即可得到结果,因此reg [15:0] p也可以。关于什么:

 always @( a )
     p = a * 8'd10; 

或者

wire [13:0] p;
assign p = a * 4'd10;
于 2012-11-12T15:31:24.590 回答
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;
于 2012-11-14T01:47:08.043 回答