第5章 常用数字电路的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3
5.1.1 运算电路设计

1.加法器的设计
加法器有半加器和全加器两种,利用两个半加器可以构
成一个全加器。
半加器和全加器有什么区别?
半加器只是加数与被加数相加,而全加器是加数、 被加数与进位值相加。所以半加器不考虑进位,而全加 器要考虑进位。
4
【例5-1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY h_adder IS PORT(a, b : IN STD_LOGIC; s, c : OUT STD_LOGIC); END h_adder; ARCHITECTURE rtl OF h_adder IS BEGIN c<=a AND b; s<=a XOR b; END rtl;
在时序电路描述中,时钟信号作为敏感信号,显式 的出现在PROCESS语句后的括号中。
PRCESS(clock_signaLeabharlann Baidu)

时序信号边沿的到来将作为时序电路语句执行的条 件来启动进程的执行。这种以时钟为敏感信号的进 程描述方法为:
14

74/54系列148/348是优先编码器,低电平有效, EIN为使能端。图是74148优先编码器的引脚 图。
15

【例5-6】8-3优先编码器
LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY priencoder IS PORT(input : IN STD_LOGIC_VECTOR(7 DOWNTO 0); A : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END priencoder; ARCHITECTURE rtl OF priencoder IS BEGIN
20
5.1.4 数据选择器设计

在数字系统中常需要将多路数据有选择地分别传送 到公共数据线上去,完成这一功能的逻辑电路称为 数据选择器。 数据选择器是一种通用性很强的中规模集成电路, 其用途很广,如应用于数字仪表,计算机等程序控 制电路中,或实现数据通道扩展等,主要有4选1数 据选择器、8选1数据选择器(型号为74151、 74LS151、74251、74LS151)、16选1数据选择器 (可以用两片74151连接起来构成)等 。
22
5.2 时序逻辑电路设计
23

任一时刻的输出不仅取决于当时的输入,而且还取 决于电路原来的状态,这样的数字电路叫做时序逻 辑电路。时序逻辑电路的基础电路包括触发器、锁 存器、寄存器和计数器等。 由数字电路知道,任何时序电路都以时钟为驱动信 号,时序电路只是在时钟信号的边沿到来时,其状 态才发生改变。因此,时钟信号是时序电路程序的 执行条件,时钟信号是时序电路的同步信号。
13
CASE A IS WHEN "00000001" => Y<="000" ; WHEN "00000010" => Y<="001" ; WHEN "00000100" => Y<="010" ; WHEN "00001000" => Y<="011" ; WHEN "00010000" => Y<="100" ; WHEN "00100000" => Y<="101" ; WHEN "01000000" => Y<="110" ; WHEN "10000000" => Y<="111" ; WHEN OTHERS=> Y<="000"; END CASE; ELSE Y<="000"; END IF; END PROCESS;
10

3.乘法器的设计
对于乘法器,可以通过自主编写加法器和移位寄
存器来实现。但是,Quartus II给设计者提供了
更高效的方法,利用集成在软件内部的参数化宏 功能模块LPM-MULT可以非常方便的实现乘法器。
11
5.1.2 编码器设计
12

【例5-5】8-3编码器 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY priencoder IS PORT(A : IN STD_LOGIC_VECTOR(7 DOWNTO 0); EN : IN STD_LOGIC; Y : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END priencoder; ARCHITECTURE rtl OF priencoder IS BEGIN PROCESS (A) BEGIN IF EN='1' THEN
21


【例5-8】4选1多路选择器
ENTITY mux4_1 IS PORT(D : IN STD_LOGIC_VECTOR(3 DOWNTO 0); A : IN STD_LOGIC_VECTOR(1 DOWNTO 0); Y : OUT STD_LOGIC); END mux4_1; ARCHITECTURE arch OF mux4_1 IS BEGIN PROCESS (D, A) BEGIN CASE A IS WHEN "00" =>Y<=D(0); WHEN "01" =>Y<=D(1); WHEN "10" =>Y<=D(2); WHEN "11" =>Y<=D(3); WHEN OTHERS =>Y<=„X'; END CASE; END PROCESS; END arch;
第5章 常用数字电路的设计

5.1 组合逻辑电路设计 5.2 时序逻辑电路设计 5.3 存储器的设计 5.4 常用接口电路设计
5.1 组合逻辑电路设计
2

任一时刻的输出仅仅取决于当时的输入,与 电路原来的状态无关,这样的数字电路叫做 组合逻辑电路。

用VHDL语言描述组合逻辑电路通常使用并 行语句或者进程。常见的组合逻辑电路有运 算电路、编码器、译码器和数据选择器等。

7

2.减法器的设计
1位全减器由两个半减器和一个或门连接而成。 【例5-3】半减器的VHDL描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_suber IS PORT(a, b: IN STD_LOGIC; diff, sub: OUT STD_LOGIC); END ENTITY h_suber; ARCHITECTURE rtl OF h_suber IS BEGIN sub<=NOT a AND b; diff<=a XOR b; END ARCHITECTURE rtl;

比较上升沿,下降沿的描述方法,可以归纳出时钟边沿属性描 述的一般行式为: IF clock_signal = current_value AND Clock_signal 'LAST_VALUE AND Clock_signal' EVENT

25
时钟信号作为触发信号

时序电路中进程敏感信号是时钟信号
8

根据图5-3利用元件例化语句来实现1位全减器 的顶层设计描述。
9

【例5-4】1位全减器
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_suber IS PORT(a, b,subin : IN STD_LOGIC; d, subout : OUT STD_LOGIC); END f_suber; ARCHITECTURE arc OF f_suber IS COMPONENT h_suber PORT(a, b : IN STD_LOGIC; diff, sub : OUT STD_LOGIC); END COMPONENT; SIGNAL s1,c1,c2:STD_LOGIC; BEGIN u1:h_suber PORT MAP(a,b,s1,c1); u2:h_suber PORT MAP(s1,subin,d,c2); subout<=c1 OR c2; END arc;
16
PROCESS (input) BEGIN IF (input(7)= '0') THEN A<= "000"; ELSIF (input(6)= '0') THEN A<= "001"; ELSIF (input(5)= '0' ) THEN A<= "010"; ELSIF (input(4)= '0') THEN A<= "011"; ELSIF (input(3)= '0' ) THEN A<= "100"; ELSIF (input(2)= '0') THEN A<= "101"; ELSIF (input(1)= '0' ) THEN A<= "110"; ELSE A<= "111" ; END IF; END PROCESS; END rtl;

24
5.2.1 时钟的描述
时钟信号上升沿到来的条件可写为: IF clk ='1' AND clk' LAST_VAULE = '0' AND clk' EVENT; 时钟信号下降沿的属性描述为: IF clk = '0' AND clk' LAST_VALUE = '1' AND clk' EVENT;

5

1位全加器可以由两个半加器和一个或门连接而成。
6
【例5-2】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT(a, b,ci : IN STD_LOGIC; s, co : OUT STD_LOGIC); END f_adder; ARCHITECTURE arc OF f_adder IS COMPONENT h_adder --调用半加器声明语句 PORT(a, b : IN STD_LOGIC; s, c : OUT STD_LOGIC); END COMPONENT; SIGNAL s1,c1,c2:STD_LOGIC; --定义三个信号作为内部的连接线 BEGIN u1:h_adder PORT MAP(a,b,s1,c1); --例化语句 u2:h_adder PORT MAP(s1,ci,s,c2); co<=c1 OR c2; END arc;
17
5.1.3 译码器设计

3-8译码电路的功能与编码器的功能相反。3个 输入变量为d0,d1,d2,输出变量有8个,即 y0~y7,对输入变量d0,d1,d2译码,就能 确定输出端y0~y7的输出变为有效(低电平), 从而达到译码目的。
18
例5-7:3-8译码器 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY decode3_8 IS PORT (a,b,c : IN STD_LOGIC;
g1,g2a,g2b : IN STD_LOGIC; y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END decode3_8;
19
ARCHITECTURE rtl OF decode3_8 IS SIGNAL ind : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN ind<=c&b&a; PROCESS (ind,g1,g2a,g2b) BEGIN IF (g1='1' and g2a='0' and g2b='0') THEN CASE ind IS WHEN "000" =>y<="11111110"; WHEN "001" =>y<="11111101"; WHEN "010" =>y<="11111011"; WHEN "011" =>y<="11110111"; WHEN "100" =>y<="11101111"; WHEN "101" =>y<="11011111"; WHEN "110" =>y<="10111111"; WHEN "111" =>y<="01111111"; WHEN OTHERS=>y<="XXXXXXXX"; END CASE; ELSE y<=“11111111"; END IF; END PROCESS; END rtl;
相关文档
最新文档