EDA练习题

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

EDA练习题
选择题
以下对EDA的描述中,不正确的是 D
(A)EDA是 Electronic Design Automation 的缩写
(B)EDA技术是当前利用硬件描述语言在计算机的辅助下完成硬件电路设
计的主流技术
(C)EDA技术融合了大规模集成电路设计,制造,版图设计,测试,封装等多
种技术,几乎涉及了集成电路产业的各个环节.
(D)EDA技术的应用对象不包含PCB板
2. 最常用的时钟上升沿检测语句A。

(A) clock’ EVENT AND clock=’1’’ (B) clock=’1
(C) NOT clock’ STABLE AND clock=’1’ (D) 以上答案都不对3.VHDL程序中注释符是D
(A)? (B) ; (C)! (D)- -
4. 以下对进程语句的描述中,不正确的是 C
(A) 进程是一个无限循环语句
(B) 进程靠敏感信号的跳变启动
(C) 进程语句可以嵌套
(D)进程中的顺序语句在执行时具有顺序/并行运行双重性
5. 子程序中的语句为 A
(A)顺序语句 (B)并行语句
(C)顺序并行均可 (D)函数为并行,过程为顺序6.从状态机的信号输出方式上分,有A状态机。

(A) Moore型和Mealy型 (B) 顺序编码和一位热码编码状态机
(C) 符号化和确定状态编码状态机 (D) 以上答案都不对
7. 不完整的条件语句描述会产生 B 逻辑电路单元。

(A)组合 (B)时序 (C)状态机 (D)非法8.以下数据类型,不是定义在
STD库中的是D。

(A) STD_LOGIC (B) BOOLEAN
(C) BIT (D) CHARACTER
9.下列端口模式使用时,为避免线与,需与三态门结合的是B
(A) IN (B) INOUT (C) OUT (D) BUFFER
10.以下是VHDL的设计库的是 D
(A)IEEE (B) STD (C) WORK (D)VITAL
判断题
1. 文件名区分大小写。

(错)
2. 进程语句中必须有敏感信号表。

(对)
3.设计实体=实体+结构体。

(对)
4.为了安全起见,直接使用常量来定义所有合法状态,非法状态由系统自动处理。

()
5.FPGA采用查找表结构。

()
填空题
1.仿真延时包含固有延时和传输延时。

2.VHDL中数据对象有常量、变量和信号。

3.最一般和最常用的状态机通常包含说明部分、主控时序进
程、主控组合进程、辅助进程四个部分。

程序分析
1.以下是一个含有同步复位和同步时钟使能的十进制加法计数器的
源程序,请根据程序内容将其补充完整
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE. (1)STD_LOGIC_UNSIGNED .ALL;
- -打开设计库和程序包ENTITY CNT10 IS
PORT (CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC );
END CNT10; - - 定义实体
ARCHITECTURE behav OF CNT10 IS
BEGIN
PROCESS(CLK, RST, EN)
(2)V ARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); - - 定义变量 BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF (3) RST=?1? THEN
CQI := (OTHERS =>‘0’) ; - - 同步复位
ELSIF EN = ‘1’ THEN
IF CQI < 9 THEN
CQI := (4)CQI+1 ; - -计数未满,继续计数
ELSE CQI := (OTHERS=> ‘0’); - -计数已满,清零
END IF;
END IF;
END IF;
IF CQI=9 THEN - - 计数已到最大值?
(5)COUT<=?1? - - 进位输出ELSE COUT <= …0?;
END IF;
CQ <= CQI; - -输出计数值
END PROCESS;
END behav;
2.读下面这段程序,并回答相关问题
PROCEDURE CHECK ( a : IN STD_LOGIC_VECTOR;
error : OUT BOOLEAN ) IS
VARIABLE found_one: BOOLEAN :=FALSE;
BEGIN
FOR i IN a?RANGE LOOP
IF a(i) = ‘1’ THEN
IF found_one THEN
error <= TRUE;
RETURN;
END IF;
found_one := TRUE ;
END IF;
END LOOP;
error<= NOT found_one;
END ;
回答下列问题:
(1).若输入参数a的值为00100000,则执行完该过程后,输出参数error的值是什么?
(2).当a的值满足什么条件时,过程会从RETURN处提前返回主程序,此时输出error的值是什么?
编程:第三章课后习题,重点3-2,3-3,3-4,3-5,3-6
第五章课后习题,重点5-4
函数与过程的定义和调用
第3章
3-2. 图3-30所示的是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-2.答案
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUX41 IS
PORT(s:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --输入选择信号
a,b,c,d:IN STD_LOGIC; --输入信号
y:OUT STD_LOGIC);--输出端
ARCHITECTURE ART OF MUX41 IS BEGIN
PROCESS(s)
BEGIN
IF (S="00") THEN y<=a;
ELSIF (S="01") TH EN y<=b;
ELSIF (S="10") TH EN y<=c;
ELSIF (S="11") TH EN y<=d;
ELSE y<=NULL; END IF;
EDN PROCESS;
END ART;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUX41 IS
PORT(s:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --输入选择信号
a,b,c,d:IN STD_LOGIC; --输入信号
y:OUT STD_LOGIC);--输出端
END MUX41;
ARCHITECTURE ART OF MUX41 IS
BEGIN
PROCESS(s)
BEGIN
CASE s IS
WHEN “00” => y<=a;
WHEN “01” => y<=b;
WHEN “10” => y<=c;
WHEN “11” => y<=d;
WHEN OTHERS =>NULL;
END CASE;
END ART;
3-3. 图3-31所示的是双2选1多路选择器构成的电路MUXK,对于其中MUX21A,当s='0'和'1'时,分别有y<='a'和y<='b'。

