数字逻辑教材第6-7章.doc_第1页
数字逻辑教材第6-7章.doc_第2页
数字逻辑教材第6-7章.doc_第3页
数字逻辑教材第6-7章.doc_第4页
数字逻辑教材第6-7章.doc_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

73数字逻辑第6章 数字系统功能模块设计要完成数字系统的设计,其关键问题是需要对构成数字系统的基本功能模块进行设计与实现,因此本章内容主要是依据VHDL语言平台,通过一些具体示例来描述如何从基本功能部件的设计入手并逐步展开到复杂数字系统的设计。6.1 数字系统功能模块 我们知道无论是简单数字系统还是复杂数字系统,实际上它们都是由一些称为核的基本功能部件来构成,所以要完成一个数字系统的设计,实际上是先将这样的一些基本功能部件构思出来,然后通过某种互连技术实现这些功能部件的综合,其结果就是需要进入应用场合的数字系统,所以数字系统实际上就是某种具体逻辑功能需求的统称,这个系统根据不同的应用需求可大、可小。比如一个计算机系统就是一个相对复杂的数字系统,而窗帘自动开闭控制模块就是一个很简单的数字系统。为了能真正完成复杂数字系统的设计,我们必须先通过对一些基本功能模块的设计来掌握设计基础和设计思路,然后再通过其它后续内容和课程的学习才能达到设计目的。6.1.1 功能模块概念数字逻辑中的功能模块实际上就是某种具备特定逻辑功能的一个电路,所以针对不同的功能需求,我们可以构建数量庞大且功能各异的功能模块,任何数字系统都是由多种功能各异的模块按需求进行特殊综合而成,功特定逻辑功能模块能模块示意图如图6.1所示。图中方框表示根据设计需求而实现 外部输入 外部输出的某种具有特定逻辑功能的一个电路, 外部输入表示该逻辑电路应该满足设计需求的输入组合集,而外部输出表示该 图6.1 功能模块示意图逻辑电路需要满足设计需求提供的输出 组合集,而这样的一个逻辑电路在数字逻辑中就称为功能模块。从功能模块的示意图中我们可以看出,任何数字系统的实现都依赖于这些功能模块的基础设计。在传统数字系统的设计过程中,是将这些分别设计完成的功能模块电路通过搭积木的方式把它们综合成一个可视的互连实体,而现在的设计方式是将这些分别设计完成的功能模块算法(注意,这里提出的是数学算法模型,而非实际电路。)通过下载方式,下载到一个ASIC中,因此这个ASIC就体现了所有功能模块的综合,并且功能模块之间的互连结构将是非可视化的。6.1.2 功能模块外特性及设计过程功能模块的外特性描述了某特定逻辑电路输入和输出之间的关联关系。在这个关联关系的描述过程中,我们对功能模块内部的构建参数、如何选择某些参数将使功能模块内部结构的优化得到体现、功能模块的工作速度得以提高、功能模块集成度能否得到增加等需求并不是这种外特性关系描述所关心的,而功能模块的外特性描述只关心的是,设计完成后的功能模块在施加了不同输入信号组合集和时间值后,其功能模块的对外反映(即输出组合集)能否正确地反映出与输入之间的关联关系,即通常所说的逻辑正确关系。在功能模块的传统设计方式中,使用SSI方式是利用真值表或状态图构造出不同逻辑功能的输入/输出之间的关联描述,然后选用某种相应的基本逻辑电路结构来构造该逻辑功能模块;而在MSI或LSI方式中,则是通过选用市场上可购置到具有同等逻辑功能的非定制器件,在系统互连结构上通过适当的剪裁来构成所需的逻辑功能模块;目前在使用VLSI和ULSI可编程器件的方式下,逻辑功能模块的设计则要经历如下几个阶段:1功能设计的需求分析;2输入、输出变量以及时间关系认定;3编程模块算法流程图设计;4编程;5在线仿真、故障注入、功能测试与系统联试。在这5个阶段中,第一个阶段是对设计需求说明进行仔细分析,主要是寻找出将要实现的逻辑功能部件究竟需要用什么样的逻辑函数可以加以完整描述;第二阶段是在传统设计手段上增加了直接使用原理图对逻辑功能部件的设计构思方式,换句话说,就是在真值表、时序图的传统设计方式上增添了绘制功能部件电原理图来设计的方式,这主要是VHDL语言平台直接支持这种设计方式,这将大大简化逻辑设计中的函数表示或穷举过程;第三阶段和第四阶段与一般软件设计过程一样,它们主要是针对设计需求进行算法流程图构思,这个构思就是编程思路的体现,然后根据该算法流程图实施编程;第五阶段是功能部件设计完成后的一些辅助设计,它主要是解决设计中可能出现的设计瑕疵或逻辑非完整性等问题,只有在这些测试都完成后,我们才能真正得到的是一个可以进入市场的产品。为掌握数字系统的设计,首先我们对一些简单功能模块进行设计分析,然后再逐步深化,这里将基本功能模块的设计也分成组合逻辑和时序逻辑两部分内容来进行描述。6.2 基于组合逻辑模型下的VHDL设计基于组合逻辑模型下的VHDL设计主要是通过VHDL语言平台,对非时序机模型的基本功能逻辑部件进行设计,所以这类设计相对比较简单。6.2.1 基本逻辑门电路设计 基本逻辑门电路是构成逻辑功能部件的逻辑单元内核,这些逻辑单元内核就是在逻辑代数中所描述的 “与”、“或”、“非”三种基本逻辑运算,而数字逻辑中具有更加复杂逻辑功能部件就是通过这些逻辑单元内核来形成一些复杂的逻辑门电路,如“与非门”、“或非门”、“异或门”等,然后通过这些复杂逻辑门电路来实现逻辑功能部件。例6.1 用可编程器件设计具有2输入的四正“与非门”。这种逻辑电路实际上就是由4个双输入的与非门被集成在一个单芯片上,比如TI公司的74LS00器件结构。功能分析:四2输入表示一个逻辑单元内核,应 F1 F2 F3 F4 该由4个具有双输入的基本逻辑电路组成,而且每个双输入基本逻辑电路构成一个独立主体,即具有各自独立的输入/输出对应关系。由于输入变量数已经明确的给出为2,所以2个变量输入组合将有4种。根据 A1 B1 A2 B2 A3 B3 A4 B4“与”运算概念,要使输出为1,只有两个输入变量 的取值都为1,而 “非”的概念就是对其求否定, 图6.2 四个2输入正“与非门”所以本例的设计只有在两个输入都为0时,输出才为 1,四2输入正“与非门”逻辑电路结构如图6.2所示。编程构思:由于设计需求中的四表示了该逻辑电路,需要考虑有四组不同输入变量编码的外部输入情况,所以在确定输入和输出关系变量组合时,要考虑到这四组情况有可能是出现四种不同时间上的输入组合集,因此用A1、B1、A2、B2、 A3、B3、A4、B4 分别表示四组不同输入变量编码,而用F1、F2、F3、F4对应四组输入组合集的输出。VHDL语言编程如图6.3所示。library ieee; use ieee.std_logic_1164.all; entity example 6.1 is port ( A1, B1, A2, B2, A3, B3, A4, B4 :in std_logic; F1, F2, F3, F4 :out std_logic ); end example6.1; architecture e6.1 of example is begin F1 = A1 nand B1; F2 = A2 nand B2; F3 = A3 nand B3; F4 = A4 nand B4; end e6.1;图6.3 四2输入“与非门”编程通过图6.3我们可以看出,若要将该可编程器件逻辑功能改变成3个3输入正与非门,我们只需要修改程序中的几个赋值语句,即F1 = A1 nand B1 nand C1;F2 = A2 nand B2 nand C2;F3 = A3 nand B3 nand C3;删除端口定义中与F4相关的变量定义和赋值语句即可完成逻辑功能的修改。而采用传统设计方式时,只能是将原已经被选定的非定制器件74LS00换成74LS10,以至于原购置器件被废弃,从而导致设计费用增加。从这个例子可看出,在可编程器件的功能设计中,若对逻辑函数的赋值语句加以修改,就可以很方便地修改逻辑函数的逻辑功能,所以可编程器件的设计是非常灵活与方便。从例6.1中我们可看出在编程中还有一个需要注意的问题,就是输入变量数增加的问题是否也只是简单修改赋值语句中变量数和初始化中增加变量数的定义。从VHDL语言形式上是可以这样,但为了提高程序可读性和可修改性,实际上对这种多输入变量基本逻辑门电路设计是通过编程中一些语句使用技巧来实现,例6.2就描述了如何用VHDL语言编程技巧来解决多输入基本逻辑门电路的设计问题。例6.2 用可编程器件设计具有n输入的“与非门”。这种逻辑电路实际上就是由n个输入的与非门被集成在一个单芯片上,基本逻辑门电路结构表示如图6.4所示。功能分析:输入变量数并未明确的给出,所以只 F能用变量n来表示。根据“与”运算概念,要使输出为1,只有所有输入变量取值都为1。而“非”的概念就是对其求否定,所以本例的设计只有在所有输入都为1时,输出才为0。 A1 A2 A3 An编程构思:设计需求中的n表明设计时需要考虑 图6.4 具有n输入的正“与非门”有n组不同输入变量编码输入情况,设计时只能以变量区域来定义输入量,因此用vector( n-1 downto 0 )表示n种不同输入变量编码,使用F表示输出。另外考虑到n个输入有求“与”问题,所以使用一个中间变量TEMPLE来存放每次求“与”的结果,VHDL语言编程如图6.5所示。library ieee; use ieee.std_logic_1164.all; entity example6.2 is port ( A :in std_logic_vector ( ( n 1 ) downto 0 ); F :out std_logic ); end example6.2; architecture e6.2 of example is begin process ( LEN ) variable TEMPLE:Boolean; begin TEMPLE :=1; for i in 0 to LENlength - 1 loop TEMPLE := TEMPLE and A ( i ); end loop; F = not TEMPLE; end process; end e6.2; 图6.5 具有n输入的正“与非门”编程例6.3 用可编程器件设计四2输入的正“或门”。这种逻辑电路实际上就是由4个双输入的或门被集成在一个单芯片上,比如TI公司的74LS32器件结构。功能分析:四个2输入表示一个逻辑单元内核,应 F1 F2 F3 F4+ + + +该由4个具有双输入的基本逻辑电路组成,而且每个双输入基本逻辑电路构成一个独立主体,即具有各自独立的输入/输出对应关系。由于输入变量数已经明确的给出为2,所以2个变量输入组合将有4种。根据“或” A1 B1 A2 B2 A3 B3 A4 B4运算概念,要使输出为0,只有两个输入变量 的取值都 为0,所以本例的设计只有在两个输入都为0时,输出 图6.6 四个2输入正“或门”才为0,四个2输入正“或门”逻辑电路结构如图6.6所示。编程构思:由于设计需求中的四表示了该逻辑电路,需要考虑有四组不同输入变量编码的外部输入情况,所以在确定输入和输出关系变量组合时,要考虑到这四组情况有可能是出现四种不同时间上的输入组合集,因此用A1、B1、A2、B2、 A3、B3、A4、B4 分别表示四组不同输入变量编码,而用F1、F2、F3、F4对应四组输入组合集的输出,VHDL语言编程如图6.7所示。library ieee; use ieee.std_logic_1164.all; entity example 6.3 is port ( A1, B1, A2, B2, A3, B3, A4, B4 :in std_logic; F1, F2, F3, F4 :out std_logic ); end example6.3; architecture e6.3 of example is begin F1 = A1 or B1; F2 = A2 or B2; F3 = A3 or B3; F4 B ) then GO =1; EO =0; LO =0; elsif ( A B ) then LO =1; EO =0; GO =0; elsif EO =1; GO =0;LO B ) then GO =1; EO =0;LO =0; elsif ( A B ) then LO =1;EO =0;GO =0; else if EI =1then EO =1;LO =0;GO =0; elsif GI =1then EO =0;LO =0;GO =1; elsif LI =1then EO =0;LO=1;GO=0; end if; end if; 图6.11 多组比较器编程6.2.3 代码转换器设计代码转换器的功能是将以某种编码格式的输入数据信息通过变换后,形成另一种编码格式的输出。对这类功能部件的设计对输入信号都要预先确定一种输入编码格式,因此输出与输入信息的格式变换就将被变换成一种非常规范的描述,所以这类功能部件的设计思路是寻求输入数据编码和输出数据编码格式的差异点。例6.5 设计一个将8421码转换成2421码和余3码的代码转换器。功能分析:由于要实现8421码到2421码和余3码的转换,说明功能部件的输入数据为8421码,输出数据将以2421码或余3码格式进行输出。我们知道这三种编码都是用4位二进制码来表示一位十进制数,而一位十进制数的取值范围为09 ,但4位二进制数可以有16 种 2421代码 余3代码组合表示,所以只有10种组合是有效代码表示,代码转换器其余6 种代码表示属于无效代码。根据8421码规则将取16种组合中的前10种,而2421码则不取中间6种组合,余3码不取前、后各3种组合。另外本设计需要按 8421码规定的输入码转 控制条件 8421代码换成按2421码或按余3码规定的两种不同类型特定输出代码,所以该转换器的输入中必须具有 图6.12 代码转换器功能部件结构一个外部控制条件,来确定该转换器将要执行的转换,代码转换器功能部件如图6.12所示。编程构思:输入信号用8421码表示,但需要将输入编码从1010到1111的16种输入组合列为不发生条件,即出现这些输入组合,输出端口将以高阻符号Z表示。由于以2421码格式所组成的输出编码中间6种组合不能使用,为此一旦输入出现0101到1010时,输出的2421码应该比输入编码值大6,编程中需要将这类输入码进行直接加6处理。另外因余3码与8421码的对应关系是当输入变量出现在0000到1001这10种组合时,输出的余3码只需要在当前输入组合值上直接加3即可,所以代码转换器VHDL语言编程如图6.13所示。library ieee; use ieee.std_logic_1164.all;entity example 6.5 is port ( i_code :in std_logic_vector ( 3 downto 0 ); cflag :in std_logic; o2421_code :out std_logic_vector ( 3 downto 0); o3_code :out std_logic_vector ( 3 downto 0 ) );end example 6.5;architecture e6.5 of example isbegin o2421_code = i_code when ( i_code =“0101”and i_code =“1010”) elseZwhen other; o3_code = i_code + 3 when ( i_code =“1001”and cflag =1) elseZwhen other;end e6.5; 图6.13 8421码与2421码和余3码转换器编程程序中使用的cflag就是一个外部控制变量,所以它以外部输入变量的形式存在于设计好的可编程器件中,即当cflag为0时,表示该代码转换器实现8421码到2421码的转换,当cflag为1时,表示该代码转换器实现8421码到余3码的转换。6.2.4 多路选择器与多路分配器设计多路选择器和多路分配器的功能都是将输入信号根据控制选择信号的不同组合,将其分配到输出端口上。这两种功能部件的差异点是,在多路选择器中是按控制信号的不同组合从多组输入信号中选择一组作为输入信号的输出,而多路分配器是根据不同控制信号的组合,将从多个输出端口中选择一个端口作为输入信号的输出端口,这两种功能部件结构如图6.14所示。多路分配器多路选择器输入信号组1 输出信号组1输入信号组2 输出信号组2 输出 输入信号输入信号组I 输出信号组i 选择控制 选择控制 图6.14(a)多路选择器结构图 图6.14(b)多路分配器结构图例6.6 设计一个4选1多路选择器。功能分析:由于多路选择器完成的功能,是从多组输入信号组中选择一组输入信号成为有效输出信号,而设计需求中的4就显式说明了该功能部件的输入信号组有4组,1也就是输出信号组,所以4选1多路选择器就是通过控制条件从4组输入信号中,选出一组作为功能部件的当前输出信号组。另外对多路选择器的控制变量设置是由2n表示来覆盖输入信号组数,本例的输入信号组有4组,所以控制信号数的选择为2,这是因为22= 4,它覆盖了输入信号组。编程构思:输入信号有4组,因此在程序中必须使用4个变量或矢量组来表示,本例是直接用d0、d1、d2、d3来表示4个位信号输入;因为输入的位信号量为4,所以需要2个控制信号,本例中用a0、a1表示;输出端口在设计中明确指出是1,为此对输出信号端口用q来表示,4选1多路选择器的VHDL语言编程如图6.15所示。library ieee; use ieee.std_logic_1164.all;entity example 6.6 is port ( d0,d1,d2,d3 :in std_logic;a0,a1 :in std_logic; q :out std_logic );end example 6.6;architecture e6.6 of example is signal sel :integer;begin with sel select q = d0 after 10ns when 0,d1 after 10ns when 1, d2 after 10ns when 2,d3 after 10ns when 3, x after 10ns when other; sel = 0 when a0 =0and a1 =0, else 1 when a0 =1and a1 =0, else 2 when a0 =0and a1 =1, else 3 when a0 =1and a1 =1else 4;end e6.6图6.6 4选1多路选择器编程例6.7 设计一个4选1多路分配器。编程构思:多路分配器与多路选择器结构几乎一样,所不同的是选择控制信号不是从多个输入信号组中选择一个信号组进行输出,而是将唯一的一个输入信号组,通过控制选择传输到一个被指定的输出端口上,所以针对多路分配器的编程实际上就是将多路选择器中的多个输入信号定义换成一个信号定义,而将多路选择器的一个输出信号端口定义换成多个输出信号端口定义即可,而控制信号量仍维持2n覆盖计算原则,为此在本例的程序设计中用d表示输入端口;用q0、q1、q2和q3来表示输出端口定义,控制信号仍用a0和a1来表示,4选1多路分配器的VHDL语言编程如图6.7所示。library ieee; use ieee.std_logic_1164.all;entity example 6.7 is port ( d :in std_logic; a0,a1 :in std_logic; q0,q1,q2,q3 :out std_logic );end example 6.7;architecture e6.7 of example is signal sel :integer;begin with sel select q0 = d after 10ns when 0; q1 = d after 10ns when 1; q2 = d after 10ns when 2; q3 after 10ns when 3; sel = 0 when a0 =0and a1 =0 else 1 when a0 =1and a1 =0, else 2 when a0 =0and a1 =1, else 3 when a0 =1and a1 =1else 4;end e6.7; 图6.7 4选1多路分配器编程6.2.5 运算类功能部件设计在计算机系统中,通常所指的运算器设计包括了对半加器、全加器、减法器、乘法器、求补运算器和通用加/减计数器等功能部件的设计,由于这类功能部件具备了对数据信息的计算行为,所以它们被称为运算器功能部件。例6.8 设计半加器。在计算机系统或其它智能化系统中,通常所说的半加功能实际上是指两个一位的二进制数位进行求和计算。求和数据结果数据进位数据0 0 0 00 1 1 01 0 1 01 1 0 1功能分析:由于两个一位的二进制数要进行求和 计算,那么可能出现的输入组合将有四种情况,即两个数据都是0;两个数据都是1;或两个数据互为相异1(0);针对这四种数据组合的求和,其计算结果可能得到0、1或10,因计算的结果也只能是用一位二进制数据表示,所以一旦出现10情况时,则1将用一个进位来表示,求和类型如表6.1所示。 表6.1 半加计算针对这四种组合求和计算,若要用电子电路来实现这种半加功能,则设计的功能部件必须提供一个求和变量表示和一个表示产生进位的变量来描述。 编程构思:由于半加计算只针对两个独立位的二进制数进行计算,所以功能部件的输入数据只需要设计两个位变量,编程中用变量a表示被加数,用变量b表示加数。另外两个二进制数的求和结果和产生的进位需要加以记录,为此使用变量sum来表示求和结果,用变量carry变量来表示求和过程中产生的进位,半加器的VHDL语言编程如图6.8所示。library ieee; use ieee.std_logic_1164.all;entity example6.8 is port ( a,b :in std_logic; sum,carry :out std_logic );end example6.8;architecture e6.8 of example is begin sum = a xor b; carry =1when ( a = 1 ) and ( b = 1 ) else0; end e6.8;图6.8 半加器编程例6.9 设计全加器。求 和 数 据结果数据进位数据0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1由于半加器只考虑到一位二进制数的求和问题,若需要实现多位二进制数求和,显然半加器是不能解决这个问题,所以半加器只描述了计算行为的基本规范,而全加器则是实现两个二进制数求真实和时的一种完整考虑。功能分析:要真正作到两个一位的二进制数进行求和计算,除了考虑本位的求和问题,还应该考虑低位数据计算结果所产生的进位对本位计算 表6.2 全加计算的影响,所以全加器的输入变量是在半加器的基础上再增加一个进位输入变量的表示,形成输入变量为3个,导致输入组合形成8种表示,而输出变量仍只需要维持半加器表示即可,即一个表示本位求和后的结果,另一个为本位求和后所向高位产生的进位,全加器的求和类型如表6.2所示。 从表6.2中可看出,针对这8种输入组合求和计算,对求和计算可以用两个逻辑函数进行描述,其中求和结果函数为1,只要输入变量中1的个数为奇数,而进位函数为1,只要输入变量中1的个数大于或等于2个即可,所以针对结果函数可以用逻辑运算符中的异或逻辑关系,而针对进位函数只需要满足被加数与加数同为1;被加数与低位进位同为1或加数与低位进位同为1这三种情况,为此只需要使用逻辑运算符中的与、或逻辑关系。编程构思:由于全加计算除了两个独立位的二进制数求和,还需要考虑低位求和后产生进位的影响问题,所以功能部件的输入数据要设计三个位变量,编程中用变量a表示被加数,用变量b表示加数,用ci-1变量表示低位的进位,而仍用变量sum来表示求和结果,用变量ci变量表示本位求和中产生向高位的进位,全加器的VHDL语言编程如图6.9所示。library ieee; use ieee.std_logic_1164.all;entity example6.9 is port ( a,b,ci-1 :in std_logic; sum,ci :out std_logic );end example6.9;architecture e6.9 of example is begin sum = ( a xor b ) xor ci-1; ci =1when ( a and b ) or ( ci - 1 and a ) or ( ci - 1 and b ) else0; end e6.9;图6.9 全加器编程例6.10 设计字节加(减)法器。半加器和全加器都是描述的一位二进制数求和问题,实际上利用可编程器件可以直接设计多位二进制运算器,并不需要设计出多个全加器再通过外部连线将其构成一个多位加法器功能部件。计算数据方式控制计算方式a(70) b(70) 0a(70) + b(70)a(70) b(70) 1a(70) - b(70)功能分析:字节加(减)法器表明该功能部件在外部控制条件的控制下,可以根据运算需求参与加法计算或减法计算,因此在对该功能部件的设计中,必须有一个外部输入的控制条件信号来裁决计算功能,该功能 部件操作特性如表6.3所示。编程构思:由于字节加(减)法器可以 表6.3 字节加(减)法器运算表直接实现两个8位二进制数据的计算,所以编程初始化中需要定义两个数据矢量来分别表示两个运算数据,另外还需要设置一个外部输入的控制变量来裁决运算方式,本例中用矢量a(7 0)和b(7 0)来表示参与运算的两个字节数据,而用a_sflag来表示运算裁决外部输入控制变量。计算中还有一个需要考虑的问题就是编程中如何完成进位处理,所以编程中不能简单使用计算语句f = a + b,这是因为一旦a + b 出现进位,或执行a b出现借位时,这种简单的编程语句是不能解决这类计算问题。在VHDL语言中提供了一个称为并置符的运算符&,该运算符的功能实现如下两种功能:(1)可以将一个单元素并置于一个数的左端或右端,形成一个更长的数组;(2)可以将两个数组并置成一个新的数组。鉴于上述并置符功能,编程中可以先将一个单元素0并置在被加(减)左端,使其由原来的8位数据变成一个9位数据,这个第9位数据就是进位(借位)位,然后再与加(减)数进行运算,字节加(减)法器的VHDL语言编程如图6.10所示。library ieee; use ieee.std_logic_1164.all;entity example 6.10 is port ( a,b :in std_logic_vector ( 7 downto 0 ); a_sflag :in std_logic; result :out std_logic_vector ( 8 downto 0 ) );end example6.10;architecture e6.10 of example isbegin result = (0&a) + b when a_sflag =1else result = (0&a) b; end e6.10;图6.10 字节加(减)法器编程例6.11 设计字节求补器。该功能部件主要是对输入数据进行补码变更,也就是说,当输入数据为一个二进制数据信息时,通过该功能部件的变更后输出的数据信息是原输入信息的补码。求补器是一种常用的运算部件,为减少CPU器件内部资源的浪费,在设计运算功能部件时,并不需要根据算术运算分别要设计加法器、减法器、乘法器和除法器,而只需要设计一个加法器来统一所有算术运算。因为作减去时,减去一个数可以用加上该数的补数来获得,乘法计算可以被转化为加法和左移来实现,而除法可以被转化为加补数和右移来实现,所以有求补器后,则算术运算都可以用一个加法器来实现。功能分析:要获取一个数的补数,我们必须先将该数的反码求出,然后在获取的反码数最低位加1,而求某数的反码只需要使用否定逻辑运算即可,最低位加1只需要使用加法计算就可以完成。编程构思:由于是对字节数进行求补,所以在端口定义时,首先需要定义一个外部输入的字节矢量作为该功能部件的任意求补数据的输入,同时该功能部件还需要有一个对应的结果字节数据输出矢量,通过对该输出端口数据的读入,就可以得到当前任意输入数据的补码表示,本例中采用字符变量TCI表示任意输入数据矢量,用TCO表示补码输出数据矢量,字节求补器的VHDL语言编程如图6.11所示。library ieee; use ieee.std_logic_1164.all;entity example6.11 is port ( TCI :in std_logic_vector ( 7 downto 0 ); TCO :out std_logic_vector ( 7 downto 0 ) );end example 6.11;architecture e6.11 of example isbegin TCO 7的覆盖范围,所以监管系统中必须存在于一个38线译码器,该译码器的8个输出信号中有7个分别与7个计算节点互连,以形成 1 2 7译码器关闭计算节点的命令信号。考虑到监管系统 0中38线译码器受控,所以该译码器还有一个工作有效控制信号,只有在控制信号有效 3输入译码信号 2输入控制信号监管系统情况下,该译码器才能将放置在译码信号输入端上的译码数据进入到译码器并产生正确的译码输出,故障节点的恢复申请通过共享 图6.12 EMS监管系统译码器结构示意图信号线与监管系统形成中断连接,在监管系统器得到恢复申请时,立即修改译码器输入为000,通过译码器在共享连线上输出0,以便把故障节点重新并入系统,监管系统的译码器结构示意图如图6.12所示。编程构思:监管系统在故障

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论