zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    HTTP协议详解【转】
    Spring中的IOC和AOP
    Servlet生命周期
    Struts2基本原理【转】
    继承映射的三种方式
    树状数组(两个树状数组累计)
    二维数组数组(区间更新+单点查询)
    东西海岸(逆序对)
    离散化+单点更新+区间求和
    单调栈+dp
  • 原文地址:https://www.cnblogs.com/SYoong/p/5917296.html
Copyright © 2011-2022 走看看