EDA技术实用教程(第四版)》习题答案

更新时间:2024-05-06 03:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《EDA技术实用教程(第四版)》习题

1 习 题

1-1 EDA技术与ASIC设计和FPGA开发有什么关系?FPGA在ASIC设计中有什么用途?P3~4

1-2 与软件描述语言相比,VHDL有什么特点? P6

l-3 什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么? P5 1-4 在EDA技术中,自顶向下的设计方法的重要意义是什么? P7~10 1-5 IP在EDA技术的应用和发展中的意义是什么? P22~14

1-6 叙述EDA的FPGA/CPLD设计流程,以及涉及的EDA工具及其在整个流程中的作用。 (P11~13)

2 习 题

2-1 OLMC(输出逻辑宏单元)有何功能?说明GAL是怎样实现可编程组合电路与时序电路的。 P34~36

2-2 什么是基于乘积项的可编程逻辑结构? P33~34,40 什么是基于查找表的可编程逻辑结构? P40~41

2-3 FPGA系列器件中的LAB有何作用? P43~45 2-5 解释编程与配置这两个概念。 P58

2-6 请参阅相关资料,并回答问题:按本章给出的归类方式,将基于乘积项的可编程逻辑结构的PLD器件归类为CPLD;将基于查找表的可编程逻辑结构的PLD器什归类为FPGA,那么,APEX系列属于什么类型PLD器件? MAX II系列又属于什么类型的PLD器件?为什么? P54~56

3 习 题

3-1 画出与以下实体描述对应的原理图符号元件: ENTITY buf3s IS --实体1:三态缓冲器 PORT(input:IN STD_LOGIC; --输入端 enable:IN STD_LOGIC; --使能端 output:OUT STD_LOGIC); --输出端 END buf3s ;

buf3s input output enable ENTITY mux21 IS --实体2: 2选1多路选择器 PORT(in0, in1,sel: IN STD_LOGIC; output:OUT STD_LOGIC);

mux21 in0 output in1 sel 3-2 图3-16所示的是4选1多路选择器,试分别用IF_THEN语句和CASE语句的表达方式写出此电路的VHDL程序,选择控制信号s1和s0的数据类型为STD_LOGIC_VECTOR;当s1=’0’,s0=’0’;s1=’0’,s0=’1’;s1=’1’,s0=’0’和s1=’1’,s0=’1’时,分别执行y<=a、y<=b、y<=c、y<=d。

图3-16 4选1多路选择器

--解1:用IF_THEN语句实现4选1多路选择器 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41 IS

PORT (a,b,c,d: IN STD_LOGIC; s0: IN STD_LOGIC; s1: IN STD_LOGIC; y: OUT STD_LOGIC); END ENTITY mux41;

ARCHITECTURE if_mux41 OF mux41 IS

SIGNAL s0s1 : STD_LOGIC_VECTOR(1 DOWNTO 0);--定义标准逻辑位矢量数据 BEGIN

s0s1<=s1&s0; --s1相并s0,即s1与s0并置操作 PROCESS(s0s1,a,b,c,d) BEGIN

IF s0s1 = \ THEN y <= a; ELSIF s0s1 = \ THEN y <= b; ELSIF s0s1 = \ THEN y <= c; ELSE y <= d; END IF;

END PROCESS;

END ARCHITECTURE if_mux41;

--解2:用CASE语句实现4选1多路选择器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41 IS

PORT (a,b,c,d: IN STD_LOGIC; s0: IN STD_LOGIC; s1: IN STD_LOGIC; y: OUT STD_LOGIC); END ENTITY mux41;

ARCHITECTURE case_mux41 OF mux41 IS

SIGNAL s0s1 : STD_LOGIC_VECTOR(1 DOWNTO 0);--定义标准逻辑位矢量数据类型 BEGIN

s0s1<=s1&s0; --s1相并s0,即s1与s0并置操作 PROCESS(s0s1,a,b,c,d) BEGIN

CASE s0s1 IS --类似于真值表的case语句 WHEN \ => y <= a; WHEN \ => y <= b; WHEN \ => y <= c; WHEN \ => y <= d; WHEN OTHERS =>NULL ; END CASE; END PROCESS;

END ARCHITECTURE case_mux41;

3-3 图3-17所示的是双2选1多路选择器构成的电路MUXK,对于其中MUX21A,当s=’0’和s=’1’时,分别有y<=‘a’和y<=’b’。试在一个结构体中用两个进程来表达此电路,每个进程中用CASE语句描述一个2选1多路选择器MUX21A。

