verilog高手帮我看下这段代码有什么问题

要求是输入两个4位无符号数,计算它们的乘积modulemult_4bit(clk,x,y,result);inputclk;input[3:0]x,y;output[7:... 要求是输入两个4位无符号数,计算它们的乘积

module mult_4bit(clk,x,y,result);

input clk;
input [3:0] x,y;
output [7:0] result;
wire [3:0] sum;

reg [7:0] result;
reg [2:0] cnt;

addr_4bit A1(x,result[7:4],sum);

always @(x,y)
cnt=0;

always @(posedge clk)
begin
if(cnt==0)
result[7:0]=y;

if(cnt!=3'b100)
begin
if(result[0]==1)
result[7:4]=sum;
result=result>>1;
cnt=cnt+1;
end
end

endmodule

module addr_4bit(a,b,sum);

input [3:0] a,b;
output [3:0] sum;

assign sum[0]=a[0]^b[0];
assign sum[1]=a[1]^b[1]^(a[0]&b[0]);
assign sum[2]=a[2]^b[2]^((a[1]&b[1])|(a[1]&(a[0]&b[0]))|(b[1]&(a[0]&b[0])));
assign sum[3]=a[3]^b[3]^((a[2]&b[2])|(a[2]&((a[1]&b[1])|(a[1]&(a[0]&b[0]))|(b[1]&(a[0]&b[0]))))|(b[2]&((a[1]&b[1])|(a[1]&(a[0]&b[0]))|(b[1]&(a[0]&b[0])))));

endmodule

以上的编译能过,但是运行结果乱七八糟,其中那个加法模块单独验证过没有问题,求指点
展开
 我来答
lululinyun
2011-04-15 · 超过17用户采纳过TA的回答
知道答主
回答量:35
采纳率:100%
帮助的人:28.2万
展开全部
你要用的是调用模块,还是调用task呀?
addr_4bit A1(x,result[7:4],sum);你写的这个像是调用task
但是根据你上面的做法,你想要的是调用模块addr_4bit。
所以你有两个选择,要么把下面那个module addr_4bit改成task。要么就把addr_4bit A1(x,result[7:4],sum);改成调用模块形式
追问
我初学,还不知道task什么的,调用模块不是这么写的吗?
追答
1.定义任务task的语法如下:
task;

endtask
2.任务调用:
(端口1,端口2,...,端口n);

3.调用模块
例如 module half_clk(rest,clk_in,clk_out);
input clk_in,reset;
output clk_out;
....
endmodule
测试模块(就要调用这个模块时):
module top;
reg clk,rst;
wire clk_out;
...
half_clk m(.reset(rst),.clk_in(clk),.clk_out(clk_out));这就是调用模块half_clk,端口要对应起来
endmodule
匿名用户
2011-04-09
展开全部
if(cnt==0)
result[7:0]=y;

if(cnt!=3'b100)
这两个 if不构成分支关系 ?
追问
不分支呀,第一个只在cnt=0做一次,第二个在cnt=0到11一共做4次
追答
always块里的阻塞赋值的问题 ?
我也没仔细看,前面是我弄错了 不好意思
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式