EDA期末考试题大全(共21页).doc
精选优质文档-倾情为你奉上附带:一问答题1信号赋值语句在什么情况下作为并行语句?在什么情况下作顺序语句?信号赋值和变量赋值符号分别是什么?两种赋值符号有什么区别?l 信号赋值语句在进程外作并行语句,并发执行,与语句所处的位置无关。信号赋值语句在进程内或子程序内做顺序语句,按顺序执行,与语句所处的位置有关。l 信号赋值符号为“<=”变量赋值用“:=”。信号赋值符号用于信号赋值动作,不立即生效。变量,赋值符号用于变量赋值动作,立即生效。2进程的敏感信号表指的是什么?简述敏感信号表在进程中的作用?l 进程的“敏感信号表”也称敏感表,是进程的激活条件,可由一个或多个信号组成,各信号间以“,”号分隔。当敏感信号表中的任一个信号有事件发生,即发生任意变化,此时,进程被激活,进程中的语句将从上到下逐句执行一遍,当最后一条语句执行完毕之后,进程即进入等待挂起状态,直到下一次敏感表中的信号有事件发生,进程再次被激活,如此循环往复。3什么是库、程序包、子程序、过程调用和函数调用?l 库和程序包用来描述和保存元件、类型说明和子程序等,以便在其它设计中通过其目录可查询、调用。子程序由过程和函数组成。在子程序调用过程中,过程能返回多个变量,函数只能返回一个变量。若子程序调用的是一个过程,就称为过程调用,若子程序调用的是一个函数,则称为函数调用。过程调用、函数调用都是子程序调用。二改错题1.已知sel为STD_LOGIC_VECTOR(1 DOWNTO 0)类型的信号,而a、b、c、d、q均为STD_LOGIC类型的信号,请判断下面给出的CASE语句程序片段:l CASE sel ISl WHEN“00”=>q<=a;l WHEN“01”=>q<=b;l WHEN“10”=>q<=c;l WHEN“11”=>q<=d;l END CASE;l 答案:CASE语句缺“WHEN OTHERS”语句。2. 已知data_in1, data_in2为STD_LOGIC_VECTOR(15 DOWNTO 0) 类型的输入端口,data_out为STD_LOGIC_VECTOR(15 DOWNTO 0)类型的输出端口,add_sub为STD_LOGIC类型的输入端口,请判断下面给出的程序片段:l LIBRARY IEEE;l USE IEEE.STD_LOGIC_1164.ALL;l ENTITY add ISl PORT(data_in1, data_in2:IN INTEGER;l data_out:OUT INTEGER);l END add; l ARCHTECTURE add_arch OF add ISl CONSTANT a:INTEGER<=2;l BEGINl data_out<=( data_in1+ data_in2) * a;l END addsub_arch;答案:常量声明时赋初值的“<=”符号应改用“:=”符号。3. 已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片段:l ARCHITECTURE test_arch OF test ISl BEGINl SIGNAL B:STD_LOGIC;l Q<= B;END test_arch答案:信号SIGNAL的声明语句应该放在BEGIN语句之前。4. 已知A和Q均为BIT类型的信号,请判断下面的程序片段:l ARCHITECTURE archtest OF test ISl BEGINl CASE A ISl WHEN 0=>Q<=1;l WHEN 1=>Q<=0;l END CASE;l END archtest;答案:CASE语句应该存在于进程PROCESS内。三程序设计14位二进制并行加法器的源程序ADDER4B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B IS -4位二进制并行加法器 PORT(CIN:IN STD_LOGIC; -低位进位 A: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -4位加数 B: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -4位被加数 S: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -4位和 CONT: OUT STD_LOGIC); END ADDER4B;ARCHITECTURE ART OF ADDER4B IS SIGNAL SINT:STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL AA,BB: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN AA<='0'& A; -将4位加数矢量扩为5位,为进位提供空间 BB<='0'& B; -将4位被加数矢量扩为5位,为进位提供空间 SINT<=AA+BB+CIN ; S<=SINT(3 DOWNTO 0); CONT<=SINT(4);END ART;2 8位二进制加法器的源程序ADDER8B.VHDLIBRARY IEEE;USE IEEE_STD.LOGIC_1164.ALL;USE IEEE_STD.LOGIC_UNSIGNED.ALL:ENTITY ADDER8B IS -由4位二进制并行加法器级联而成的8位二进制加法器 PORT(CIN:IN STD_LOGIC; A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); S:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); COUT:OUT STD_LOGIC);END ADDER8B;ARCHICTURE ART OF ADDER8B IS COMPONENET ADDER4B -对要调用的元件ADDER4B的界面端口进行定义 PORT(CIN:IN STD_LOGIC; A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CONT:OUT STD_LOGIC);END COMPONENT ;SIGNAL CARRY_OUT:STD_LOGIC; -4位加法器的进位标志BEGIN U1:ADDER4B -例化(安装)一个4位二进制加法器U1 PORT MAP(CIN=>CIN,A=>A(3 DOWNTO 0),B=>B(3 DOWNTO0), S=>S(3 DOWNTO 0),COUT=>CARRY_OUT);U2:ADDER4B -例化(安装)一个4位二进制加法器U2 PORT MAP(CIN=>CARRY_OUT,A=>A(7 DOWNTO 4),B=>B(7 DOWNTO 4), S=>S (7 DOWNTO 4);CONT=>CONT);END ART;3.触发器和缓冲器专心-专注-专业D触发器:Process(clk) begin if(clkevent and clk=1) then q <= d; end if;end process; 缓冲器:Process(clk)begin if(clk=1) then q <= d; end if;end process; T触发器:Process(clk)begin if(clkevent and clk=1) then if(t = 1) then q <= not(q); else q <= q; end if; end if;end process; 4.16位锁存器的源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B IS -16位锁存器 PORT (CLK:IN STD_LOGIC; -锁存信号 CLR:IN STD_LOGIC; -清零信号 D:IN STD_LOGIC_VECTOR (8 DOWNTO 0) -8位数据输入 Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);-16位数据输出END REG16B;ARCHITECTURE ART OF REG16B IS SIGNAL R16S:STD_LOGIC_VECTOR(15 DOWNTO 0); -16位寄存器设置BEGINPROCESS (CLK,CLR) BEGIN IF CLR = '1' THEN R16S<= "00000";-异步复位信号 ELSIF CLK'EVENT AND CLK = '1' THEN-时钟到来时,锁存输入值 R16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);-右移低8位 R16S(15 DOWNTO 7)<=D; -将输入锁到高能位 END IF; END PROCESS; Q<=R16S;END ART;58位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; -8位右移寄存器ENTITY SREG8B IS PORT (CLK:IN STD_LOGIC; LOAD :IN STD _LOGIC; BIN:IN STD_LOGIC_VECTOR(7DOWNTO 0); QB:OUT STD_LOGIC );END SREG8B;ARCHITECTURE ART OF SREG8B IS SIGNAL REG8B:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS (CLK,LOAD) BEGIN IF CLK'EVENT AND CLK= '1' THEN IF LOAD = '1' THEN REG8<=DIN; -装载新数据 ELSE REG8(6 DOWNTO0)<=REG8(7 DOWNTO 1);-数据右移 END IF; END IF; END PROCESS; QB<= REG8 (0); -输出最低位END ART;68位乘法器的源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; -8位乘法器顶层设计ENTITY MULTI8X8 IS PORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC;-乘法启动信号,高电平复位与加载,低电平运算 A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位被乘数 B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位乘数 ARIEND:OUT STD_LOGIC; -乘法运算结束标志位 DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);-16位乘积输出END MULTI8X8;ARCHITECTURE ART OF MULTI8X8 IS COMPONENT ARICTL -待调用的乘法控制器端口定义 PORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC; CLKOUT:OUT STD_LOGIC;RSTALL:OUT STD_LOGIC; ARIEND:OUT STD_LOGIC);END COMPONENT;COMPONENT ANDARITH -待调用的控制与门端口定义 PORT(ABIN:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT_STD_LOGIC_VECTOR( 7 DOWNTO 0) );END COMPONENT;COMPONENT ADDER8B -待调用的8位加法器端口定义COMPONENT SREG8B -待调用的8位右移寄存器端口定义 COMPONENT REG16B -待调用的16右移寄存器端口定义 SIGNAL GNDINT:STD_LOGIC;SIGNAL INTCLK:STD_LOGIC;SIGNAL RSTALL:STD_LOGIC;SIGNAL QB:STD_LOGIC;SIGNAL ANDSD:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL DTBIN:STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL DTBOUT:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINDOUT<=DTBOUT;GNDINT<= '0';U1:ARICTL PORT MAP(CLK=>CLK, START=>START, CLKOUT=>INTCLK, RSTALL=>RSTALL, ARIEND=>ARIEND); U2:SREG8B PORT MAP(CLK=>INTCLK, LOAD=>RSTALL. DIN=>B, QB=>QB);U3:ANDARITH PORT MAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD);U4:ADDER8B PORT MAP(CIN=>GNDINT,A=>DTBOUT(15 DOWNTO 8), B=>ANDSD, S=>DTBIN(7 DOWNTO 0),COUT =>DTBIN(8);U5:REG16B PORT MAP(CLK =>INTCLK,CLR=>RSTALL, D=>DTBIN, Q=>DTBOUT);END ART;7有时钟使能的十进制计数器的源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; -有时钟使能的十进制计数器ENTITY CNT10 ISPORT (CLK:IN STD_LOGIC; -计数时钟信号 CLR:IN STD_LOGIC; -清零信号 END:IN STD_LOGIC; -计数使能信号 CQ:OUT INTEGER RANGE 0 TO 15;-4位计数结果输出 CARRY_OUT:OUT STD_LOGIC); -计数进位 END CNT10;ARCHITECTURE ART OF CNT10 IS SIGNAL CQI :INTEGER RANGE 0 TO 15;BEGIN PROCESS(CLK,CLR,ENA) BEGIN IF CLR= '1' THEN CQI<= 0; -计数器异步清零 ELSIF CLK'EVENT AND CLK= '1' THEN IF ENA= '1' THEN IF CQI<9 THEN CQI<=CQI+1; ELSE CQI<=0;END IF; -等于9,则计数器清零 END IF; END IF; END PROCESS; PROCESS (CQI) BEGIN IF CQI=9 THEN CARRY_OUT<= '1'; -进位输出 ELSE CARRY_OUT<= '0';END IF; END PROCESS; CQ<=CQI;END ART;8) 六进制计数器的源程序CNT6.VHD(十进制计数器的源程序CNT10.VHD与此类似)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT6 ISPORT (CLK:IN STD_LOGIC; CLR:IN STD_LOGIC; ENA: IN STD_LOGIC; CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT: OUT STD_LOGIC );END CNT6;ARCHITECTURE ART OF CNT6 ISSIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK,CLR,ENA)BEGIN IF CLR='1' THEN CQI<="0000"; ELSIF CLK'EVENT AND CLK='1' THEN IF ENA='1' THEN IF CQI=“0101” THEN CQI<=“0000”; ELSE CQI<=CQI+'1';END IF; END IF; END IF; END PROCESS; PROCESS(CQI) BEGIN IF CQI=“0000” THEN CARRY_OUT<='1'; ELSE CARRY_OUT<='0';END IF; END PROCESS; CQ<=CQI;END ART;9十进制计数器LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count10 ISPORT(clk: IN STD_LOGIC; seg: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END count10;ARCHITECTURE a1 OF count10 ISsignal sec: STD_LOGIC;signal q : STD_LOGIC_VECTOR(21 DOWNTO 0);signal num: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINprocess(clk) -get 1 hz clock pulsebeginif clk'event and clk='1' then q<=q+1; end if;sec<=q(21); -get 1 hz clock pulseend process;timing: process(sec) beginif sec'event and sec='1' then if num<9 then num<=num+1; else num<="0000" end if;end if;end process;B1: block -bcd-7segsBegin -gfedcba seg<= "" when num=0 else "" when num=1 else "" when num=2 else "" when num=3 else "" when num=4 else "" when num=5 else "" when num=6 else "" when num=7 else "" when num=8 else "" when num=9 else ""end block;END a1;104MHz到1Hz的分频器LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count ISPORT( clk: in STD_LOGIC; q: out STD_LOGIC;END count;ARCHITECTURE a OF count ISsignal tmp: STD_LOGIC_vector(21 downto 0);Beginprocess(clk) beginif clk'event and clk='1' then tmp<=tmp+1;end if;end process;q<=tmp(21);END a;11与门ENTITY shili2 is port ( input1 : in std_logic; inptu2 : in std_logic; output1 : out std_logic );end entity;architecture one of shili2 is begin output1<=input1 and input2; end entity;12.四输入与门电路library ieee;use ieee.std_logic_1164.all;entity and4 is port(a,b,c,d:in std_logic; y:out std_logic;end and4; architecture and4_1 of and4 is begin y<= a and b and c and d;end nand4_1;法二(与非门):library ieee;use ieee.std_logic_1164.allentity nand4 is port(a.b,c,d:in std_logic; y:out std_logic);end nand4;architecture nand4_2 of nand4 si begin p1:process(a,b,c,d) variable tmp:std_logic_vector(3 downto 0);begin tmp:=a&b&c&d;case tmp is when"0000"=>y<='1' when"0001"=>y<='1' when"0010"=>y<='1' when"0011"=>y<='1' when"0100"=>y<='1' when"0101"=>y<='1' when"0110"=>y<='1' when"0111"=>y<='1' when"1000"=>y<='1' when"1001"=>y<='1' when"1010"=>y<='1' when"1011"=>y<='1' when"1100"=>y<='1' when"1101"=>y<='1' when"1110"=>y<='1' when"1111"=>y<='1' when others=>y<='x'end case;end process;end nand4_2;13四位全加器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity add isport(a,b:in std_logic_vector(3 downto 0);cin:in std_logic;s:out std_logic_vector(3 downto 0);cout:out std_logic);end add;architecture beh of add isbeginprocess(a,b,cin)ariable x:std_logic_vector(3 downto 0);variable m,n,l:integer; begin m:=conv_integer(a); n:=conv_integer(b); l:=m+n+conv_integer(cin); x:=conv_std_logic_vector(l,4); s<=x(3 downto 0); cout<=x(3); end process;end beh;14N位移位寄存器:page70158位通用寄存器:page13716串入串出移位寄存器:page1381710位计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT ( CLK ,clr : IN STD_LOGIC ;CQ : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 );END ENTITY CNT10;ARCHITECTURE ONE OF CNT10 ISBEGINPROCESS ( CLK , clr )VARIABLE LCQ : STD_LOGIC_VECTOR ( 3 DOWNTO 0 );BEGINIF RST = 1 THEN LCQ := “0000”;ELSIF CLKEVENT AND CLK = 1 THENIF LCQ < 9 THEN LCQ := LCQ + 1;ELSE LCQ := “0000” ; END IF; END IF;CQ <= LCQ ;END PROCESS;END ARCHITECTURE ONE;18八位串行二进制全加器use ieee.std_logic_1164.all;entity product_adder_subtracter is port( a,b:in std_logic_vector(7 downto 0); s:out std_logic_vector(8 downto 0);end;architecture behavioral of product_adder_subtracter is begin behavior:process(a,b) is variable carry_in:std_logic; variable carry_out:std_logic; variable op2:std_logic_vector(b'range); begin op2:=b; end if; for index in 0 to 7 loop carry_in:=carry_out; s(index)<=a(index) xor op2(index)xor carry_in ; carry_out:=(a(index)and op2(index) or(carry_in and (a(index) xor op2(index); end loop; s(8)<=a(7) xor op2(7) xor carry_out; end process;end;EDA知识要点:1、 目前流行的HDL语言有那些?;2、 什么是ASIC。3、 VHDL是由什么机构制定并公布的。4、 VHDL的两大类基本描述语句是什么。 5、 MAX+PLUS平台上,原理图、仿真波形文件、VHDL文件的扩展名 是什么?6、 结构体常见的功能语句有那些?7、 子程序分为那两类,其结构为什么。8、 信号与变量的赋值有何区别?。9、 可编程器件分为哪些类?10、 VHDL中常见的库有那些?。11、 不完整的条件语句与完整的条件语句生成的电路有何区别12、 VHDL的标识符由什么构成。13、 VHDL中预定义数据类型有那些?。14、 CASE语句使用当中的注意事项。15、 目前国际上较大的PLD器件制造公司有那几家公司。16、 VHDL数据对象有什么17、 赋值语句分哪些类,分别写出一句赋值语句。18、 实现时序电路和逻辑组合电路分别用什么语句实现,分别写出他们的一般表式。19、 简述元件例化语句组成及语句格式。20、 数据对象有哪些种,分别写出定义这些数据对象的一般表述格式。21、 简述进程语句的使用要点?22、 写出VHDL常用的顺序语句的名称。23、 简述VHDL逻辑操作符的种类及所允许的操作数的数据类型。24、 EDA技术的含义。25、 VHDL语言中的逻辑操作符有那些?26、 目前较流行的集成EDA开发环境(软件)有那些?27、 简述EDA技术的CPLD/FPGA的设计流程。28、 写出实体中的PORT语句结构并说明其作用。29、 简述EDA技术经历了那几个发展阶段。30、 写出元件例化语句语句格式,并说明其作用。31、 试比较图形输入法和文本输入法有何优缺点?32、 结构体的语言格式与作用。33、 写出PROCESS语句结构的一般表达格式?34、 EDA技术常用的输入方法有?35、 什么是实体和结构体,其功能是什么?,36、 MAX+puls的编辑窗口有那几种,分别是什么?37、 MAX+puls的原理图输入法、文本输入法、波形输入法生成的文件扩展名为?38、 VHDL的操作符有那几大类?每一类的操作符分别是什么?每一类操作符可以对那些数据进行操作(运算)?39、 VHDL中如没有特别的说明算术操作符 + 号对应的操作数为什么类型40、 可编程器件(PLD)分为哪两类41、 标准逻辑位数据类型常用的数值有哪几种?42、 在VHDL语言中常见的的数据类型有那些?43、 完整的条件语句将产生什么电路,不完整的条件语句将产生什么电路。44、 信号和变量有什么区别?45、 VHDL作为工业标准,是由那个机构制定并公布的。46、 实体部分的端口模式有四个类型。47、 从执行方式看VHDL的基本描述语句包括哪两大基本描述语句?48、 VHDL文件存盘时,其主文件名应与实体名一致,扩展名应为什呢49、 硬件描述语言(HDL)的种类很多?50、 简述元件例化语句的语句格式及关联方法。EDA综合设计设计题1、用两种以上的按照下图设计一个四选一多路选择器2、使用元件例化语句编写下图所示的顶层文件,其中adder_1为一个由原理图输入法设计的完整的设计实体。3、已知4位全加器电路原理图如下,请用元件例化语句编写其程序。4、用VHDL语言编写下图所示的七段显示译码器。5、用VHDL设计一个三位十进制的,带有使能控制端口enable、异步清零端口rst、同步预置控制端口load和预置数据输入端口date的计数器。6、编写一个D触发器的硬件描述语言程序,要求实现上升沿触发。7、使用IF语句设计一个带有异步复位和置位、同步预置的4位2进