图3-17 含2选1多路选择器的模块

--解:用CASE语句实现图4-18所示的是双2选1多路选择器构成的电路 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux31 IS

PORT(a1,a2,a3,s0,s1: IN STD_LOGIC; outy:OUT STD_LOGIC); END ENTITY mux31;

ARCHITECTURE case_mux31 OF mux31 IS SIGNAL y : STD_LOGIC;

BEGIN

u1: PROCESS(s0,a1,a2,a3) BEGIN

CASE s0 IS --类似于真值表的case语句 WHEN '0' => y <= a2; WHEN '1' => y <= a3; WHEN OTHERS =>NULL ; END CASE; END PROCESS;

u2: PROCESS(s1,a1,a2,a3,y) BEGIN

CASE s1 IS --类似于真值表的case语句 WHEN '0' => outy <= a1; WHEN '1' => outy <= y; WHEN OTHERS =>NULL ; END CASE; END PROCESS;

END ARCHITECTURE case_mux31;

3-4 将例3-20程序的计数器改为十二进制计数器,程序用例3-21的方式表述,并且将复位RST改为同步清零控制,加载信号LOAD改为异步控制方式。讨论例3-20与例3-21的异同点。

--解:十二进制计数器VHDL程序设计。 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT12 IS

PORT(CLK,RST,EN,LOAD : IN STD_LOGIC;

DATA : IN STD_LOGIC_VECTOR(3 DOWNTO 0); --4位预置数 DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数值输出 COUT : OUT STD_LOGIC); --计数进位输出 END CNT12;

ARCHITECTURE behav OF CNT12 IS

SIGNAL Q : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

REG: PROCESS(CLK,RST,EN,LOAD,Q) BEGIN

IF LOAD='0' THEN Q<=DATA; --允许加载

ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿 IF RST='0' THEN Q<=(OTHERS =>'0'); --计数器异步复位 ELSE

IF EN='1' THEN --检测是否允许计数或加载(同步使能) IF LOAD='0' THEN Q<=DATA; --允许加载 ELSE

IF Q<12 THEN Q<=Q+1; --允许计数,检测是否小于9

ELSE Q<=(OTHERS=>'0'); --大于等于9时,计数值清零 END IF; END IF; END IF; END IF; END IF; END PROCESS; COM: PROCESS(Q) BEGIN

IF Q=12 THEN COUT<='1'; --计数大于9,输出进位信号 ELSE COUT<='0'; END IF;

DOUT<=Q; --将计数值向端口输出 END PROCESS; END behav;

3-5 设计含有异步清零和计数使能的16位二进制加减可控计数器。

--解:用VHDL实现含有异步清零和计数使能的16位二进制加减可控计数器。 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ADD_SUB_16 IS

PORT (CLK,RST,ADD_EN,SUB_EN: IN STD_LOGIC;

CQ : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ; COUT: OUT STD_LOGIC); END ENTITY ADD_SUB_16;

ARCHITECTURE A_S_16 OF ADD_SUB_16 IS BEGIN

PROCESS(CLK,RST,ADD_EN,SUB_EN)

VARIABLE CQI: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN

IF RST = '1' THEN CQI:=(OTHERS => '0');--计数器异步复位 ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿 IF ADD_EN='1'THEN --检测是否允许计数(同步他能)

IF CQI<16#FFFF# THEN CQI:=CQI+1; --允许计数,检测是否小于65535 ELSE CQI:=(OTHERS => '0'); --大于65535,计数值清零 END IF;

IF CQI=16#FFFF# THEN COUT<='1'; --计数大于9,输出进位信号 ELSE COUT <= '0'; END IF; END IF;

IF SUB_EN='1'THEN --检测是否允许计数(同步他能)

IF CQI>0 THEN CQI:=CQI-1; --允许计数,检测是否小于65535 ELSE CQI:=(OTHERS => '1'); --大于65535,计数值清零 END IF;

END IF;

--IF EN='1' THEN Q<=Q1; --将内部的暂存数据向端口输出 --END IF;

Q<=Q1; --将内部的暂存数据向端口输出 END PROCESS; END bhv;

--解2:实现图3-20(d)RTL图的VHDL程序t3_12_d.vhd顶层设计描述 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY t3_12_d IS

PORT(SET,D,CLK,EN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC); END ENTITY t3_12_d;

ARCHITECTURE one OF t3_12_d IS

