• Verilog学习笔记简单功能实现(二)...............全加器


    先以一位全加器为例:Xi、Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号。列表有:

      Xi     Yi    Cin Sum Cout
    0 0 0 0 0
    0 0 1 1 0
    0 1 0 1 0
    0 1 1 0 1
    1 0 0 1 0
    1 0 1 0 1
    1 1 0 0 1
    1 1 1 1 1

        

              由左边表格可知:

                             Sum=X’Y'Cin+X'YCin'+XY'Cin'+XYCin=X'(Y⊕Cin)+X(Y⊙Cin)=X'(Y⊕Cin)+X(Y⊕Cin)'=X⊕Y⊕Cin

                                  Cout=X’YCin+XYCin'+XY'Cin+XYCin=XY+(X⊕Y)Cin

                      如果取:P=X⊕Y ;   G=XY

                         那么:Sum=P⊕Cin     Cout=PCin+G

    图中对Cout的公式进行了,即Cout'=(AB)'(PCin)'=(AB)'((A⊕B)Cin)'

     下面是全加器的门级Verilog语言描述:

    module Fadd(x,y,Cin,Cout,Sum);
      input x,y,Cin;
      output Cout,Sum;
      wire a,b,c;
    
      xor xor1(a,x,y);
            xor2(Sum,a,Cin);
      and  and1(b,x,y);
              and2(c,Cin,a);
      or    or1(Cout,b,c);
    
    endmodule

     全加器的行为描述:

    1 module add(x,y,Cin,Sum,Cout);
    2   input   x,y,Cin;
    3   output  Sum,Cin;
    4   assign Sum=x^y^Cin;
    5   assign Cout=x&y+(x^y)&Cin;
    6 endmodule
    View Code
    module add_N(x,y,Cin,Cout,Sum);
      input  x,y,Cin;
      output  Sum,Cout;
      assign  {Cout,Sum}=x+y+Cin;
    endmodule

    利用行为级描述的Verilog全加器可以很简单的扩展成4位或者16位等全加器:

    module add_4(x,y,Cin,Cout,Sum);
      input [3:0]x,y;
      input Cin;
      output [3:0]Sum;
      output  Cout;
      assign  {Cout,Sum}=x+y+Cin;
    endmodule
    module add_N(x,y,Cin,Cout,Sum);
      input [N-1:0]x,y;
      input  Cin;
      output [N-1:0]Sum;
      output  Cout;
      assign  {Cout,Sum}=x+y+Cin;
    endmodule
  • 相关阅读:
    scala之伴生对象的继承
    scala之伴生对象说明
    “Failed to install the following Android SDK packages as some licences have not been accepted” 错误
    PATH 环境变量重复问题解决
    Ubuntu 18.04 配置java环境
    JDBC的基本使用2
    DCL的基本语法(授权)
    ZJNU 1374
    ZJNU 2184
    ZJNU 1334
  • 原文地址:https://www.cnblogs.com/SYoong/p/5917296.html
Copyright © 2020-2023  润新知