verilog基础训练——乘法器

举报
莫言2021 发表于 2021/10/27 21:32:13 2021/10/27
【摘要】 想实现一个最基本的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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。