gpt4 book ai didi

algorithm - 在verilog中添加和移动

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:26:58 26 4
gpt4 key购买 nike

这是我关于加法和移位乘法的verilog代码当我编译和初始化并添加输入和输出以获取波形并对其进行仿真时,我没有看到任何结果,一切都是 z...有什么问题?

module multi(a, b, ans);
input [3:0] a;
input [3:0] b;
output reg [15:0] ans;
reg [15:0] aa;
reg [15:0] bb;
reg [15:0] tmp=0;
reg flag = 1'b1;

always @( a, b)
begin
aa = a;
bb = b;
while ( flag == 1'b1 )
begin
if( bb[0] == 1'b1 )
tmp = tmp + aa;
aa = aa << 1;
bb = bb >> 1;
if ( bb==0 )
flag = 1'b0;
end
ans = tmp;
end

endmodule

最佳答案

这段代码有很多地方看起来很奇怪。

首先是您没有时钟输入,但正在尝试使用组合逻辑来完成所有事情。

其次,在 reg 语句中将标志设置为 1 将意味着您的模块只能进行一次乘法运算。顺便说一句,使用复位信号比在 reg 行中使用此初始化更正常(尤其是对于 ASIC 设计)。

第三个是 4 位数字乘以 4 位数字将得到 8 位答案,而不是 16 位。

无论如何,除非您以非常高的速度工作,否则您应该能够在一个周期内执行乘法运算。

这里有几种更自然地编写此代码的方法:

组合风格

module multi(a, b, ans);
input [3:0] a;
input [3:0] b;
output reg [7:0] ans;

always @(*)
begin
ans = a * b;
end
endmodule

时钟样式

module multi(clk, a, b, ans);
input [3:0] a;
input [3:0] b;
output reg [7:0] ans;

always @(posedge clk)
begin
ans <= a * b;
end
endmodule

关于algorithm - 在verilog中添加和移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23837921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com