FPGA 错题集(常更)
2020/11/24
1
在下面横线上填上合适的语句,完成BCD-7段LED显示译码器的设计。
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY BCD_7SEG IS
PORT( BCD_LED : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LEDSEG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END BCD_7SEG;
ARCHITECTURE BEHAVIOR OF BCD_7SEG IS
BEGIN
PROCESS(BCD_LED)
BEGIN
IF BCD_LED="0000" THEN LEDSEG<="0111111";
ELSIF BCD_LED="0001" THEN LEDSEG<="0000110";
ELSIF BCD_LED="0010" THEN LEDSEG<="1011011";
ELSIF BCD_LED="0011" THEN LEDSEG<="1001111";
ELSIF BCD_LED="0100" THEN LEDSEG<="1100110";
ELSIF BCD_LED="0101" THEN LEDSEG<="1101101";
ELSIF BCD_LED="0110" THEN LEDSEG<="1111101";
ELSIF BCD_LED="0111" THEN LEDSEG<="0000111";
ELSIF BCD_LED="1000" THEN LEDSEG<="1111111";
ELSIF BCD_LED="1001" THEN LEDSEG<="1101111";
ELSE LEDSEG<=______?______;
END IF;
END PROCESS;
END BEHAVIOR;
答案:”00000000”
2
在下面横线上填上合适的语句,完成计数器的设计。
说明:设电路的控制端均为高电平有效,时钟端CLK,电路的预置数据输入端为4位D,计数输出端也为4位Q,带同步始能EN、异步复位CLR和预置控制LD的六进制减法计数器。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT6 IS
PORT(EN,CLR,LD,CLK:IN STD_LOGIC;
D: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CNT6;
ARCHITECTURE BEHA OF CNT6 IS
SIGNAL QTEMP:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(CLK,CLR,LD)
BEGIN
IF CLR='1' THEN QTEMP<="0000";--CLR=1清零
ELSIF (CLK'EVENT AND CLK='1') THEN --判断是否上升沿
IF LD='1' THEN QTEMP<=____?_____;--判断是否置位
ELSIF EN='1' THEN --判断是否允许计数
IF QTEMP="0000" THEN QTEMP<="0101";--等于0,计数值置5
ELSE QTEMP<=QTEMP-1s; --否则,计数值减1
END IF;
END IF;
END IF;
Q<=QTEMP;
END PROCESS;
END BEHA;
答案:D
此计数器为可与置数的计数器,当LD=’1’,将D中的数置入,
而不是都置为高电平’1111’。
3
在下面横线上填上合适的语句,完成减法器的设计。
由两个1位的半减器组成一个1位的全减器
--1位半减器的描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY HALF_SUB IS
PORT(A,B : IN STD_LOGIC;
DIFF,COUT : OUT STD_LOGIC);
END HALF_SUB;
ARCHITECTURE ART OF HALF_SUB IS
BEGIN
COUT<=NOT A AND B; --借位
DIFF<=A XOR B; --差
END ;
--1位全减器描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FALF_SUB IS
PORT(A,B,CIN: IN STD_LOGIC;
DIFF,COUT : OUT STD_LOGIC);
END FALF_SUB;
ARCHITECTURE ART OF FALF_SUB IS
COMPONENT HALF_SUB
PORT(A,B : IN STD_LOGIC;
DIFF,COUT : OUT STD_LOGIC);
END COMPONENT;
SIGNAL T0,T1,T2:STD_LOGIC;
BEGIN
U1: HALF_SUB PORT MAP(A,B,___1?___,T1);
U2: HALF_SUB PORT MAP(T0,___2?___,___3?___,T2);
COUT<=___4?___;
END ;
答案:1 T0;2 CIN;3 DIFF; 4 T1 OR T2
DIFF = A XOR B XOR CIN
U1和U2的结果中只要有一个有借位,则整个全减器就有借位
4
在下面横线上填上合适的语句,完成60进制减计数器的设计。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT IS
PORT(CLK: IN STD_LOGIC;
H,L: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END COUNT;
ARCHITECTURE BHV OF COUNT IS
BEGIN
PROCESS(CLK)
VARIABLE HH,LL: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF LL=0 AND HH=0 THEN
HH:="0101"; LL:="1001";
ELSIF LL=0 THEN
LL:="1001";
HH:=___1?___;
ELSE
LL:=___2?___;
END IF;
END IF;
H<=HH;
L<=LL;
END PROCESS;
END BHV;
答案:1 HH-1; 2 LL-1
HH-1√
不需要 HH-“0001”
5
在下面横线上填上合适的语句,完成移位寄存器的设计。
说明:8位的移位寄存器,具有左移一位或右移一位、并行输入和同步复位的功能。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY SHIFTER IS
PORT(DATA :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CLK:IN STD_LOGIC;
SHIFTLEFT,SHIFTRIGHT:IN STD_LOGIC;
RESET:IN STD_LOGIC;
MODE:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
QOUT:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0));
END SHIFTER;
ARCHITECTURE ART OF SHIFTER IS
BEGIN
PROCESS
BEGIN
____?____(RISING_EDGE(CLK)); --等待上升沿
IF RESET='1' THEN QOUT<="00000000"; --同步复位
ELSE
CASE MODE IS
WHEN "01"=>QOUT<=SHIFTRIGHT&QOUT(7 DOWNTO 1)&; --右移一位
WHEN "10"=>QOUT<=QOUT(6 DOWNTO 0)&SHIFTLEFT; --左移一位
WHEN "11"=>QOUT<=DATA; --不移,并行输入
WHEN OTHERS=>NULL;
END CASE;
END IF;
END PROCESS;
END ART;
答案:WAIT UNTIL
注意不要忘记UNTIL
6
在下面横线上填上合适的语句,完成计数器的设计。
说明:设计一个带有异步复位和时钟使能的一位八进制加法计数器(带进位输出端)。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT8 IS
PORT (CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
COUT : OUT STD_LOGIC );
END CNT8;
ARCHITECTURE BEHAV OF CNT8 IS
BEGIN
PROCESS(CLK, RST, EN)
___1?___ CQI : STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
IF RST = '1' THEN CQI := “000”;
___2?___ CLK'EVENT AND CLK='1' THEN
IF EN = '1' THEN
IF CQI < "111" THEN CQI :="000" ;
ELSE CQI := CQI + 1;
END IF;
END IF;
END IF;
IF CQI = "111" THEN COUT <= '1';
ELSE COUT <= '0';
END IF;
CQ <= CQI;
END PROCESS;
END BEHAV;
答案:1 VARIABLE;2 ELSIF
从后面的”:=”可以得出;
前面还有个IF没END,所以是ELSIF。
7
在下面横线上填上合适的语句,完成数据选择器的设计。
说明:采用元件例化的设计方法,先设计一个2选1多路选择器,再使用3个2选1多路选择器构成一个4选1多路选择器。
LIBRARY IEEE; --2选1多路选择器的描述
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUX21 IS
PORT(A,B,SEL : IN STD_LOGIC;
Y : OUT STD_LOGIC);
END MUX21;
ARCHITECTURE ART OF MUX21 IS
BEGIN
Y<=A WHEN SEL='0' ELSE B;
END ;
LIBRARY IEEE; --4选1多路选择器的描述
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUX41 IS
PORT(A,B,C,D : IN STD_LOGIC;
S1,S2 : IN STD_LOGIC;
Y:OUT STD_LOGIC) ;
END;
ARCHITECTURE ART OF MUX41 IS
COMPONENT MUX41
PORT(A,B,SEL : IN STD_LOGIC;
Y : OUT STD_LOGIC);
END COMPONENT;
SIGNAL Y1,Y2:STD_LOGIC;
BEGIN
U1: MUX21 PORT MAP(A,B,S1,___1?___);
U2: MUX21 PORT MAP(C,D,___2?___,Y2);
U2: MUX21 PORT MAP(Y1,Y2,___3?___,Y);
END ;
答案:1 Y1;2 S1;3 S2;
两个二选一计数器组成一个四选一计数器,S1选的是每个计数器中的哪一位,S2选择的是哪一个计数器。
8
在下面横线上填上合适的语句,完成同步22进制计数器的设计。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNTER22 IS
PORT( CLK: IN STD_LOGIC;
CH, C: OUT STD_LOGIC;
QB1, QA1: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END;
ARCHITECTURE BEHAV OF COUNTER22 IS
SIGNAL QB, QA: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL CIN: STD_LOGIC;
BEGIN
QB1<=QB;
QA1<=QA;
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF (QA=9) OR (QB=2 AND QA=1) THEN QA<="0000"; CIN<='0';
ELSIF QA=___?___ THEN CIN<='1'; QA<=QA+1;
ELSE QA<=QA+1 ;
CIN<='0';
END IF;
END IF;
END PROCESS;
PROCESS(CIN, CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF (QB=2 AND QA=1) THEN QB<="0000"; C<='1';
ELSE C<='0';
END IF;
IF CIN='1' THEN QB<=QB+1;
END IF;
END IF;
END PROCESS;
CH<=CIN;
END;
答案:8
9
在下面横线上填上合适的语句,完成序列信号发生器的设计。
说明:带异步复位为CLR,时钟端为CLK,输出端为Q,串行输出指定序列(低位先出)。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SENQGEN IS
PORT(CLR,CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC);
END SENQGEN;
ARCHITECTURE BEHA OF SENQGEN IS
SIGNAL Q_TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
PROCESS(CLK,CLR)
BEGIN
IF CLR='1' THEN Q_TEMP<="000";
IF (CLK'EVENT AND CLK='1') THEN
ELSIF Q_TEMP="111" THEN Q_TEMP<="000";
ELSE Q_TEMP<=Q_TEMP+1;
END IF;
END IF;
END PROCESS;
PROCESS(Q_TEMP)
BEGIN
CASE Q_TEMP IS
WHEN "000"=>Q<='0';WHEN "001"=>Q<='1';
WHEN "010"=>Q<='0';WHEN "011"=>Q<='1';
WHEN "100"=>Q<='1';WHEN "101"=>Q<='1';
WHEN "110"=>Q<='1';WHEN "111"=>Q<='0';
WHEN OTHERS=>___?___;
END CASE;
END PROCESS;
END BEHA;
答案:NULL
NULL为空语句
2020/11/25
1
在下面横线上填上合适的语句,完成8位数字比较器的设计。
ENTITY COMP IS
PORT
(A,B: IN___1?___RANGE 0 T0___2?___ ;
AEQUALB, AGREATB, ALESSB : OUT BIT);
END COMP;
ARCHITECTURE BEHAVE OF COMP IS
BEGIN
AEQUALB<=‘1’ WHEN A=B ELSE‘0’;
AGREATB<=‘1’ WHEN A>B ELSE‘0’;
ALESSB<=‘1’ WHEN A<B ELSE‘0’;
END BEHAVE;
答案:1 INTEGER;2 255
8位(二进制)数字范围为整数0~255。
2
在下面横线上填上合适的语句,完成下参数可定制带计数使能异步复位计数器的VHDL设计。
-- N-BIT UP COUNTER WITH LOAD, COUNT ENABLE, AND
-- ASYNCHRONOUS RESET
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY COUNTER_N IS
___1?___(WIDTH : INTEGER := 8);
PORT(DATA : IN STD_LOGIC_VECTOR (WIDTH-1 DOWNTO 0);
LOAD, EN, CLK, RST : IN STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR (WIDTH-1 DOWNTO 0));
END COUNTER_N;
ARCHITECTURE BEHAVE OF COUNTER_N IS
SIGNAL COUNT : STD_LOGIC_VECTOR (WIDTH-1 DOWNTO 0);
BEGIN
PROCESS(CLK, RST)
BEGIN
IF RST = '1' THEN
COUNT <=___2?___ ; ―― 清零
ELSIF CLK’EVENT AND CLK = ‘1’ THEN ―― 边沿检测
IF LOAD = '1' THEN
COUNT <= DATA;
ELSIF EN = '1' THEN
COUNT <= COUNT + 1;
END IF ;
END IF;
END PROCESS;
Q <= COUNT;
END BEHAVE;
答案:1 GENERIC;2 (OTHERS => ‘0’)
Generic:类属语句
所有位置零,特别是位数不缺定的时候,可以使用:(OTHERS => ‘0’)
3
在下面横线上填上合适的语句,完成简易彩灯控制电路的VHDL设计。
说明: 该控制电路控制红、绿、黄三个发光管循环发亮。要求红发光管亮2秒,绿发光管亮3秒,黄发光管亮1秒。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ASM_LED IS
PORT(CLR,CLK:IN STD_LOGIC;
LED1,LED2,LED3:OUT STD_LOGIC);
END;
ARCHITECTURE A OF ASM_LED IS
TYPE STATES IS (S0,S1,S2,S3,S4,S5);
SIGNAL Q: STD_LOGIC_VECTOR(0 TO 2);
SIGNAL STATE:STATES;
BEGIN
P1:PROCESS(CLK,___?___)
BEGIN
IF(CLR=’0’) THEN STATE<=S0;
ELSIF(CLK’EBENT AND CLK=’1’) THEN
CASE STATE IS
WHEN S0=>STATE<=S1;
WHEN S1=>STATE<=S2;
WHEN S2=>STATE<=S3;
WHEN S3=>STATE<=S4;
WHEN S4=>STATE<=S5;
WHEN S5=>STATE<=S0;
END CASE;
END IF;
END PROCESS P1;
P2:PROCESS(CLR, STATE )
BEGIN
IF CLR=’0’ THEN LED1<=’1’;LED2<=’0’;LED3<=’0’;
ELSE CASE STATE IS
WHEN S0=> LED1<=’1’;LED2<=’0’;LED3<=’0’;
WHEN S1=> LED1<=’0’;LED2<=’1’;LED3<=’0’;
WHEN S2=> LED1<=’0’;LED2<=’1’;LED3<=’0’;
WHEN S3=> LED1<=’0’;LED2<=’0’;LED3<=’1’;
WHEN S4=> LED1<=’0’;LED2<=’0’;LED3<=’1’;
WHEN S5=> LED1<=’0’;LED2<=’0’;LED3<=’1’;
END CASE;
END IF;
END PROCESS P2;
END ARCHITECTURE A;
答案:CLR
2020/12/05
①. 进程中变量赋值是立即完成的,信号赋值是进程最后完成的。
②. 仿真:
- 功能仿真:是在不考虑器件延时的理想情况下的一种项目验证方法,通过功能仿真来验证一个项目的逻辑功能是否正确;
- 时序仿真:是在考虑设计项目具体适配器件的各种延时的情况下的一种项目验证方法。时序仿真不仅测试逻辑功能,还测试目标器件最差情况下的时间关系。
③. $CASE$语句格式:
CASE 表达式 IS
WHEN 条件表达式1 => 顺序处理语句1;
WHEN 条件表达式2 => 顺序处理语句2;
...
WHEN 条件表达式N => 顺序处理语句N;
WHEN OTHERS => 顺序处理语句N+1;
END CASE;
①. $CASE$语句里没有$ELSE$,有$ELSE$的相似的是条件赋值语句($when \ else$语句);
②. 条件应包含全部情况。
2020/12/06
①. $CASE$语句必须在进程中;
②. 不定态符号$’X’$必须是大写;
③. 基于$VHDL$设计的仿真的先后顺序:
行为仿真→前端功能仿真→功能仿真→门级时序仿真;
④. 不完整的$IF$语句,其综合结果可实现时序逻辑电路;