精华内容
下载资源
问答
  • 迭代法只利用一个一位全加器完成四位二进制加法
  • 通过本实验,掌握使用VHDL硬件描述语言设计个1位二进制全加器,做出仿真波形。 注意: 创建项目、文件的具体操作细节可参考以下文章: Quartus Prime Lite Edition 使用教程(创建项目与仿真) 2、创建 Project f...

    1、实验目标

    通过本实验,掌握使用VHDL硬件描述语言设计一个1位二进制全加器,做出仿真波形。

    注意:
    创建项目、文件的具体操作细节可参考以下文章:
    Quartus Prime Lite Edition 使用教程(创建项目与仿真)

    2、创建 Project

    f_adder 项目创建成功。

    3、创建 VHDL 文件

    全加器由两个半加器和一个或门连接而成,

    所以就需要先设计好半加器和或门,然后全加器来调用半加器和或门就可以了。

    ①创建半加器 h_adder.vhd 文件

    写入如下代码:

    LIBRARY  IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;
    
    ENTITY h_adder IS
      PORT ( a, b  : IN STD_LOGIC;
            co, so : OUT STD_LOGIC);
    END ENTITY  h_adder;
    
    ARCHITECTURE fh1 OF h_adder IS
    BEGIN
      so <= NOT(a XOR (NOT b)) ;   co <= a AND b ;
    END ARCHITECTURE fh1;
    
    

    ②创建或门 or2a.vhd 文件

    写入如下代码:

    LIBRARY  IEEE ;
     USE IEEE.STD_LOGIC_1164.ALL;
     
     ENTITY or2a IS
       PORT (a, b : IN STD_LOGIC;  c : OUT STD_LOGIC );
     END ENTITY or2a ;
     
     ARCHITECTURE one OF or2a IS
       BEGIN
       c <= a OR b ;
     END ARCHITECTURE one ;
    
    

    ③创建全加器 f_adder.vhd 文件

    写入如下代码:

    LIBRARY  IEEE;
     USE IEEE.STD_LOGIC_1164.ALL;
     
     ENTITY f_adder IS
       PORT (ain, bin,  cin : IN STD_LOGIC;
                  cout, sum : OUT STD_LOGIC);
     END ENTITY f_adder;
     
     ARCHITECTURE fd1 OF f_adder IS
       COMPONENT h_adder
         PORT (  a, b : IN STD_LOGIC;
               co, so : OUT STD_LOGIC);
       END COMPONENT;
       COMPONENT or2a
          PORT (a, b : IN STD_LOGIC;
                   c : OUT STD_LOGIC);
       END COMPONENT;
    
    SIGNAL d, e, f : STD_LOGIC;
      BEGIN
       u1 : h_adder PORT MAP(a=>ain, b=>bin, co=>d, so=>e);
       u2 : h_adder PORT MAP(a=>e, b=>cin, co=>f, so=>sum);
       u3 : or2a    PORT MAP(a=>d, b=>f, c=>cout);
     END ARCHITECTURE fd1;
    
    

    ④编译

    编译成功。

    4、查看 RTL 图

    如下:

    查看完成。

    5、仿真

    写入测试数据如下:

    仿真结果:

    符合设计要求,仿真成功。

    展开全文
  • 42进制全加器代码

    2010-03-31 11:00:50
    用Verilog HDL 语言实现的4位全加器代码 只是作为个练习,有什么指教可以发邮件给我
  • 数字电路写给读者 作者是...二进制LSB和MSB 通常,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。传输 串行:在计算机总线或其他数据通道上,每次传输个bit 并行:所有bit同时传送BCD编码 意义:用4个bit...

    数字电路


    写给读者

    作者是华中科技大学本科生,这是我的数字电路笔记
    感谢你阅读本文。本文不允许任何形式的转载。有任何问题请联系:wnn2000@hust.edu.cn


    第一章 数字电路概论

    1.二进制

    LSB和MSB

    通常,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。

    传输

    串行:在计算机总线或其他数据通道上,每次传输一个bit
    并行:所有bit同时传送

    BCD编码

    意义:用4个bit表示0-9

    有权码

    8421码:4个bit的权值分别是8、4、2、1
    2421码:
    5421码:

    无权码

    余3码:在8421码的基础上,将每个代码都加上0011而形成
    余3循环码:
    格雷码:

    f31cd938ed1feaf66b53e8cf36fa47e4.png

    2.二值逻辑变量与基本逻辑运算

    输入输出

    仅有0、1

    几种逻辑运算类型

    a7b25a1777277ff29cb4b977d3528c14.png

    由真值表写逻辑表达式

    把每个输出为1的一组输入变量组合状态以逻辑乘形式表示(原变量表示取值1,反变量表示取值0),再将所有的这些逻辑乘进行逻辑加。

    第二章 逻辑代数与硬件描述语言基础

    1.逻辑代数

    基本公式和恒等式

    这部分太简单了

    对偶规则

    对于逻辑函数式,若将其中的与换成或,或换成与;并将1换成0,0换成1;所得的新的函数式就是L的对偶式

    cd367f1c81ea006f8dbbc53805d45e4f.png

    2.逻辑函数的卡诺图化简法

    最小项

    n个变量(X1, X2, …, Xn)的最小项就是n个因子的乘积,在该乘积中每个变量都以它的原变量或非变量的形式出现一次,且仅出现一次。

    2cc05f2d3cf3b7b8a3f7f20c805a31e8.png

    卡诺图

    6d36ccd18669fe9f6c64b76990c73769.png

    卡诺图横纵二进制码为格雷码。使用格雷码的意义在于:使得相邻的格子只有一个bit不同,方便寻找共同bit,从而画圈圈。
    化简过程就是画圈圈的过程,把相邻的元素圈起来。(注意包括上下底相邻,左右边相邻和四角相邻)。包围圈内的方格数一定是2n个,包围圈的方格数要尽可能多。

    f041cc6739129c89c76f77242820b1a8.png

    无关项

    在有些逻辑问题中,有些变量的取值要加以约束。
    如A=1表示电机正转;B =1表示电机反转;C =1表示电机停转。ABC不能等于000、011、101、111中的任何一组。
    填函数的卡诺图时在无关项对应的格内填符号 “×” 。逻辑函数式中用“Φ”或、“d”表示无关项。
    化简时可根据需要视为“1”也可视为“0”,使函数化到最简。(无视无关项即可)

    8720d436ff26284844b5b969061224fe.png

    3.Verilog HDL基础

    这部分等以后再补吧(逃)

    第三章 逻辑门电路

    1.逻辑门电路分类

    d95d0907801d310afed745ddf6b6a5fe.png

    2.CMOS电路

    MOS管的特性在模电中已经学过,不再赘述。

    CMOS反相器(即非门)

    483a0cf4cd638de0ca98854edcddb63d.png

    当输入为低电位时,下方的NMOS的栅源电压为0,截止;上方的PMOS的栅源电压为-VDD,导通;输出为高电位。
    当输入为高电位时,下方的NMOS的栅源电压为VDD,导通;上方的PMOS的栅源电压为0,截止;输出为低电位。

    CMOS与非门

    7542e8e6f2fc17b3ebe828201dd8a87b.png

    直接列出真值表

    16cd4dada4d4f5a89052fb09687e0658.png

    CMOS与门

    79c06902f4ce08650f1bda736927fa15.png

    先与非再非即可得与

    CMOS或非门

    55f949b6b51ecd287b8170395d55b493.png

    做类似与非门的分析即可

    输入保护电路和缓冲电路

    输入端保护电路

    f60e19b91c1c74251705415955a7676f.png

    当输入电压不在正常电压范围时,二极管导通,限制了电容两端电压的增加,保护了输入电路。
    Rs和MOS管的栅极电容组成积分电路,即使是大信号的输入,C充电也需要时间,保证漏极电位的正常

    CMOS漏极开路(OD)门

    这部分等以后再补吧(逃)

    三态输出门电路

    加入一个“使能”输入,来决定输出是否为第三态——高阻态。

    8224821a2105cd1a474a659db5e12418.png

    EN上无圈,表示高电平有效;有圈,表示低电平有效
    还有其他的三态门,比如三态与非门,不加赘述

    3.TTL逻辑门

    非重点

    第四章 组合逻辑电路

    简单理解就是没有反馈的电路

    1.组合逻辑电路的分析

    1.由电路图写出各输出端的逻辑表达式
    2.化简逻辑表达式,比如卡诺图法
    3.根据化简后的表达式写出功能

    2.组合逻辑电路的设计

    1.由功能抽象出逻辑表达式
    2.化简逻辑表达式,比如卡诺图法
    3.根据化简后的表达式画出电路

    3.竞争-冒险现象

    竞争:由于每级逻辑门存在延迟,信号经由不同的路径达到某一会合点的时间有先有后的现象
    冒险:由于竞争而引起电路输出发生瞬间错误现象称为冒险,比如毛刺
    产生条件:只要有互补变量进行与运算、或运算

    2bd6e296fae37152721acb6c1c349ea0.png

    解决办法

    法一:增加乘积项,避免互补项相加

    ce981e98b288254b9e36979bad20c6e6.png

    当A=B=1时,出现竞争-冒险现象
    由卡诺图可知,这个表达式也可以写成

    68cc41e7e405090817a454e7b92ca148.png

    当A=B=1时,L恒等于1,不会出现竞争-冒险现象
    如何增加乘积项?把卡诺图相邻的圈圈圈起来即可

    47e872d8c8c45fe1639cd7cb90cb51f7.png

    法二:输出端并联电容

    竞争-冒险现象相当于瞬间的高频信号,用电容滤波即可

    4.常见集成组合逻辑电路(重难点)

    编码器

    能将输入信号变换为不同的二进制的代码输出。如BCD编码器

    普通编码器:只有一个输入信号为1,其他都是0,此时2n个输入对应n个输出(多输入,少输出)

    a3db85c2211358955c99c9ef57e1a423.png

    这种编码器致命缺点在于,不能同时有两个1输入。用这种编码器做键盘,只能每次按一个键……

    优先编码器:规定优先级,解决上述问题

    6bfa4209de08ffc2a919c90729f76381.png

    优先编码器的功能表里有"×"符号,用来表示优先级。比如当I7为高电平时,其他信号为什么都不重要了,说明I7相对后面优先级最高。
    这其实是集成电路CD4532的功能表。
    EI是使能信号,它为低电平时,整个电路不工作,输出全为低电平
    若EI为高电平,但是没有I信号输入,相当于键盘通电,但是没有按键被按下,此时只有EO输出为1
    当有按键被按下时,GS=1,EO=0,按照优先级顺序处理输入信号I,从而输出相应的信号

    译码器

    译码器是普通编码器的逆过程,可以将n个输入转变为2n个输出,少输入,多输出。输出信号只有一个是1,其他都是0。所以译码器又叫唯一地址译码器

    16ce194010e829c5b3d0801dbcf061e5.png

    译码器也有使能信号,只有使能信号全都满足时,电路才会正常工作。还要特别注意输出端是否取非。译码器的输出实际上是输入的信号变量最小项,利用这点可以通过控制输入来生成逻辑函数

    数据选择器

    有多个信号输入,需要选择一个输出
    靠什么来选择呢?靠"选择信号"
    比如有四个信号输入,那么"选择信号"可以用2位二进制表示,2位二进制可以表示四种状态,即可以确定是4个中的哪一个信号输出"选择信号"就是译码器!,n位"选择信号"对应2n种状态(少对应多),就可以选择2n个输入信号中的一个进行输出

    51e7c2b095569cb5edd8cad6566d47e4.png

    "选择信号"译码后,实际上是"选择信号"的逻辑函数最小项。众多最小项中只有一个最小项mi是1,所以与输入信号D相乘后,输出信号Y=m1D1+m2D2+…+miDi+…=Di
    从另一个角度看,由于Y=m1D1+m2D2+…+miDi+…,那么通过控制Di就可以得到多个最小项的或

    数值比较器(比较简单)

    一位数值比较器

    直接列出真值表

    11259e1ac85e60fce5bc2f0a093a748c.png

    根据真值表画出电路即可

    d0fba399535e80a0347a3023d80269b9.png

    两位数值比较器

    先比高位,再比低位。可以用一位数值比较器拓展而成

    d2dbc7e11d2b357cc4db8a471db1587a.png

    多位数值比较器

    可以通过串联或者并联形式,前者节约门电路,后者节约时间,太简单不再赘述。

    加法器(比较简单)

    半加器

    直接列出真值表画出电路

    a8286e37e786caa7795b50e38467d7e0.png

    全加器

    比较简单,先加低位再进位到高位

    19aab8f8593b33b64eaba021e63a7e1a.png

    多位加法器

    串联法:过于简单不赘述
    超前进位加法器:不需要等低位进位,因为加数输入时,进位数就已经确定,直接求得进位数即可
    显然,第i位的进位数为:

    164997c0b2cf3f87f7ab68c3000ca661.png

    求出carry bit,剩下的就相当于无进位的全加器

    v2-124a101dfa983f00907dadb08f9db030_b.jpg

    第五章 锁存器和触发器(重点)

    这类电路具有“记忆功能”,是组合逻辑电路没有的

    1.锁存器

    SR锁存器(两个或非门组成)

    efb5ee6d9ace009157343c53d8bab401.png

    锁存器的真值表如下

    R(Reset)S(Set)Q00保持原来的Q01110011状态不定,不允许这种状态

    逻辑门控SR锁存器(加个使能信号)

    9cbda58b9b8bd76a0aa6f95293ea8f2a.png

    D(Data)锁存器

    逻辑门控D锁存器

    其实没必要上面那么复杂,当E=0时就是保持不变的状态。所以R和S信号就是相反的关系,可以用一个非门接在一起。这就是D锁存器

    966bd8331971d786f6e73580f3b5e033.png

    只要电路工作,即E=1,那么它的原理就和RS锁存器一样。

    如果D=1,相当于R=0且S=1,那么Q=1(置1)
    如果D=0,相当于R=1且S=0,那么Q=0(置0)

    有很多方式可以描述电路的功能,比如真值表、波形图等。这一章引入特性方程这一新方式
    D锁存器的特性方程:Q=D(电路工作时)
    之后还会引入状态转换图来描述电路

    传输门控D锁存器

    e123037f00e2fbf449609def2ebbaa11.png

    传输门TG的作用就是,当电压给对了,D信号就会传过去
    E=1时,TG1导通,TG2断开,Q=D
    E=0时,TG2导通,TG1断开,Q保持不变

    2.触发器

    刚才讲了锁存器,锁存器是在某个信号处于高电平或者低电平的时候工作,比如使能信号E
    但是触发器不一样,触发器是在某个信号处于上升沿或者下降沿的时候工作,这里一般是信号CP

    aaa2fafda4fde2974355cc340724be32.png

    分析如下
    CP=0时,输入信号D送入主锁存器,使Q'=D
    CP由0跳变到1时,从锁存器TG3打开,Q'信号送Q到端
    Q'由CP跳变前的电路决定。CP跳变后,Q=Q'。换句话说,触发器的状态仅仅取决于CP信号上升沿到达前瞬间的D信号

    D触发器

    由两个D锁存器构成的触发器,就是上图,这里不再分析

    JK触发器

    我们把D触发器封装一下,输入信号是D和C,输出Q和Q。再加上几个门电路,就构成了JK触发器

    3d3e583e3cf5968690b5d0cf0cd198d1.png

    如果C信号有效时,比如上升沿到来
    那么可以写出JK触发器的状态方程

    cc944f4edbefeef7a72f2e5522f1d1fb.png

    当J和K取不同值的时候,电路就可以完成不同的功能。
    例如,上升沿到来前,J=K=1,那么有D=Q非。上升沿到来后,由D触发器的特性可知,D=Q,那么此时Q=Q非,实现翻转。特别注意,如果上升沿迟迟不到来,那么D也就只能卡在或门的后面,不能进入D触发器从而改变Q
    这边我们可以用状态转换图来描述这个电路

    f4e1d3a607d33c05bd482e3f59fb9063.png

    T触发器和T'触发器

    T触发器只需要将JK触发器的J和K接在一起就好了

    8ae88924716e9b3b1ee4d9878ed9eb6f.png

    写出方程如下

    75d5c195eaea36f407e0919b072d946a.png

    T'触发器更简单了,直接把T触发器中的T接到1

    1c01300063e8c1ea27d3aa8fa80d6290.png

    写出方程如下

    d0742d55b4c36080d29a639bd36babc9.png

    当上升沿来之后,Q翻转,保持住,直到下一次上升沿到来

    总结一下,本章的内容分为锁存器和触发器。内容不难,特别要注意电路工作的条件!

    第六章 时序电路

    1.时序电路基本组成和分类

    86532a4bcdc71f16cae77923ad495f66.png

    上图是时序电路的基本电路结构,存储部分由触发器构成
    在时序电路中,要弄懂电路的功能,需要三组方程,分别是输出方程状态方程激励方程输出方程描述输出信号Z与输入信号X和当前电路状态Q的关系,即Z=F(X,Qn)
    如果输出信号Z是Q的单值函数,该电路是摩尔型电路;如果Z是二元函数,该电路是米里型电路。这本教材讨论摩尔型电路激励方程描述触发器的输入Y与X和Q的关系,即Y=F(X,Qn)状态方程描述触发器下一状态与当前状态和Y的关系,即Qn+1=F(Y,Qn)激励方程状态方程可以通过触发器特性方程联系起来

    2.同步时序电路分析

    1.大致了解电路构成,判断触发器类型,写出特性方程
    2.写出激励方程和输出方程(也许不需要)
    3.把激励方程代入特性方程,就可以写出状态方程,即Qn+1的表达式
    4.画出状态转换表
    5.画出状态转换图,确定功能
    6.可以关心一下电路的自启动问题

    3.同步时序逻辑电路的设计

    1.逻辑抽象,建立最初的状态图或者状态表
    2.状态化简,合并等价状态(如果在相同的输入下输出相同或者相互变化就叫等价)
    3.状态分配,n个触发器可以确定2n个状态(highly encoding)
    4.选择触发器的类型
    5.求出电路的激励方程和输出方程
    6.画出逻辑图并检查自启动能力
    展开全文
  • 我们设A和B是两个相加的二进制数,C是从下一位获得的进位,两书相加的和在该位的值为Sum,全加器的两个输出仍然是给上一位的进位Carry。 A–B--C Sum–Carry 0–0--0 0–0 0–0--1 1–0 ...

    二进制的全加器

    二进制的算法准则

    在写全加器前,我们先了解二进制的算法准则。
    我们设A和B是两个相加的二进制数,C是从下一位获得的进位,两书相加的和在该位的值为Sum,全加器的两个输出仍然是给上一位的进位Carry。

    A–B--CSum–Carry
    0–0--00–0
    0–0--11–0
    0–1--01–0
    0–1--10–1
    1–0--01–0
    1–0--10–1
    1–1--00–1
    1–1--11–1

    从上表得出,只要A、B、C中有任意两个输入的值是1,不管余下的一个输入值是多少,Carry一定会是1。即AB=1、AC=1、BC=1;即C=AB+AC+BC.
    而Sum为1有四种情况,ABC、A(非B)(非C)、(非A)B(非C)、(非A)(非B)C。
    那我们可以写出全加器的前一部分

    def FA(a,b,c):
        Carry = (a and b) or (b and c) or (a and c)#这两行代码就是上面我们总结出的逻辑式,不要看到太多就觉得自己看不懂
        Sum = (a and b and c) or (a and (not b) and (not c)) or ((not a) and b and (not c)) or ((not a) and (not b) and c)
        return Carry,Sum
    

    再让我们想想我们平常做加法时,都是从个位开始计算,在计算机中也是这种方法。而当我们碰到数字不同时,会自动把缺少的那位补零,但计算机不会自己动(计算机要是什么都会自己动我就不会在这敲键盘了……)。
    根据上面这句话我们可以再写一串代码。

    def add(x,y):
        while len(x) < len(y):#用来比较两个输入数字的长度,下面也是
            x = [False] + x#这行代码就是用来补零的,下面也是
        while len(x) > len(y):
            y = [False] + y
        L = []
        Carry = False
        for i in range(len(x)-1,-1,-1):#range函数从零开始计位所以减1,-1表示逆位,-1表示间距
            Carry,Sum = FA(x[i],y[i],Carry)
            L = [Sum] + L
        return (Carry,L)
    

    十进制如何转化成二进制输入

    我们输入一个值看看
    在这里插入图片描述在这里插入图片描述
    我们可以发现该函数可以输入二进制的数,但必须是列表形式,而且必须每个数占一个元素。
    那么我们可以定义一个函数,首先把十进制转化成二进制,再将每个数一个个取出,加入列表中。

    def Deci(E,F):
        e = list(str(bin(E)))
        f = list(str(bin(F)))
        x = e[2:]#因为转化成二进制,前面有0b这个表示二进制的标志也会加入列表,所以我们从第三位开始算
        y = f[2:]
        return x,y
    
    

    下图是两个代码的对比
    在这里插入图片描述

    二进制如何以十进制输出

    我今天想出来可以把第二个函数的结果以一个字符串的形式输出,然后替换里面的True和False。奈斯。
    前面的代码我改成了这个样子

    def add(x,y):
        while len(x) < len(y):
            x = [False] + x
        while len(x) > len(y):
            y = [False] + y
        L = []
        Carry = False
        for i in range(len(x)-1,-1,-1):
            Carry,Sum = FA(x[i],y[i],Carry)
            L = [Sum] + L
            l = [str(i) for i in L]#把列表里的元素都改成字符串
            list = ''.join(l)#把列表里的字符串合并成一个字符串
        return str(Carry) + list#把两个字符串合并
    
    def text(word,txt1 = 'True',txt2 = 'False',txt3 = '1',txt4 = '0'):
            word_1 = word.replace(txt1,txt3)
            word_2 = word1.replace(txt2,txt4)
            return int(word_2,2)
    

    结果没错,这里不截图了

    综上所述

    终于到了把所有函数合并的时刻了,开心。

    def FA(a,b,c):
        Carry = (a and b) or (b and c) or (a and c)#这两行代码就是上面我们总结出的逻辑式,不要看到太多就觉得自己看不懂
        Sum = (a and b and c) or (a and (not b) and (not c)) or ((not a) and b and (not c)) or ((not a) and (not b) and c)
        return Carry,Sum
    
    def add(x,y):
        while len(x) < len(y):
            x = [False] + x
        while len(x) > len(y):
            y = [False] + y
        L = []
        Carry = False
        for i in range(len(x)-1,-1,-1):
            Carry,Sum = FA(x[i],y[i],Carry)
            L = [Sum] + L
            l = [str(i) for i in L]
            list = ''.join(l)
            txt = str(Carry) + list
        return txt
    
    def text(word,txt1 = 'True',txt2 = 'False',txt3 = '1',txt4 = '0'):
        word_1 = word.replace(txt1,txt3)
        word_2 = word_1.replace(txt2,txt4)
        return int(word_2,2)
    
    def Deci(E,F):
        e = list(str(bin(E)))
        f = list(str(bin(F)))
        x = [int(i) for i in e[2:]]
        y = [int(i) for i in f[2:]]
        word = add(x,y)
        coensored = text(word,txt1 = 'True',txt2 = 'False',txt3 = '1',txt4 = '0')
        return coensored
    

    在这里插入图片描述
    呐,答案没错。这是老师给我布置得题目,十进制转化成二进制输入,把输出的二进制再转化成十进制的形式输出,我能怎么办呢。

    展开全文
  • 若你我之间有缘,关注作者又何妨?两情若是久长时,又岂在朝朝暮暮。...我们FANUC PMC处理数据是以二进制和BCD码两种形式,要想真的理解它,首先我们需要学习一些数字电路基础知识,这些知识可能看遍两遍无法理解...

    若你我之间有缘,关注作者又何妨?

    两情若是久长时,又岂在朝朝暮暮。

    大家好!我是江郎,一个脚踏实地的#数控#维修工。

    在学习FANUC PMC的时候,经常会接触到位、字节、字、双字这些数字基础知识,若没有理解它们的含义就很难更深层次的去研究,最后可能会一头雾水。

    e7a619082fdeae121fa0b02de5548e5a.png

    我们FANUC PMC处理数据是以二进制和BCD码两种形式,要想真的理解它,首先我们需要学习一些数字电路基础知识,这些知识可能看一遍两遍无法理解清楚,那么你就看十遍二十遍,总会有恍然大悟的一天,这就是:“书读百遍其义自见”。

    数字基础知识

    市场上的PLC有很多品牌,琳琅满目,但是基本的数字知识差异不大,为了方便我们理解,我们以西门子PLC来进行举例说明:

    1、二进制

    一般在计算机中广泛应用的一种码制,它的特点就是“逢二进一”。

    2、位

    ba12fb32ca3c6a63b229a834cce14cfa.png

    常称为BOOL(布尔型),只有两个值:0或1。如:I0.0,Q0.1,M0.0,V0.1等。

    3、字节

    一个字节(Byte)等于8位(Bit),其中0位为最低位,7位为最高位。

    8a27a12b48a48eb15d17573ada1380e7.png

    如:IB0(包括I0.0~I0.7位),QB0(包括Q0.0~Q0.7位),MB0,VB0等。范围:00~FF(十进制的0~255)。

    4、字

    相邻的两字节(Byte)组成一个字(Word),来表示一个无符号数,因此,为16位。

    2e26fac85c5491c55aba4501deda2d83.png

    如:IW0由IB0和IB1组成的,其中I是区域标志符,W表示字,0是字的起始字节需要注意的是,字的起始字节(如上例中的“0”)都必须是偶数。

    字的范围为十六进制的0000~FFFF(即十进制的0~65536)。在编程时要注意,如果已经用了IW0,如再用IB0或IB1要特别加以小心。

    5、双字

    相邻的两个字(Word)组成一个双字,来表示一个无符号数。因此,双字为32位。

    57ea5160dedc8bbc7cd12013eb094583.png

    如:MD100是由MW100和MW102组成的,其中M是区域标志符,D表示双字,100是双字的起始字节。需要注意的是,双字的起始字节(如上例中的“100”)和字一样,必须是偶数。

    双字的范围为十六进制的0000~FFFFFFFF(即十进制的0~4294967295)。在编程时要注意,如果已经用了MD100,如再用MW100或MW102要特别加以小心。

    FANUC-PMC处理数据的形式

    我们FANUC小黄鸡PMC处理数据分为二进制和BCD码两种形式来处理,例如很多梯形图功能指令,有二进制的、有BCD码的,例如DEC和DECB译码指令,如下图

    869c824563bbe5233c3c532010f49b6a.png

    DEC是对2位BCD码进行译码,而DECB是对1、2、4字节长度的二进制形式的代码数据进行译码。

    在梯形图中一般指定数据的起始地址和数据长度,如下图R100为首的4个字节的数据:

    0a11bdaa5f1bf60a2c28424be1660f87.png

    那么,1个字节、2个字节、4个字节可表示的数据范围有多大?如下图:

    869fa6295fe0f646844daa7278fc8ea3.png

    BCD码:二进码、十进数,是一种二进制的数字编码形式,用二进制编码的十进制代码,这种编码形式利用了四个位元素储存一个十进制的数码,使二进制和十进制之间的转换以快捷进行。

    d6fd957464c0b0b26015e59e5f63c933.png

    BCD码简单可以这样理解:就是用四位二进制数来表示10进制数的各位。BCD码也叫8421码,就是将十进制的数以8421的形式展开成二进制……

    小结

    通过上述内容,我们可以学习到一些数字基础知识以及在FANUC PMC中仅仅处理两种数据(二进制和BCD码),这些枯燥无味的概念性知识,其实很无趣。

    江郎在学习的路上有个习惯,不理解的东西会多读几次,几十次,甚至是几百次,为什么?就是为了抓住大脑中的一次“顿悟”!这其实就是愚公移山的精神吧!

    (感谢阅读!喜欢的朋友记得转发、点赞哦!拜托拜托!)

    ——END——

    预知更多内容,【关注作者】,且听下回分解!

    声明:文中观点仅代表作者本身;图片来源于网络,侵权必删!

    展开全文
  • 二进制全加器设计 (verilog)

    万次阅读 2013-09-07 00:11:14
    二进制全加器设计  一位全加器使用乘积项之和的形式可以表示为:  sum=a·b·c_in+a’·b·c_in’+a’·b’·c_in+a·b’·c_in’ c_out=a·b+b·c_in+a·c_in  其中a,b和c_in为输入,sum和c_out为输出,只...
  • 基于modelsim编写了个四位二进制全加器的实现代码,适合初学者,附有仿真结果,程序作者编写,测试通过。
  • 实验题目 设计、实现八位二进制数全加器 设计思路 ...使用两个四位二进制加法器组成。 功能设计 实现八位二进制数加法,并保存可能存在的溢出值。 波形图 源代码 library ieee; use ieee.std_logic_11
  • word格式word格式《电子设计自动化》实验报告实验六 实验名称:8位二进制全加法器的设计专业及班级:姓名:学号:、实验目的:掌握VHDL语言的基本结构。掌握全加器原理,能进行多位加法器的设计。掌握VHDL语言的...
  • 昨天刚学习了指针,发现之前写的那个加法器存在问题,加法器一共用了 8 个全加器(Full Adder)函数,如果是做个16加法那岂不是要用到16个全加器函数。。。。 利用指针传送地址的功能解决了上面的问题,用个...
  • 本视频是使用 Logisim实现4位全加器并且使用7端数码管显示,具体的操作请参见CSDN博主 江 月 https://hyxmoon.blog.csdn.net/,博文 Logisim之4位全加器实现以及七段数码管显示 具体了解。
  • 打开quartus,创建新工程,入库,工程目录就是你那第二个t2,(这个t2是我做好的四位二进制加法计数器的项目)第二行目录就是打开SEG7 LUT.v,下面出现弹框选择否,出现file name选择点开目录选.v,然后Add, ...
  • VHDL设计四位二进制加法器和乘法器

    千次阅读 2021-05-20 15:12:18
    本文所设计的加法器是简单四位二进制加法器。计算机中的减法、乘法和除法最终都要转换成加法来运算。本实验没有用VHDL语言中的加法运算符。而是用基本门电路来实现的。通过对VHDL中算术运算符的运用,设计四位二进制...
  • vhdl入门2——ise制作一位全加器

    千次阅读 2019-09-11 10:48:24
    下边的命名有误:quanjiaqi1——一位全加器,quanjiaqi0——半加器,quanjiaqi——或门。 --ujs-lili --这个做的是半加器 library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity quanjiaqi0 i...
  • 首先得搞明白什么是四位二进制的加法器 半加器: library IEEE ; use IEEE.STD_LOGIC_1164.ALL ; entity banjiaqi is port ( a,b : in std_logic ; so,co: out std_logic ) ; end banjiaqi ; ...
  • 基于Quartus-II软件完成个1位全加器的设计,分别采用:1)原理图输入 以及 2)Verilog编程 这两种设计方法。软件基于quartusII 13.0版本,开发板基于Intel DE2-115。
  • 二进制加法器的VHDL程序

    千次阅读 2019-03-17 21:07:39
    在上篇文章中我们讨论了二进制加法器的原理,在此我们给出二进制加法器的VHDL描述: library IEEE; use IEEE.std_logic_1164.all; package std_logic_arith is type unsigned is array (natural range&lt...
  • 文章目录VerilogHDL程序设计与仿真作业5:——实现74HC283的四位二进制进位全加器的功能、实验目的二、实现74HC283的功能1、设计思路2、实现代码3、测试代码4、仿真 、实验目的 实现74HC283的四位二进制进位...
  • 编程Verilog四位全加器

    千次阅读 2020-11-29 13:27:37
    1.4位全加器:能实现4位二进制数全加的数字电路模块,称之为四位全加器(逐位进位 超前进位)多位全加器连接可以是逐位进位,也可以是超前进位。逐位进位也称串行进位,其逻辑电路简单,但速度也较低。 ①第种...
  • FPGA——1位全加器的实现

    千次阅读 2021-04-07 10:46:20
    半加器是能够对两个一位二进制数进行相加得到半加和以及半加进位的组合电路。 半加器的真值表 A,B表示二进制数,C表示半加进位,S表示半加和 A B C S 0 0 0 0
  • 《四位二进制8421BCD码加法器》由会员分享,可在线阅读,更多相关《四位二进制8421BCD码加法器(9页珍藏版)》请在人人文库网上搜索。1、课程设计报告设计题目: 四位二进制8421BCD码加法器 学 院: 理学院 专 业: 09...
  • 用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器一位全加器可以处理低位进位,并输出本位加法进位。而多个一位全加器进行级联可以得到多位全加器。 其真值表如下: 其中Ai 为被加数,Bi 为加数...
  • 课程设计报告设计题目: 四位二进制8421BCD码加法器学 院: 理学院专 业: 09电子信息科学与技术班 级: 1班学 号: 200931120102; 200931120103; 200931120105姓 名: 陈俊宇 陈明源 邓坤勇电子邮件: 1205335255@...
  • 4位二进制加法器的实现 在实现1位全加器的基础上,将加数的位数进行扩展即可得到4位全加器,甚至多位的加法器。实现的方法仍可以用例化1位全加器的方法。硬件框图如下: 结合前述文章的全加器代码,可得4位全加器...
  • 文章目录一、全加器的概念1.1 半加器1.2 全加器二、项目创建2.1 实验准备2.2 工程创建2.2.1 元件实现1位全加器2.2.1.1... 是实现两个一位二进制数的加法运算电路。 1.1.2 原理图 1.1.3 实现 半加器不考虑低位向本位
  • 位全加器的设计与仿真

    万次阅读 2019-08-06 17:01:31
    利用实验实现的模块设计个四位全加器并仿真测试。 3. 实验要求 设计模块名称fulladd_4bit,输入端口 a,b,c_in。输出端口sum,c_out。测试要充分。 4. 程序代码 VerilogHDL代码: module full_adder4(sum...
  • 层:2个2位全加器构成1个四位全加器层:2个全加器构成1个2位全加器 我们将第三层的思路框图打包成1位全加器: 第三层:2个半加器构成1个全加器 根据此思路,我们可以这样写: module add_full_...
  • 代码: module add_4(input [3:0] a,input[3:0]b,input ci,output[3:0]s,output co ); wire[3:0] count; add i0(a[0],b[0],ci,s[0],count[0]); add i1(a[1],b[1],count[0],s[1],count[1]); add i2(a[2],b[2],count[1...
  • Multisim 一位全加器

    千次阅读 2020-02-25 01:51:58

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,150
精华内容 460
热门标签
关键字:

一位二进制全加器代码