打印

verilog的问题

[复制链接]
1291|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengyiyong|  楼主 | 2012-11-26 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fengyiyong 于 2012-11-26 11:36 编辑

小弟初学verilog编了个8位乘法器,编译通过、但仿真不对、乘数和被乘数却都是高阻、求大神帮助。附上三段代码
testbench:
`timescale 1ns/1ns
module testbench;
reg[7:0]addend,adder;
initial
fork
addend=8'b00001111;
adder=8'b00010001;
join
add testbench(.addend_a(addend),.adder_a(adder));
adder test(.addend(addend),.adder(adder));
endmodule


add:
module add(a,b);
output a,b;
reg[7:0]d,addend_a,adder_a;
reg a,b;
always@(addend_a or adder_a)
fork
d=8'b11111111;
while(d)
begin
a=addend_a[0];
b=adder_a[0];
addend_a=(addend_a>>1);
adder_a=(adder_a>>1);
d=d<<1;
end
join
adder add(.a(a),.d(d),.b(b));
endmodule

adder:
module adder(adder,addend,sum);
input[7:0]addend,adder;
output[9:0]sum;
reg[9:0]sum;
reg a,b,c,s;
reg[7:0]d;
initial
begin
sum=10'b0000000000;
c=1'b0;
end
always@(d)
begin
s=(~a)&(~b)&c+(~a)&b&(~c)+a&(~b)&(~c)+a&b&c;
c=a&b+a&(~b)&c+(~a)&b&c;
sum[8]=s;
sum[9]=c;
sum=sum>>1;
end
endmodule

相关帖子

沙发
GoldSunMonkey| | 2012-11-26 20:19 | 只看该作者
这是怎么一个调用关系?没太看明白

使用特权

评论回复
板凳
fengyiyong|  楼主 | 2012-11-26 23:36 | 只看该作者
就是add调用testbench里面的adder和addend、然后再用adder调用add里的d、b、a、我的意图是这样的、

使用特权

评论回复
地板
fengyiyong|  楼主 | 2012-11-26 23:37 | 只看该作者
2# GoldSunMonkey 就是add调用testbench里面的adder和addend、然后再用adder调用add里的d、b、a、我的意图是这样的、

使用特权

评论回复
5
Backkom80| | 2012-11-27 08:02 | 只看该作者
1,无初值,
2,敏感变量列表中的敏感变量无变化,没有触发

使用特权

评论回复
6
fengyiyong|  楼主 | 2012-11-27 09:23 | 只看该作者
5# Backkom80
额、能说的详细点么、哪个没有初值的、 触发的话、是不是我一给一个空的寄存器赋值马上就会触发的、而不需要原来里面有数值、然后改变了才会触发、这是我理解的额、如果错了、还望指正、

使用特权

评论回复
7
GoldSunMonkey| | 2012-11-27 18:02 | 只看该作者
感觉输入就不对。

使用特权

评论回复
8
GoldSunMonkey| | 2012-11-27 18:03 | 只看该作者
不应该啊。很奇怪啊。

使用特权

评论回复
9
GoldSunMonkey| | 2012-11-27 18:04 | 只看该作者
fork 和joint 去掉,不调用模块,光给赋初值,看看能不能给信号赋上初值

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

37

帖子

0

粉丝