COMPONENT DFF_PRE_CLR_ENA --调用D触发器声明语句 PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END COMPONENT;

SIGNAL SS: STD_LOGIC; --定义1个信号作为内部的连接线。 BEGIN

SS<=SET AND (NOT RESET);

u1: DFF_PRE_CLR_ENA PORT MAP(CLK,D,Q,EN,SS,RESET); END ARCHITECTURE one;

图3-20 RTL图(e)

--解1:实现图3-20(e)RTL图的VHDL程序DFF_PRE_CLR.vhd底层设计描述 -- 带预置、清零和输出使能的D触发器程序(DFF_PRE_CLR.vhd) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF_PRE_CLR_ENA IS PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC;

ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END;

ARCHITECTURE bhv OF DFF_PRE_CLR_ENA IS

SIGNAL Q1:STD_LOGIC; --类似于在芯片内部定义一个数据的暂存节点 BEGIN

PROCESS(CLK,D,Q1,ENA,PRE,CLR) BEGIN

IF CLR='1' THEN Q1<='0'; ELSIF PRE='1' THEN Q1<='1';

ELSIF CLK'EVENT AND CLK='1' AND ENA='1' THEN Q1<=D; END IF;

--IF EN='1' THEN Q<=Q1; --将内部的暂存数据向端口输出 --END IF;

Q<=Q1; --将内部的暂存数据向端口输出 END PROCESS; END bhv;

--解2:实现图3-20(e)RTL图的VHDL程序t3_12_d.vhd顶层设计描述 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY t3_12_e IS

PORT(D,EN,CLK,RST : IN STD_LOGIC; Q1,Q : OUT STD_LOGIC); END ENTITY t3_12_e;

ARCHITECTURE one OF t3_12_e IS

COMPONENT DFF_PRE_CLR_ENA --调用D触发器声明语句 PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END COMPONENT;

SIGNAL D_EN: STD_LOGIC; --定义1个信号作为内部的连接线。 BEGIN

D_EN<=D AND EN; u1: DFF_PRE_CLR_ENA MAP(CLK=>CLK,D=>D,Q=>Q,ENA=>EN,PRE=>'0',CLR=>RST); Q1<=(NOT D_EN) OR RST; END ARCHITECTURE one;

PORT

图3-20 RTL图(f)

--解1:实现图3-20(f)RTL图的VHDL程序mux21a.vhd底层设计描述 -- 用WHEN_ELSE实现2选1多路选择器程序(mux21a.vhd) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21a IS

PORT(a,b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC); END ENTITY mux21a;

ARCHITECTURE one OF mux21a IS BEGIN

y<=a WHEN s='0' ELSE b; END ARCHITECTURE one;

--解2:实现图3-20(f)RTL图的VHDL程序DFF_PRE_CLR.vhd底层设计描述 -- 带预置、清零和输出使能的上升沿D触发器程序(DFF_PRE_CLR.vhd) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF_PRE_CLR_ENA IS PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END;

ARCHITECTURE bhv OF DFF_PRE_CLR_ENA IS

SIGNAL Q1:STD_LOGIC; --类似于在芯片内部定义一个数据的暂存节点 BEGIN

PROCESS(CLK,D,Q1,ENA,PRE,CLR) BEGIN

IF CLR='1' THEN Q1<='0'; ELSIF PRE='1' THEN Q1<='1';

ELSIF CLK'EVENT AND CLK='1' AND ENA='1' THEN Q1<=D; END IF;

--IF EN='1' THEN Q<=Q1; --将内部的暂存数据向端口输出

--END IF;

Q<=Q1; --将内部的暂存数据向端口输出 END PROCESS; END bhv;

--解3:实现图3-20(f)RTL图的VHDL程序t3_12_d.vhd顶层设计描述 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY t3_12_f IS

PORT(RST,D,CLK : IN STD_LOGIC; Q,DOUT : OUT STD_LOGIC); END ENTITY t3_12_f;

ARCHITECTURE one OF t3_12_f IS

COMPONENT DFF_PRE_CLR_ENA --调用D触发器声明语句 PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END COMPONENT;

COMPONENT mux21a --调用D触发器声明语句 PORT(a,b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC); END COMPONENT;

SIGNAL DD,DDD: STD_LOGIC; --定义1个信号作为内部的连接线。 BEGIN

u1: mux21a PORT MAP(D,'0',RST,DD); DDD<=D XOR DD;

