verilog基础训练——乘法器
【摘要】 想实现一个最基本的z = x*y的乘法器,并看看其电路内部逻辑是怎么形成的。因为我们都知道数电中多bit数据是由多个单bit数据并行组成,因此提出一个问题:多bit数据是怎么相乘的?或者说相乘时他们位是如何变化的?废话不多说,上代码module top( input [1:0] a, input [1:0] b, output [3:0] c ); assign...
想实现一个最基本的z = x*y的乘法器,并看看其电路内部逻辑是怎么形成的。因为我们都知道数电中多bit数据是由多个单bit数据并行组成,因此提出一个问题:
多bit数据是怎么相乘的?或者说相乘时他们位是如何变化的?
废话不多说,上代码
module top(
input [1:0] a,
input [1:0] b,
output [3:0] c
);
assign c = a * b;
endmodule
输入2bit的数据a,b,其取值为0~2^2-1,则c取值为0~2^4-1。
下面是testbeach:
module top_tb();
reg [1:0] a;
reg [1:0] b;
wire [3:0] c;
initial
begin
a = 0;
b = 0;
forever
begin
#({$random}%100)
a[0] = ~a[0];
#({$random}%100)
a[1] = ~a[1];
#({$random}%100)
b[0] = ~b[0];
#({$random}%100)
b[1] = ~b[1];
end
end
top t0(
.a(a),
.b(b),
.c(c)
);
endmodule
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)