试在一个结构体中用两个进程来表达此电路,每个进程中用CASE语句描述一个2选1多路选择器MUX21A。

3-3.答案
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX221 IS
PORT(a1,a2,a3:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --输入信号
s0,s1:IN STD_LOGIC;
outy:OUT STD_LOGIC);--输出端
END ENTITY;
ARCHITECTURE ONE OF MUX221 IS
SIGNAL tmp : STD_LOGIC; BEGIN
PR01:PROCESS(s0) BEGIN
IF s0=”0” THEN tmp<=a2;
ELSE tmp<=a3; END IF;
END PROCESS;
PR02:PROCESS(s1)
BEGIN
IF s1=”0” THEN outy<=a1;
ELSE outy<=tmp; END IF;
END PROCESS;
END ARCHITECTURE ONE;
END CASE;
3-4.下图是一个含有上升沿触发的D触发器的时序电路,试写出此电路的VHDL设计文件。

3-4.答案
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MULTI IS
PORT(CL:IN STD_LOGIC; --输入选择信号
CLK0:IN STD_LOGIC; --输入信号
OUT1:OUT STD_LOGIC);--输出端
END ENTITY;
ARCHITECTURE ONE OF MULTI IS
SIGNAL Q : STD_LOGIC;
BEGIN
PR01: PROCESS(CLK0)
BEGIN
IF CLK …EVENT AND C LK=?1? THEN Q<=NOT(CL OR Q);
ELSE
END IF;
END PROCESS;
PR02: PROCESS(CLK0)
BEGIN
OUT1<=Q;
END PROCESS;
END ARCHITECTURE ONE;
END PROCESS;
3-5.给出1位全减器的VHDL描述。

要求:
(1) 首先设计1位半减器,然后用例化语句将它们连接起来,图3-32中h_suber是半减器,diff是输出差,s_out是借位输出,sub_in 是借位输入。