u2: DFF_PRE_CLR_ENA PORT MAP(CLK,DDD,DOUT,'1','0','0'); u3: DFF_PRE_CLR_ENA PORT MAP(CLK,DD,Q,'1','0','0'); END ARCHITECTURE one;

4 习 题

4-1 归纳利用Quartus II进行VHDL文本输入设计的流程:从文件输入一直到SignalTap II测试。P95~P115

4-2 由图4-35和图4-36,详细说明工程设计CNT10的硬件工作情况。P114~P115

4-3 如何为设计中的SignalTap II加入独立采样时钟?试给出完整的程序和对它的实测结果。P115

4-4 参考QuartusII的Help,详细说明Assignments菜单中Settings对话框的功能。 (1)说明其中的Timing Requirements&Qptions的功能、他用方法和检测途经。 (2)说明其中的Compilation Process的功能和使用方法。

(3)说明Analysis&Synthesis Setting的功能和使用方法,以及其中的Synthesis Netlist

Optimization的功能和使用方法。

(4)说明FitterSettings中的DesignAssistant和Simulator功能,举例说明它们的使用方法。 4-6 用74148(8-3线八进位优先编码器)和与非门实现8421BCD优先编码器,用3(5)片74139(2线-4线译码器)组成一个5-24(4-16)线译码器。

4-7 用74283(4位二进制全加器)加法器和逻辑门设计实现一位8421BCD码加法器电路,输入输出均是BCD码,CI为低位的进位信号,CO为高位的进位信号,输入为两个1位十进制数A,输出用S表示。

ARCHITECTURE BHV OF vote_7 IS BEGIN

PROCESS(DIN)

VARIABLE Q: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN

Q:=\

FOR n IN 0 TO 6 LOOP -- n是LOOP的循环变量 IF(DIN(n)='1') THEN Q:=Q+1; END IF; END LOOP; CNTH<=Q;

IF Q>=4 THEN G_4<='1'; ELSE G_4<='0'; END IF; END PROCESS; END BHV;

5-8 从不完整的条件语句产生时序模块的原理看,例5-7和例5-10从表面上看都包含不完整条件语句,试说明,为什么它们的综合结果都是组合电路。

--【例5-7】预设计4选1多路器(通过变量测选择条件,将产生正确结果。) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS

PORT(i0,i1,i2,i3,a,b: IN STD_LOGIC; q: OUT STD_LOGIC); END mux4;

ARCHITECTURE body_mux4 OF mux4 IS BEGIN

process(i0,i1,i2,i3,a,b)

variable muxval: integer range 7 DOWNTO 0; begin

muxval:=0;

if (a= '1') then muxval := muxval+1; end if; if (b= '1') then muxval := muxval+2; end if; case muxval is when 0=>q<=i0; when 1=>q<=i1; when 2=>q<=i2; when 3=>q<=i3;

when others=>q<='X'; --null; end case; end process; END body_mux4;

--【例5-10】位矢中‘1’码个数统计电路设计 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNTC IS

