数字逻辑单元设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数字逻辑单元设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 逻辑 单元 设计 课件
- 资源描述:
-
1、何宾2008.10第第 4章章u 在复杂数字系统中,其结构总可以用若干基本逻辑单元的组合进行描述。u 基本逻辑单元一般分为组合逻辑电路和时序电路两大类。在此基础上,可以更进一步进行组合。u 本章所介绍的存储器、运算单元和有限自动状态机就是由基本逻辑单元组合而成的。u 本章首先介绍基本的组合逻辑电路和时序电路设计,然后介绍在数字系统设计中普遍使用的存储器电路、运算单元和有限自动状态机。u 对基本逻辑门的操作主要有:与、与非、或、或非、异或、异或非和非操作。通过使用VHDL语言中描述基本逻辑门电路操作的关键字:and(与),nand(与非),or(或),nor(或非),xor(异或),xnor(异
2、或非),not(非)来实现对基本逻辑门的操作。一堆复杂的逻辑门操作总可以化简为集中基本逻辑门操作的组合。【例例4-1】基本门电路的设计 Library ieee;Use ieee.std_logic_1164.all;Entity gate is Port(a,b,c :in std_logic;d :out std_logic);end gate;architecture rtl of gate isbegin d=(not a)and b)or c;end rtl;u 在数字系统中,常常会将某一信息用特定的代码进行描述,这称为编码过程。编码过程可以通过编码器电路实现。同时,将某一特定的代码
3、翻译成原始的信息,这称为译码过程。译码过程可以通过译码器电路实现。u 将某一信息用一组按一定规律排列的二进制代码描述称为编码。典型的有8421码、BCD码等。在使用VHDL语言设计编码器时,通过使用CASE和IF语句实现对编码器的描述。【例例4-2】8/3线编码器的VHDL描述 library ieee;use ieee.std_logic_1164.all;entity priority_encoder_1 is port(sel:in std_logic_vector(7 downto 0);code:out std_logic_vector(2 downto 0);end priorit
4、y_encoder_1;architecture archi of priority_encoder_1 is begin code=000 when sel(0)=1 else 001 when sel(1)=1 else 010 when sel(2)=1 else 011 when sel(3)=1 else 100 when sel(4)=1 else 101 when sel(5)=1 else 110 when sel(6)=1 else 111 when sel(7)=1 else ZZZ;end archi;u 译码的过程实际上就是编码过程的逆过程,即将一组按一定规律排列的二进
5、制数还原为原始的信息。下面以最常用的3:8译码器为例,给出其VHDL语言描述。【例例4-4】十六进制数的共阳极十六进制数的共阳极7段数码显示段数码显示VHDL描述描述 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder is port(hex:in std_logic_vector(3 downto 0);led:out std_logic_vector(6downto 0);end decoder;architecture rtl of decoder is begin
6、 with hex select LED=1111001 when 0001,-1 0100100 when 0010,-2 0110000 when 0011,-3 0011001 when 0100,-4 0010010 when 0101,-5 0000010 when 0110,-6 1111000 when 0111,-7 0000000 when 1000,-8 0010000 when 1001,-9 0001000 when 1010,-A 0000011 when 1011,-b 1000110 when 1100,-C 0100001 when 1101,-d 000011
7、0 when 1110,-E 0001110 when 1111,-F 1000000 when others;-0 end rtl;u CASE和IF语句描述数据缓冲器 在数字系统设计中,常使用CASE和IF语句描述数据缓冲器。下面给出这两种描述方法。【例例4-5】4选1多路选择器的IF语句描述library ieee;use ieee.std_logic_1164.all;entity multiplexers_1 isport(a,b,c,d:in std_logic;s:in std_logic_vector(1 downto 0);o:out std_logic);end multi
8、plexers_1;architecture archi of multiplexers_1 isbeginprocess(a,b,c,d,s)beginif(s=00)then o=a;elsif(s=01)then o=b;elsif(s=10)then o=c;else o o o o o=d;end case;end process;end archi;u 使用三态缓冲语句也可以描述多路数据选择器。图4.5给出了4选1多路选择器的三态的原理。图4.5 三态缓冲实现4选1多路选择器【例例4-7】4选1多路选择器的三态描述library ieee;use ieee.std_logic_11
9、64.all;entity multiplexers_3 isport(a,b,c,d:in std_logic;s:in std_logic_vector(3 downto 0);o:out std_logic);end multiplexers_3;architecture archi of multiplexers_3 isbegino=a when(s(0)=0)else Z;o=b when(s(1)=0)else Z;o=c when(s(2)=0)else Z;o=d when(s(3)=0)else Z;end archi;u 比较器就是对输入数据进行比较,并判断其大小的逻辑电
10、路。在数字系统中,比较器是基本的组合逻辑单元之一,比较器主要是使用关系运算符实现的。【例例4-8】8位数据比较器的VHDL描述library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity comparator_1 isport(A,B:in std_logic_vector(7 downto 0);CMP:out std_logic);end comparator_1;architecture archi of comparator_1 isbeginCMP=B else 0;end archi;
11、从上面的例子可以看出,使用VHDL中的、=、=、=、/=,这几种关系运算符及其它们的组合,可以设计出具有复杂比较功能的比较器。u 数据运算单元主要包含加法器、减法器、乘法器和除法器,由这四种运算单元和逻辑运算单元一起,可以完成复杂数学运算。在VHDL语言中,支持的几种运算有:加(+)、减(-)、乘(*)、除(/)、取余(MOD)、幂乘(*)。u 在VHDL描述加法器时,使用+运算符比门级描述更简单。下面给出带进位输入和输出的无符号的8比特加法器的VHDL描述。【例4-9】带进位输入和输出的无符号的8比特加法器的VHDL描述library ieee;use ieee.std_logic_1164
12、.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity adders_4 isport(A,B,CI:in std_logic_vector(7 downto 0);SUM:out std_logic_vector(7 downto 0);CO:out std_logic);end adders_4;architecture archi of adders_4 issignal tmp:std_logic_vector(8 downto 0);begin SUM=tmp(7 downto 0);CO=tm
13、p(8);tmp=conv_std_logic_vector(conv_integer(A)+conv_integer(B)+conv_integer(CI),9);end archi;u 减法是加法的反运算,采用VHDL语言的-符号描述减法器,比用门级描述更简单。下面给出一个无符号8位带借位的减法器的VHDL描述。【例例4-10】无符号8位带借位的减法器的VHDL描述library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity adders_8 isport(A,B:in std_logic_v
14、ector(7 downto 0);BI:in std_logic;RES:out std_logic_vector(7 downto 0);end adders_8;architecture archi of adders_8 isbeginRES=A-B-BI;end archi;u 用VHDL语言实现乘法器时,乘积和符号应该为2的幂次方。PLD的优点就是在内部集成了乘法器的硬核,具体在IP核的设计中详细讨论。【例例4-11】下面给出一个8位和4位无符号的乘法器的VHDL描述library ieee;use ieee.std_logic_1164.all;use ieee.std_logi
15、c_unsigned.all;entity multipliers_1 isport(A:in std_logic_vector(7 downto 0);B:in std_logic_vector(3 downto 0);RES:out std_logic_vector(11 downto 0);end multipliers_1;architecture beh of multipliers_1 isbeginRES=A*B;end beh;u 除法器可以用VHDL语言的/符号实现,需要注意的是在使用/符号进行除法运算时,除数必须是常数,而且是2的整数幂。因为除法器的运行有这样的限制,实际上
16、除法也可以用移位运算实现。下面给出一个除法器的VHDL描述。【例例4-12】除法器的VHDL描述。library ieee;use ieee.std_logic_1164.all;use entity divider_1 is port(DI:in unsigned(7 downto 0);DO:out unsigned(7 downto 0);end divider_1;architecture archi of divider_1 is begin DO=DI/2;end archi;【例例4-13】三态门的进程描述Library ieee;Use ieee.std_logic_1164.
17、all;Entity tri_gate is Port(en :in std_logic;din :in std_logic_vector(7 downto 0);dout :out std_logic_vector(7 downto 0);end tri_gate;Architecture rtl of tri_gate isBegin process(din,en)begin if(en=1)then dout=din;else dout=ZZZZZZZZ;end if;end process;end rtl;【例例4-14】三态门的WHEN-ELSE进程描述Library ieee;Us
18、e ieee.std_logic_1164.all;Entity tri_gate is Port(en :in std_logic;din :in std_logic_vector(7 downto 0);dout :out std_logic_vector(7 downto 0);end tri_gate;Architecture rtl of tri_gate isbegindout=din when en=1 else ZZZZZZZZ;end rtl;从上面的两个例子中可以看出,使用条件并行语句描述三态门比使用进程要简单的多。【例例4-15】双向总线缓冲器的描述 Library ie
19、ee;Use ieee.std_logic_1164.all;Entity bidir is Port(a :inout std_logic_vector(15 downto 0);End bidir;Architecture rtl of bidir is signal a_in:std_logic_vector(15 downto 0);signal a_out:std_logic_vector(15 downto 0);signal T:std_logic;Begin a=a_out when T=0 else ZZZZZZZZZZZZZZZZ;a_out=a;end rtl;u 时序逻
20、辑电路的输出状态不仅与输入变量的状态有关,而且还与系统原先的状态有关。时序电路最重要的特点是存在着记忆单元部分,时序电路主要包括:时钟和复位、基本触发器、计数器、移位寄存器等。u 时序电路由时钟驱动,时序电路只有在时钟信号的边沿到来时,其状态才发生改变。在数字系统中,时序电路的时钟驱动部分一般包括时钟信号和系统复位信号。根据时钟和复位的描述不同,时序电路一般分成同步复位电路和异步复位电路两类。u 在时序电路中,不论采用什么方法描述时钟信号,必须指明时钟的边沿条件(clock edge condition)。时钟沿条件有上升沿和下降沿两种。时钟的上升沿条件可以用下面的语句描述:clockeven
21、t and clock=1 rising_edge(clock)时钟的下降沿条件可以用下面的语句描述:clockevent and clock=0falling_edge(clock)u 在时序电路中,对时钟信号的驱动方法有如下几种描述方式:1)进程的敏感信号是时钟信号,在进程内部用if 语句描述时钟的边沿条件。【例例4-16】时钟信号的if描述 process(clock_signal)begin if(clock_edge_condition)then signal_out=signal_in;其它时序语句 end if;end process;2)在进程中用wait until语句描述时
22、钟信号,此时进程将没有敏感信号。【例例4-17】时钟信号的wait until描述 process begin wait until(clock_edge_condition);signal_out=signal_in;其它时序语句 end process;注意:1)在对时钟边沿说明时,一定要注明是上升沿还是下降沿。2)一个进程中只能描述一个时钟信号。3)wait until 语句只能放在进程的最前面或最后面。u 前面已经提到,根据复位和时钟信号的关系不同。时序电路分为同步复位电路和异步复位电路两大类。u、同步复位描述 同步复位指:当复位信号有效,并且在给定的时钟边沿有效时,时序电路才被复位。
23、在同步复位电路中,在只有以时钟为敏感信号的进程中定义。【例例4-18】同步复位的VHDL描述 process(clock_signal)begin if(clock_edge_condition)then if(reset_condition)then signal_out=reset_value;else signal_out=signal_in;end if;end if;end process;u 、异步复位描述异步复位指:当复位信号有效时,时序电路就被复位。在异步复位电路中,进程的敏感信号表中除时钟信号外,还有复位信号。【例例4-19】异步复位的VHDL描述process(reset_
24、signal,clock_signal)begin if(reset_condition)then signal_out=reset_value;elsif(clock_edge_condition)then signal_out=signal_in;end if;end process;u 触发器是时序逻辑电路的最基本单元,触发器具有“记忆”能力。u根据沿触发、复位和置位方式的不同触发器可以有多种实现方式。在PLD中经常使用的触发器有D触发器、JK触发器和T触发器等。【例例4-20】带时钟使能和异步复位/置位的D触发器的VHDL描述。D触发器是数字电路中应用最多的一种时序电路。表4.1给出了
25、带时钟使能和异步复位/置位的D触发器的真值表。输入输出CLRPRECEDCQ1XXXX001XXX1000XX无变化0010000111Library ieee;Useieee.std_logic_1164.all;Entity fdd is Port(clk,d,clr,pre,ce:in std_logic;q:out std_logic);end fdd;architecture rtl of dff is signal q_tmp:std_logic;begin q=q_tmp;process(clk,clr,pre,c)begin if(clr=1)then q_tmp=0;elsi
展开阅读全文