栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

HDLBITS——Arithmetic circuits

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HDLBITS——Arithmetic circuits

1. 3-bit add
这个是3bit的,不能像1bit那样用行为级描述,需要3个1bit全加器。应该用generate来简化的。

module top_module( 
    input [2:0] a, b,
    input cin,
    output [2:0] cout,
    output [2:0] sum );
    
    full_adder inst1(
        .a(a[0]),
        .b(b[0]),
        .cin(cin),
        .cout(cout[0]),
        .sum(sum[0])
    );
    full_adder inst2(
        .a(a[1]),
        .b(b[1]),
        .cin(cout[0]),
        .cout(cout[1]),
        .sum(sum[1])
    );
    full_adder inst3(
        .a(a[2]),
        .b(b[2]),
        .cin(cout[1]),
        .cout(cout[2]),
        .sum(sum[2])
    );
endmodule

module full_adder( 
    input a, b, cin,
    output cout, sum );
	
    assign {cout,sum} = a + b + cin;
    
endmodule

2. adder
这个题本身没有进位输入,所以直接相加就好了

module top_module (
    input [3:0] x,
    input [3:0] y, 
    output [4:0] sum);
    
    assign sum = x + y;

endmodule

3. signed add
有符号位相加,和直接加起来,溢出判断就是正正得负(001)和负负得正(110)两种

module top_module (
    input [7:0] a,
    input [7:0] b,
    output [7:0] s,
    output overflow
); 
 
    assign s = a + b;
    assign overflow = ( (~a[7]) & (~b[7]) & (s[7]) )||( (a[7]) & (b[7]) & (~s[7]) );

endmodule

4. 100-bit adder
这个不需要用generate,因为cout不是一位一位的出,而只有最终的一个

module top_module( 
    input [99:0] a, b,
    input cin,
    output cout,
    output [99:0] sum );
    
    assign {cout,sum} = a + b + cin;
    
endmodule

5. BCD 4-digital
用两个assign ,就避免i==0的情况。区别于more verilog features最后一题

module top_module( 
    input [15:0] a, b,
    input cin,
    output cout,
    output [15:0] sum );
    
    wire link[4:0];
    
    generate
        genvar i;
        for(i=0;i<4;i=i+1)begin:loop
        	bcd_fadd inst(
                .a(a[4*i+3:4*i]),
                .b(b[4*i+3:4*i]),
                .cin(link[i]),
                .cout(link[i+1]),
                .sum(sum[4*i+3:4*i])
   			);
        end
    endgenerate
    
    assign link[0] = cin;
    assign cout = link[4];
            
endmodule
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744300.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号