PORT( DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

CNTH: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END CNTC;

ARCHITECTURE BHV OF CNTC IS BEGIN

PROCESS(DIN)

VARIABLE Q: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

Q:=\

FOR n IN 0 TO 7 LOOP -- n是LOOP的循环变量 IF(DIN(n)='1') THEN Q:=Q+1; END IF; END LOOP; CNTH<=Q; END PROCESS; END BHV;

答:根据变量具有顺序立即赋值传送特性,例5-7和例5-10中的不完整条件语句对变量赋值前对变量进行初始值设置;每次敏感信号触发,对变量的赋值,总能产生结果,无保持状态——即输出是输入的函数;因此,只能产生组合逻辑电路;不可能产生时序逻辑电路。 5-9 设计一个求补码的程序,输入数据是一个有符号的8位二进制(原码)数。 --解:5-9 设计一个求补码的程序,输入数据是一个有符号的8位二进制数。 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY org_patch IS

PORT( org_data : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--原码输入 patch_data : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--补码输出 END org_patch;

ARCHITECTURE BHV OF org_patch IS BEGIN

PROCESS(org_data) BEGIN

IF(org_data(7)='0') THEN

patch_data<=org_data; --org_data>=0,补码=原码。 else

patch_data<=org_data(7)&(not org_data(6 DOWNTO 0))+1;--org_data<0,补码=|原码|取反+1。 END IF;

END PROCESS; END BHV;

5-10 设计一个比较电路,当输入的8421BCD码大于5时输出1,否则输出0。 --解:5-10 设计一个比较电路,当输入的8421BCD码大于5时输出1,否则输出0。 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY g_5_cmp IS

PORT( d_in : IN STD_LOGIC_VECTOR(3 DOWNTO 0); --输入数据

cmp_out : OUT STD_LOGIC); --比较输出(1:输入数据>5) END g_5_cmp;

ARCHITECTURE BHV OF g_5_cmp IS BEGIN

PROCESS(d_in) BEGIN

IF(d_in>\

cmp_out<='1'; --输入数据大于5,比较输出1。 else

cmp_out<='0'; --输入数据小于等于5,比较输出0。 END IF;

END PROCESS; END BHV;

5-11 用VHDL输入方式设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。

--解1:5-11 用原理图或VHDL输入方式分别设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY S_generator IS

PORT(CLK,CLR: IN STD_LOGIC; --工作时钟/复位信号 S_out: OUT STD_LOGIC);--序列输出位 END S_generator;

ARCHITECTURE behav OF S_generator IS

SIGNAL D: STD_LOGIC_VECTOR(10 DOWNTO 0); --11位循环移位寄存器 BEGIN

PROCESS(CLK,CLR) BEGIN

IF CLK'EVENT AND CLK='1' THEN --时钟到来时,逐位左移循环输出序列位 IF CLR='1' THEN D<=\复位操作,产生11位待输出序列 ELSE

D(10 DOWNTO 1)<=D(9 DOWNTO 0); D(0)<=D(10); S_out<=D(10); END IF; END IF; END PROCESS; END behav; --解2:5-11 用原理图输入方式设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。

5-12 用74194(4位双向通用移位寄存器)、74273(8D触发器)、D触发器等器件组成8位串入并出的转换电路,要求在转换过程中数据不变,只有当8位一组数据全部转换结束后,输出才变化一次。

5-13 根据例5-8设计8位左移移位寄存器,给出时序仿真波形。 --解:8位左移寄存器CHDL程序 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY SHFLT8 IS --8位左移寄存器 PORT(CLK,LOAD: IN STD_LOGIC;

DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB:OUT STD_LOGIC); END SHFLT8;

ARCHITECTURE behav OF SHFLT8 IS BEGIN

PROCESS (CLK,LOAD)

VARIABLE REG8: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

IF CLK'EVENT AND CLK='1'THEN

IF LOAD='1'THEN REG8:=DIN; --由(LOAD='1')装载新数据 ELSE REG8(7 DOWNTO 1):=REG8(6 DOWNTO 0); --左移 END IF; END IF;

QB<=REG8(7); --输出最高位 END PROCESS ; END behav ;

5-14 将例5-15中的四个IF语句分别用四个并列进程语句表达出来。 --解:三态缓冲器VHDL程序 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY tristate2 IS

PORT(input3,input2,input1,input0: IN STD_LOGIC_VECTOR(7 DOWNTO 0); enable: IN STD_LOGIC_VECTOR(1 DOWNTO 0); output: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END tristate2;

ARCHITECTURE multiple_drivers OF tristate2 IS BEGIN

PR1: PROCESS(enable,input3,input2,input1,input0) BEGIN

IF enable=\ ELSE output<=(OTHERS=>'Z'); END IF; END PROCESS;

PR2: PROCESS(enable,input3,input2,input1,input0) BEGIN

IF enable=\ ELSE output<=(OTHERS=>'Z'); END IF; END PROCESS;

PR3: PROCESS(enable,input3,input2,input1,input0) BEGIN

IF enable=\ ELSE output<=(OTHERS=>'Z'); END IF; END PROCESS;

PR4: PROCESS(enable,input3,input2,input1,input0) BEGIN

IF enable=\ ELSE output<=(OTHERS=>'Z'); END IF;

END PROCESS LATCH1; Q<=REGL; END behav;

7-4 请设计一种信号去抖动的电路模型,仿真后,讨论其优缺点点和使用范围。

解:R-S触发器去抖动电路,优点:电路简单,适用于宽延时范围抖动;缺点:对输入按键采用单刀双掷开关。

7-5 根据7.5节,用表格法和绘图法设计状态机,实现例7-2的功能,用时序仿真波形图验证之。最后将其转变成VHDL程序,将此程序与例7-2相比,讨沦它们的表述风格。 解:

本文来源:https://www.bwwdw.com/article/klvg.html

Top