(2) 以1位全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来完成此项设计(减法运算是 x – y - sun_in = diffr) 3-5.答案
底层文件1:or2a.VHD实现或门操作 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.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;
底层文件2:h_subber.VHD实现一位半减器LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY h_subber IS
PORT(x,y:IN STD_LOGIC;
diff,s_out::OUT STD_LOGIC);
END ENTITY h_subber;
ARCHITECTURE ONE OF h_subber IS
SIGNAL xyz: STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN
xyz <= x & y;
PROCESS(xyz)
BEGIN
CASE xyz IS
WHEN "00" => diff<='0';s_out<='0';
WHEN "01" => diff<='1';s_out<='1';
WHEN "10" => diff<='1';s_out<='0';
WHEN "11" => diff<='0';s_out<='0';
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END ARCHITECTURE ONE;
顶层文件:f_subber.VHD实现一位全减器 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY f_subber IS
PORT(x,y,sub_in:IN STD_LOGIC; diffr,sub_out:OUT STD_LOGIC);
END ENTITY f_subber;
ARCHITECTURE ONE OF f_subber IS
COMPONENT h_subber PORT(x,y:IN STD_LOGIC; diff,S_out:OUT STD_L OGIC);
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_subber PORT MAP(x=>x,y=>y,diff=>d,s_out=>e);
u2: h_subber PORT MAP(x=>d,y=>sub_in,diff=>diffr,s_out=>f);
u3: or2a PORT MAP(a=>f,b=>e,c=>sub_out);
END ARCHITECTURE ONE;
END ARCHITECTURE ART;
5-4.试由b、c两图中任选一图写出其完整的VHDL程序。

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY EX7 IS
PORT ( CLK, RESET : IN STD_LOGIC; INA : IN STD_LOGIC_VECTOR(2 DOWNTO 0); OUTA : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END EX7; --MOORE型状态

ARCHITECTURE ONE OF EX7 IS
TYPE STATE IS (S0, S1, S2, S3);
SIGNAL C_ST : STATE; BEGIN PROCESS (CLK, RESET, INA)
BEGIN
IF RESET = '1' THEN C_ST <= S0;
OUTA <= (OTHERS => '0');
ELSIF RISING_EDGE(CLK) THEN
CASE C_ST IS
WHEN S0 => IF INA = "101" THEN OUTA <= "0010"; ELSIF INA = "111" THEN OUTA <= "1100";
END IF;
C_ST <= S1;
WHEN S1 => IF INA = "000" THEN C_ST <= S1; ELSIF INA = "11 0" THEN C_ST <= S2;
END IF;
OUTA <= "1001";
WHEN S2 => IF INA = "100" THEN C_ST <= S2; ELSIF INA = "0 11" THEN C_ST <= S1;
ELSE C_ST <= S3;
END IF;
OUTA <= "1111";
WHEN S3 => IF INA = "101" THEN OUTA <= "1101"; ELSIF INA = "011" THEN OUTA <= "1110";
END IF;
C_ST <= S3;
WHEN OTHERS => C_ST <= S0;
OUTA <= (OTHERS => '0');
END CASE;
END IF;
END PROCESS;
END ONE; -- MEALY型状态机
ARCHITECTURE TWO OF EX7 IS
TYPE STATE IS (S0, S1, S2, S3);
SIGNAL C_ST, N_ST : STATE;
BEGIN
REG : PROCESS (CLK, RESET)
BEGIN
IF RESET = '1' THEN C_ST <= S0;
ELSIF CLK'EVENT AND CLK = '1' THEN C_ST <= N_ST;
END IF;
END PROCESS;
COM : PROCESS (C_ST, INA)
BEGIN
CASE C_ST IS
WHEN S0 => N_ST <= S1;
IF INA = "101" THEN OUTA <= "0010"; ELSIF INA = "111" THEN OUTA <= "1100";
ELSE OUTA <= "0000";
END IF;
WHEN S1 => OUTA <= "1001";
IF INA = "000" THEN N_ST <= S1;
ELSIF INA = "110" THEN N_ST <= S2;
ELSE N_ST <= S1;
END IF;
WHEN S2 => OUTA <= "1111";
IF INA = "100" THEN N_ST <= S2;
ELSIF INA = "011" THEN N_ST <= S1;
ELSE N_ST <= S3;
END IF;
WHEN S3 => IF INA = "101" THEN OUTA <= "1101"; ELSIF INA = "011" THEN OUTA <= "1110";
ELSE OUTA <= "0000";
END IF;
N_ST <= S3;
WHEN OTHERS => N_ST <= S0;
OUTA <= (OTHERS => '0');
END CASE;
END PROCESS;
END TWO;。

相关文档
最新文档