1、VHDL考试必备大全一、填空题1、三种可编程逻辑器件:EEPROM 、GAL、FPGA 。2、VHDL程序包含实体、构造体、配置、程序包、和库五部分。3、结构体的子程序描述语句:块BLOCK、进程PROCES、和子程序SUBPROGRAMS结构。4、VHDL的客体包括了常数、变量和信号。5、VHDL的数据类型:整数、实数、位、位矢量、字符、布尔量、时间、字符串 。 std_logic是决断类型。7、构造体的描述方式包括三种,分别是结构、数据流、行为描述方式。8、双向端口是用inout表示,构造体内部可再次使用的输出是缓冲用buffer表示。9、VHDL的运算符优先级:逻辑运算符关系运算符算术运
2、算符。 10、定义一个信号a,数据类型为4位标准逻辑向量signal a : std_logic_vector(3 downto 0)定义一个变量b,数据类型为2位位向量variable b : bit_vector(1 downto 0) 。11、Moore状态机输出只是当前状态的函数,Mealy为有限状态机当前值和输入值的函数 12、在VHDL的常用对象中,信号、变量可以被多次赋予不同的值,常量只能在定义时赋值。13、进程必须位于 结构体 内部,变量必须定义于 进程/包/子程序 内部。14、并置运算符 & 的功能是 把多个位或位向量合并为一个位向量 。15、判断CLK信号上升沿到达的语句是
3、 if clkevent and clk = 1 then .16、任何时序电路都以 时钟 为驱动信号,时序电路只是在 时钟信号的边沿 到来时,其状态才发生改变。17、一个信号处于高阻(三态)时的值在VHDL中描述为Z。18、赋值语句是并行执行的,if语句是串行执行的。知识点1.信号与变量的区别:信号延时赋值,变量立即赋值信号代入用=,变量代入用:=信号除当前值外还有许多相关信息,而变量只有当前值进程对信号敏感而不对变量敏感信号可以是多个进程的全局信号,而变量只是定义他们的顺序域可见。信号时硬件中连线的抽象描述,其功能是保存变化的数据值和连接子元件,信号在元件的端口连接元件,变量在硬件中没有类
4、似的对应关系,主要应用于高层次的建模中2.命名规则:由字母、数字、下划线组成第一个字符必须是字母,最后一个字符不能是下划线不能连用下划线不能和关键字或保留字相同。3.五类常用库:IEEE库、STD库、WORK库、ASIC矢量库、用户自定义库,其中STD(textio包集合除外)和WORK不同预先说明。2、编程题下划线1.设计一个异或门(采用行为描述方式)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xor2_v1 IS PORT(a,b: IN STD_LOGIC; y: OUT STD_LOGIC);END xor2_v1;ARCHITECT
5、URE behave OF xor2_v1 ISBEGIN y = a XOR b;END behave; 2.编写一个8线3线编码器的VHDL程序(采用行为描述方式)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY coder83_v1 IS PORT(I0,I1,I2,I3,I4,I5,I6,I7: IN STD_LOGIC; A0,A1,A2: OUT STD_LOGIC);END coder83_v1;ARCHITECTURE behave OF coder83_v1 ISBEGIN A2 = I4 OR I5 OR I6 OR I7; A
6、1 = I2 OR I3 OR I6 OR I7; A0 = I1 OR I3 OR I5 OR I7;END behave;3.以74148逻辑表达式为依据,编写一个8线3线优先编码器的VHDL程序(行为)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY prioritycoder83_v1 IS PORT(I7,I6,I5,I4,I3,I2,I1,I0 : IN STD_LOGIC; EI:IN STD_LOGIC; A2,A1,A0: OUT STD_LOGIC; GS,EO:OUT STD_LOGIC);END prioritycoder8
7、3_v1;ARCHITECTURE behave OF prioritycoder83_v1 ISBEGIN A2 = EI OR (I7 AND I6 AND I5 AND I4); A1 = EI OR (I7 AND I6 AND I3 AND I2) OR (I7 AND I6 AND NOT I5) OR (I7 AND I6 AND NOT I4) ; A0 = EI OR (I7 AND NOT I6) OR (I7 AND I5 AND NOT I4) OR (I7 AND I5 AND I3 AND I1) OR (I7 AND I5 AND I3 AND NOT I2);
8、GS = EI OR (I7 AND I6 AND I5 AND I4 AND I3 AND I2 AND I1 AND I0); EO Y Y Y Y Y Y Y Y =01111111; END CASE; ELSE Y =11111111; END IF; END PROCESS;ENDdataflow;5.编写一个8选1数据选择器的VHDL程序(IF语句)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux8_v2 IS PORT(A: IN STD_LOGIC_VECTOR (2 DOWNTO 0); D0,D1,D2,D3,D4,D
9、5,D6,D7:IN STD_LOGIC; G:IN STD_LOGIC; Y: OUT STD_LOGIC; YB:OUT STD_LOGIC);END mux8_v2;ARCHITECTURE dataflow OF mux8_v2 IS BEGIN PROCESS (A,D0,D1,D2,D3,D4,D5,D6,D7,G)BEGIN IF (G =1) THEN Y =0; YB =1; ELSIF(G=0AND A=000)THEN Y = D0; YB = NOT D0; ELSIF(G=0AND A=001)THEN Y = D1; YB = NOT D1; ELSIF(G=0AN
10、D A=010)THEN Y = D2; YB = NOT D2;ELSIF(G=0AND A=011)THEN Y = D3; YB = NOT D3; ELSIF(G=0AND A=100)THEN Y = D4; YB = NOT D4; ELSIF(G=0AND A=101)THEN Y = D5; YB = NOT D5; ELSIF(G=0AND A=110)THEN Y = D6; YB = NOT D6; ELSE Y = D7; YB B) THEN YA =1; YB =0; YC =0; ELSIF(A B) THEN YA =0; YB =1; YC =0; ELSE
11、YA =0; YB =0; YC =1; END IF; END PROCESS; END behave; 7.编写一个用“+”实现加法运算的8位加法器的程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY adder8_v IS PORT(A :IN STD_LOGIC_VECTOR(7 DOWNTO 0); B :IN STD_LOGIC_VECTOR(7 DOWNTO 0); Cin:IN STD_LOGIC; Co : OUT STD_LOGIC; S :OUT STD_LOG
12、IC_VECTOR(7 DOWNTO 0);END adder8_v;ARCHITECTURE behave OF adder8_v IS SIGNAL Sint : STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL AA,BB: STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINAA =0& A(7 DOWNTO 0);BB =0& B(7 DOWNTO 0); Sint = AA + BB + Cin; S(7 DOWNTO 0) = Sint(7 DOWNTO 0); Co = Sint(8); END behave;8.编写一个8求补器的程序。
13、library ieee; use ieee.std_logic_1164.all; entity hosuu is port( a: in std_logic_vector(7 downto 0); b: out std_logic_vector(7 downto 0); end hosuu; architecture rtl of hosuu is begin b=not a + 1;end rtl; 9.编写一个三态门程序library ieee; use ieee.std_logic_1164.all; entity tri_gate is port( din,en: in std_l
14、ogic; dout : out std_logic); end tri_gate ; architecture zas of tri_gate is begin tri_gate: process(din,en) Begin if(en=1) then dout=din; else dout=Z; end if; end process; end zas;10.D 触发器(带有异步置位复位功能)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY d_ffy IS PORT( clk,d,set,reset : IN STD_LOGIC; q,qd
15、:OUT STD_LOGIC );END d_ffy;ARCHITECTURE a OF d_ffy IS BEGINPROCESS(clk,set,reset)BEGIN IF (set=0 AND reset=1) THEN q=1; qd=0; ELSIF (set=1 AND reset=0) THEN q=0; qd=1; ELSIF (clkEVENT AND clk=1) THEN q=d; qd=NOT d; END IF;END PROCESS;END a;11. jk 触发器(带有异步置位复位功能)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.A
16、LL ;ENTITY jk_asr_ff ISPORT ( j , k ,clk ,set , res : IN STD_LOGIC ; q , qb : OUT STD_LOGIC ) ; END jk_asr_ff ;ARCHITECTURE behave OF jk_asr_ff IS SIGNAL q_temp : STD_LOGIC ; signal jk_temp : STD_LOGIC_VECTOR( 1 DOWNTO 0 ) ; BEGIN jk_temp = j&k; PROCESS( clk , set , res ) BEGIN IF set= 0 THEN q_temp
17、 = 0; ELSIF res = 0 THEN q_temp q_temp q_temp q_temp q_temp q_temp = X; END CASE ; END IF ; END IF; END PROCESS ; q = q_temp ; qb = NOT q_temp ;END behave; 12. 带有使能端的RS触发器ENTITY RSlatch IS PORT( r , s , en :IN BIT ; q , qb : BUFFER BIT ) ;END RSlatch ;ARCHITECTURE rs_archi OF RSlatch ISSIGNAL s1 , r
18、1 : BIT ;BEGIN s1 = s NAND en ; r1 = r NAND en ; qb= r1NAND q ; q = s1 NAND qb ;END rs_archi ;13. 带异步置位/复位的通用寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY registern ISGENERIC (n:INTEGER:=1);PORT( d : IN STD_LOGIC_VECTOR(n DOWNTO 0); clk,en,set,reset : IN STD_LOGIC; q : BUFFER STD_LOGIC_VECTOR(n
19、 DOWNTO 0);END registern;ARCHITECTURE a OF registern ISBEGINPROCESS (clk,set,reset) BEGIN IF (set=0 AND reset=1) THEN q1); ELSIF (set=1 AND reset=0) THEN q0); ELSIF (clkEVENT AND clk=1) THEN IF (en=1 ) THEN q=d; ELSE qclk,d=d,q=q(i); END GENERATE; g2: IF(i/=0) GENERATE dffx:d_ff PORT MAP(clk=clk,d=q
20、(i-1),q=q(i); END GENERATE;END GENERATE ;END a; ARCHITECTURE aa OF shiftb ISBEGINPROCESS(clk)BEGINIF(clkEVENT AND clk=1) THEN q(0)=d; FOR i IN 1 TO n LOOP q(i)=q(i-1); END LOOP ; END IF;END PROCESS;END aa; 15. 循环移位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shiftx ISPORT( clk,load : IN STD_LO
21、GIC; d : IN STD_LOGIC_VECTOR(3 DOWNTO 0); q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END shiftx;ARCHITECTURE aa OF shiftx ISSIGNAL tmp : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINq=tmp;PROCESS(clk)BEGINIF(clkEVENT AND clk=1) THEN IF(load=0) THEN tmp=d; ELSE tmp(0)=tmp(3); tmp(3 downto 1)=tmp(2 downto 0); END IF;E
22、ND IF;END PROCESS;END aa; 16.60进制递增计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY cntm60v IS PORT( en : IN std_logic; clear : IN std_logic; load : IN std_logic; dl,dh : IN std_logic_vector(3 downto 0); clk : IN std_logic; cout : out std_logic; ql : buffer std_logi
23、c_vector(3 downto 0); qh : buffer std_logic_vector(3 downto 0) );END cntm60v;ARCHITECTURE behave OF cntm60v IS signal ent2 : std_logic;BEGIN PROCESS (clk) VARIABLE tmpl,tmph :std_logic_vector(3 downto 0); BEGIN IF(clear=0) THEN tmpl:=0000; tmph:=“0000”; - -异步清零 ELSIF(clkEVENT AND clk = 1) THEN IF lo
24、ad=0 THEN tmpl:=dl; tmph:=dh; - - 同步置数 elsif(en=1) then if (tmpl=1001) then tmpl:=“0000”; - -个位计数器9+1=0 if(tmph=0101) then tmph:=“0000”; - -十位计数器5+1=0 59+1=0 else tmph:=tmph+1; end if; else tmpl:=tmpl+1; end if; end IF; -end lf (load) END IF; -end if clear ql = tmpl; ent2 = tmpl(3) and tmpl(0) and en; qh=tmph; cout=tmph(2) and tmph(0) and ent2; - -计数器为59时进位信号 cout 输出1。 END PROCESS;END behave ;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2