• verilog设计加法器


    概述

    本文利用了硬件行为描述、数据流描述、结构描述三种方法分别写了几个加法器

    一位半加法器

    即两个一位的二进制数相加,得到其正常相加的结果的最后一位。

    仿真波形图

    硬件行为描述

    设计文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    module bjqxw(a,b,sum,cout);
    input a,b;
    output sum,cout;
    reg sum,cout;
    always @(a or b)
    begin
    case({a,b})
    2'b00:begin
    sum=0;cout=0;
    end
    2'b01:begin
    sum=1;cout=0;
    end
    2'b10:begin
    sum=1;cout=0;
    end
    2'b11:begin
    sum=0;cout=1;
    end
    endcase
    end
    endmodule

    仿真结构图

    仿真文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    module bjqxwsimu;
    reg a,b;
    wire sum,cout;
    bjqxw sl(a,b,sum,cout);
    initial
    begin
    a=0;b=0;
    end
    always #10 {a,b}={a,b}+1;
    endmodule

    结构描述

    设计文件

    1
    2
    3
    4
    5
    6
    module add(a,b,sum,cout);
    input a,b;
    output sum,cout;
    xor(sum,a,b);
    and(cout,a,b);
    endmodule

    仿真结构图

    仿真文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    module add1;
    reg a,b;
    wire sum,cout;
    add ul(a,b,sum,cout);
    initial
    begin
    a=0;b=0;
    end
    always #10 {a,b}={a,b}+1;
    endmodule

    数据流描述

    设计文件

    1
    2
    3
    4
    5
    6
    7
    endmodulemodule add3(a,b,sum,cout);
    input a,b;
    output sum,cout;
    wire sum,cout;
    assign sum=a^b;
    assign cout=a&b;
    endmodule

    仿真结构图

    仿真文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    module add1;
    reg ain,bin;
    reg clk;
    wire sum1,cout1;
    initial
    begin
    ain=0;bin=0;clk=0;
    end
    always #50 clk=~clk;
    always @(posedge clk)
    begin
    ain={$random}%2;
    #3 bin={$random}%2;
    end
    add3 ul(.a(ain),.b(bin),.sum(sum1),.cout(cout1));
    endmodule

    一位全加器

    仿真波图

    硬件行为描述

    设计文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    module qjq(a,b,cin,sum,cout);
    input a,b,cin;
    output sum,cout;
    reg sum,cout;
    always @(a or b or cin)
    begin
    case ({cin,a,b})
    3'b000:begin
    sum=0;cout=0;
    end
    3'b001:begin
    sum=1;cout=0;
    end
    3'b010:begin
    sum=1;cout=0;
    end
    3'b011:begin
    sum=0;cout=1;
    end
    3'b100:begin
    sum=1;cout=0;
    end
    3'b101:begin
    sum=0;cout=1;
    end
    3'b110:begin
    sum=0;cout=1;
    end
    3'b111:begin
    sum=1;cout=1;
    end
    endcase
    end
    endmodule

    仿真结构图

    仿真文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    module qjq1;
    reg a,b,cin;
    wire sum,cout;
    qjq ul(a,b,cin,sum,cout);
    initial
    begin
    a=0;b=0;cin=0;
    end
    always #10 {a,b,cin}={a,b,cin}+1;
    endmodule

    结构描述

    设计文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    module qiq(a,b,cin,sum,cout);
    input a,b,cin;
    output sum,cout;
    wire q1,q2,q3;
    xor(sum,a,b,cin);
    or(q1,a,b);
    or(q2,b,cin);
    or(q3,a,cin);
    and(cout,q1,q2,q3);
    endmodule

    仿真结构图

    仿真文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    module qjq1;
    reg a,b,cin;
    wire sum,cout;
    qiq ul(a,b,cin,sum,cout);
    initial
    begin
    a=0;b=0;cin=0;
    end
    always #10 {a,b,cin}={a,b,cin}+1;
    endmodule

    数据流描述

    设计文件

    1
    2
    3
    4
    5
    module qjq(a,b,cin,sum,cout);
    input a,b,cin;
    output sum,cout;
    assign {sum,cout}=a+b+cin;
    endmodule

    仿真结构图

    仿真文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    module qjqsimu;
    reg a,b,cin;
    wire sum,cout;
    qjq sl(a,b,cin,sum,cout);
    initial
    begin
    a=0;b=0;cin=a&b;
    end
    always #20 {a,b}={a,b}+1;
    endmodule

    四位全加器

    数据流描述

    设计文件

    1
    2
    3
    4
    5
    6
    7
    module qjq(a,b,cin,sum,cout);
    input [3:0] a,b;
    input cin;
    output [3:0] sum;
    output cout;
    assign {sum,cout}=a+b+cin;
    endmodule

    仿真结构图

    仿真文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    module qjqsimu;
    reg [3:0] a,b;
    reg cin;
    wire [3:0] sum;
    wire cout;
    qjq sl(a,b,cin,sum,cout);
    initial
    begin
    a=4'b0000;b=4'b0000;cin=0;
    end
    always #20 {a,b}={a,b}+4'b0001;
    endmodule

    仿真波图

    ps:将上述输入输出的字段长度对应修改,可得到相应数位的全加器数据流描述

  • 相关阅读:
    Windows10系统下在Docker中部署静态网站
    NET接入Mesher--------解决微服务什么时候能支持.net 的应用开发的问题
    Windows系统下 ASP.NET Core 的 Docker 映像创建
    Windows平台部署 Asp.Net Core 3.1.0,将 ASP.NET Core 应用发布到 IIS ,使用 IIS 在 Windows 上托管 ASP.NET Core
    如何使用Activator.CreateInstance创建一个列表<T>,其中T在运行时是未知的?
    在 Visual Studio 中安装 FxCop 分析器
    .Net Core3.1下使用Swagger搭建web api项目
    Vuex访问状态对象的方法
    Vuex最基本样例
    搜索框 展示相关搜索内容列表,及延迟改进(仿百度)
  • 原文地址:https://www.cnblogs.com/mxdon/p/11324582.html
Copyright © 2020-2023  润新知