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
  • 相关阅读:
    [转载][mysql]mysql字符集干货
    [mysql]修改表段默认值
    微信支付之h5方式(非微信内置浏览器中支付)
    阿里云 ECS 安全组
    Memcached cas 陷阱
    Memcached 分布式集群
    nginx 配置多个主机
    static类型的变量
    全局变量和局部变量
    nginx 负载均衡(默认算法)
  • 原文地址:https://www.cnblogs.com/SYoong/p/5917296.html
Copyright © 2011-2022 走看看