使用Verilog和器件图实现1位全加器

目录

  • 1位二进制数全加器
  • Verilog HDL实现
  • 原理图实现
  • 仿真
  • 上板验证
  • 扩展:4位全加器
  • 实验总结
  • 1位二进制数全加器

    1位二进制数全加器是一个具有三个输入端和两个输出端的,能对被加数、加数以及来自低位的进位相加得到“全加和”与“全加进位”。

    它的真值表如下:

    Ai Bi Ci-1 Ci Si
    0 0 0 0 0
    0 0 1 0 1
    0 1 0 0 1
    0 1 1 1 0
    1 0 0 0 1
    1 0 1 1 0
    1 1 0 1 0
    1 1 1 1 1

    它的逻辑表达式如下:

    Ci = AiBi + Ci-1 ( Ai ^ Bi )
    Si = Ai ^ Bi ^ Ci
    

    Verilog HDL实现

    module exp1_fulladder  (
        input   d1,
        input   d0,
        input   q1,
        output out,
        output q
    ); 
    //按照逻辑表达式输出即可
    assign out = d1 ^ d0 ^ q1;
    assign q = (d1&d0)||(q1&&(d1^d0));
    endmodule  
    

    原理图实现

    仿真

    从仿真的结果来看,Ci与Si的结果与真值表相符合。

    上板验证

    我使用的板子是实验室的DE2-115开发板,开发板上面有拨动开关与LED,可以使用三个拨动开关来表示1位全加器的输入,两个LED表示两个输出的高低电平。

    以下是板子的拨动开关与LED的引脚:

    在Quartus里面,配置引脚,将三个输入口与三个Switch开关相连,两个输出口与LED引脚相连:

    将板子接上电源,打开开关,将USB线连接板子与电脑,点击烧录,得到以下现象:

    上板的现象也是与真值表相符合的。

    扩展:4位全加器

    前面制作了1位全加器,接下来可以使用四个1位全加器,做一个4位全加器。

    将1位全加器的q与q1首尾相连,开头的输入进位接地,最后一个全加器的输出的进位表示是否溢出。按照上图连接,将实现4位全加器,并判断是否溢出。

    使用VerilogHDL语言实现4位全加器的话,原理与上面一样。

    代码如下:

     module exp1_fulladder_4bits(
        input [3:0]  d1,
        input [3:0]  d0,
        output   [3:0] out,
        output   q
     );
    	 wire q1;
    	 assign q1 = 1'b0;
    	 
        wire [2:0] _q;
        exp1_fulladder u_exp1_fulladder(
            .d1     (d1[0]),
            .d0     (d0[0]),
            .q1     (q1),
            .out    (out[0]),
            .q      (_q[0])
        );
    
        exp1_fulladder u_exp1_fulladder_2(
            .d1     (d1[1]),
            .d0     (d0[1]),
            .q1     (_q[0]),
            .out    (out[1]),
            .q      (_q[1])
        );
        
        exp1_fulladder u_exp1_fulladder_3(
            .d1     (d1[2]),
            .d0     (d0[2]),
            .q1     (_q[1]),
            .out    (out[2]),
            .q      (_q[2])
        );
    
        exp1_fulladder u_exp1_fulladder_4(
            .d1     (d1[3]),
            .d0     (d0[3]),
            .q1     (_q[2]),
            .out    (out[3]),
            .q      (q)
        );
     endmodule
    

    这一部分笔者使用的是小脚丫Max10-02SCM系列的芯片做的,引脚分布与上面的板子不一样。但都是控制8位输入(两个4位二进制数)高低电平,然后使用LED表示全加器输出。

    四位全加器的实验现象如下:

    当输入的数分别为0001与0010,结果为0011,没有溢出,只有最低为两个灯亮:

    当输入的数分别为1001与1100,结果为0101,有溢出,溢出灯亮,第一位与第三位亮:

    实验总结

    本次实验使用FPGA制作了全加器,并从1位全加器扩展到了4位。复习了前面学习的数电知识,以及更进一步地练习了verilog语法与fpga的使用。

    另外发现,蓝色LED与白色LED的工作功率似乎比红,绿,黄三色的LED大。在接上限流电阻的时候白灯与蓝灯会不亮。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用Verilog和器件图实现1位全加器

    发表回复