FPGA经典面试题Word文档格式.docx
《FPGA经典面试题Word文档格式.docx》由会员分享,可在线阅读,更多相关《FPGA经典面试题Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。
产生毛刺叫冒险。
如果布尔式中有相反的信号则可能产生竞争和冒险现象。
解决方法:
一是添加布尔式的消去项,二是在芯片外部加电容。
4.用Verilog设计一个5分频器。
5分频,奇数分频都可以类似这么做,只需要改div1和div2的参数。
div1为奇数分频除2的余数。
采用上升延和下降延分别触发不同波形,最后叠加的方式产生奇数分频。
moduledivfreq(clk,clk1x,rst,clk1xpose,clk1xnege,coutpose,coutnege);
inputclk;
inputrst;
outputclk1x;
outputclk1xpose;
outputclk1xnege;
output[2:
0]coutpose;
0]coutnege;
regclk1xpose;
regclk1xnege;
reg[2:
parameterdiv1=2,div2=4;
//div1=5/2,div2=5-1
assignclk1x=clk1xpose|clk1xnege;
always@(posedge
clkornegedgerst)
begin
if(!
rst)
clk1xpose=0;
elseif(coutpose==div1)
clk1xpose=~clk1xpose;
elseif(coutpose==div2)
else
clk1xpose=clk1xpose;
end
always@(negedge
clk1xnege=0;
elseif(coutnege==div1)
clk1xnege=~clk1xnege;
elseif(coutnege==div2)
clk1xnege=clk1xnege;
coutpose=0;
else
coutpose=coutpose+1;
coutnege=0;
coutnege=coutnege+1;
endmodule
1、FPGA结构一般分为三部分:
可编程逻辑块(CLB)、可编程I/O模块和可编程内部连线。
2CPLD的内部连线为连续式布线互连结构,任意一对输入、输出端之间的延时是固定;
FPGA的内部连线为分段式布线互连结构,各功能单元间的延时不定(不可预测)。
3大规模可编程器件主要有CPLD和FPGA两类,其中CPLD通过可编程乘积项逻辑实现其逻辑功能。
基于SRAM的FPGA器件,每次上电后必须进行一次配置。
FPGA内部阵列的配置一般采用在电路可重构技术,编程数据保存在静态存储器(SRAM),掉电易失。
4目前世界上有十几家生产CPLD/FPGA的公司,最大的两家是:
Altera,Xilinx。
5硬件描述语言(HDL)是EDA技术的重要组成部分,是电子系统硬件行为描述、结构描述、数据流描述的语言,它的种类很多,如VHDL、VerilogHDL、AHDL
6WHEN_ELSE条件信号赋值语句和IF_ELSE顺序语句的异同
WHEN_ELSE条件信号赋值语句中无标点,只有最后有分号;
必须成对出现;
是并行语句,必须放在结构体中。
IF_ELSE顺序语句中有分号;
是顺序语句,必须放在进程中
7可编程逻辑器件设计输入有原理图输入、硬件描述语言输入和波形输入三种方式。
原理图输入方式是一种最直接的设计描述方式,
硬件描述语言的突出优点是:
*语言与工艺的无关性;
语言的公开可利用性,便于实现大规模系统的设计;
*具有很强的逻辑描述和仿真功能,而且输入效率高,在不同的设计输入库之间的转换非常方便,用不着对底层的电路和PLD结构的熟悉。
波形设计输入适用于时序逻辑和有重复性的逻辑函数。
8用VHDL/VeilogHDL语言开发可编程逻辑电路的完整流程:
文本编辑→功能仿真→逻辑综合→布局布线→时序仿真。
*所谓综合,就是根据设计功能和实现该设计的约束条件(如面积、速度、功耗和成本等),将设计输入转换成满足要求的电路设计方案,该方案必须同时满足与其的功能和约束条件。
综合的过程也是设计目标的优化过程,其目的是将多个模块化设计文件合并为一个网表文件,供布局布线使用,网表中包含了目标器件中的逻辑单元和互连的信息。
*布局布线就是根据设计者指定的约束条件(如面积、延时、时钟等)、目标器件的结构资源和工艺特性,以最优的方式对逻辑元件布局,并准确地实现元件间的互连,完成实现方案(网表)到使实际目标器件(FPGA或CPLD)的变换。
9基于EDA软件的FPGA/CPLD设计流程为:
原理图/HDL文本输入→功能仿真→综合→适配→时序仿真→编程下载→硬件测试。
*综合是EDA设计的关键步骤,综合就是将电路的高级语言转换成低级的,可与FPGA/CPLD相映射的功能网表文件。
为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束。
10构成一个完整的VHDL语言程序的五个基本结构:
实体(ENTITY)、结构体(ARCHITECURE)、配置(CONFIGURATION)、库(LIBRARY)、程序包(PACKAGE)。
*实体的由实体说明和结构体两部分组成。
实体说明部分用于描述所设计系统的外部端口信号和参数的属性和设置,而结构体部分则定义了设计单元的具体功能、行为、数据流程或内部结构。
*结构体的三种描述方式,即行为级描述、数据流级描述和结构级描述。
结构体通常由结构体名称、定义语句和并行处理语句构成,
*程序包用于存放各设计模块能共享的数据类型、常数、子程序等。
*库用于存放已编译的实体、结构体、程序包和配置,可以通过其目录进行查询和调用。
在VHDL语言中,可以存在多个不同的库,但是库与库之间是独立的,不能互相嵌套。
它可由用户生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。
常用库:
(1)IEEE库
IEEE库主要包括std_logic_1164、numeric_bit、numeric_std等程序包,还有一些程序包非IEEE标准,但并入IEEE库,如std_logic_arich、std_logic_unsigned、std_logic_signed。
使用IEEE程序包,必须声明。
(2)std库
包含standardtextio程序包。
Std库符合IEEE标准,应用中不必声明。
(3)work库
用户的VHDL设计先行工作库。
(4)vital库
包含时序程序包vital_timing和vital_primitives。
设计开发过程通常不用
每个设计实体都必须有各自完整的库说明语句和use语句。
Use语句的使用将使说明的程序包对本设计实体部分全部开放,即是可视的。
11VHDL的数据对象包括常量(constant)、变量(varuable)和信号(signal),它们是用来存放各种类型数据的容器。
12在VHDL的端口声明语句中,端口方向包括in、out、buffer、inout、linkage
“BUFFER”为缓冲端口,与OUT类似,只是缓冲端口允许实体内部使用该端口信号,它可以用于输出,也可以用于端口信号的反馈。
当一个结构体用“BUFFER”说明输出端口时,与其连接的另一个结构体的端口也要用BUFFER说明。
以“LINKAGE”定义的端口不指定方向,无论哪个方向的信号都可以连接。
13VHDL的PROCESS(进程)语句是由顺序语句组成的,但其本身却是并行语句。
14VHDL的子程序有过程(PROCEDURE)和函数(FUNCTION)两种类型,具有可重载性特点。
15图形文件的扩展名是.bdf;
矢量波形文件的扩展名是.vwf;
使用VHDL语言,文本设计文件的扩展名是.vhd;
自建元件图形符号文件的扩展名.bsf;
资源分配说明文件扩展名.qsf,用文本打开它可以修改引脚编号;
逻辑综合会生成.edf文件;
双击.qpf文件可启动QuartusII并打开已有工程。
16图形编辑中模块间的连线有三种形式:
节点线、总线和管道线
17Quartus编译器编译FPGA工程最终生产两种不同用途的文件,它们分别是.sof和.pof。
sof是SRAMObjectFile,下载到FPGA中,断电丢失。
pof是ProgrammerObjectFile,下载到配置芯片中,上电重新配置FPGA
18FPGA过程中的仿真有三种:
行为仿真、逻辑仿真、时序仿真。
19IP核在EDA技术和开发中占有很重要的地位,提供VHDL硬件描述语言功能块,但不涉及实现该功能模块的具体电路的IP核为软件IP。
二名词解释,写出下列缩写的中文(或者英文)含义:
1.FPGAField-ProgrammableGateArray现场可编程门阵列
2VHDL--Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage)甚高速集成电路硬件描述语言
3HDLHardwareDescriptionLanguage硬件描述语言
4EDAElectronicDesignAutomation电子设计自动化
5CPLDComplexProgrammableLogicDevice复杂可编程逻辑器件
6PLDProgrammableLogicDevice可编程逻辑器件
7GAL,genericarraylogic通用阵列逻辑
8.LABLogicArrayBlock逻辑阵列块
9.CLBConfigurableLogicBlock可配置逻辑模块
10EABEmbeddedArrayBlock嵌入式阵列块
11SOPCSystem-on-a-Programmable-Chip可编程片上系统
12.LUTLook-UpTable查找表
13.JTAGJointTestActionGroup联合测试行为组织
14.IPIntellectualProperty知识产权
15ASICApplicationSpecificIntegratedCircuits专用集成电路
16ISPInSystemProgrammable在系统可编程
17ICRInCircuitRe-config在电路可重构
18RTLRegisterTransferLevel寄存器传输级
选择:
1.基于VHDL设计的仿真包括有①门级时序仿真、②行为仿真、③功能仿真和④前端功能仿真这四种,按照自顶向下的设计流程,其先后顺序应该是:
______D___
A.①②③④B.②①④③C.④③②①D.②④③①
2.执行QuartusII的B命令,可以检查设计电路错误。
ACreateDefaultSymbolBCompiler----编译
CSimulator----时序仿真DTimingAnalyzer---时序分析
3.在设计输入完成后,应立即对设计文件进行(C)。
A编辑B编译C功能仿真D时序仿真
4.在VHDL中用(C)来把特定的结构体关联一个确定的实体,为一个大型系统的设计提供管理和进行工程组织。
A输入B输出C综合D配置
5电子系统设计优化,主要考虑提高资源利用率减少功耗(即面积优化),以及提高运行速度(即速度优化),下列方法A不属于面积优化。
A流水线设计B资源共享C逻辑优化D串行化
6不完整地IF语句,其综合结果可实现
A时序逻辑电路B组合逻辑电路C双向电路D三态控制电路
7.下面对利用原理图输入设计方法进行数字电路系统设计,那一种说法是不正确的______。
A.原理图输入设计方法直观便捷,但不适合完成较大规模的电路系统设计;
B.原理图输入设计方法一般是一种自底向上的设计方法;
C.原理图输入设计方法无法对电路进行功能描述;
D.原理图输入设计方法也可进行层次化设计。
8.在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,不正确的是___C____。
A.PROCESS为一无限循环语句;
敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动。
B.敏感信号参数表中,不一定要列出进程中使用的所有输入信号;
C.进程由说明部分、结构体部分、和敏感信号三部分组成;
D.当前进程中声明的变量不可用于其他进程
9IP核在EDA技术和开发中占有很重要的地位,提供VHDL硬件描述语言功能块,但不涉及实现该功能模块的具体电路的IP核为C
A硬件IPB固件IPC软件IPD都不是
10综合是EDA设计的关键步骤,下面对综合的描述中错误的是A综合就是把抽象设计中的一种表示转换成另一种表示的过程。
B综合就是将电路的高级语言转换成低级的,可与FPGA/CPLD相映射的功能网表文件。
C为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束。
D综合可理解为一种映射过程,并且这种映射关系是唯一的,即综合结果是唯一的。
11大规模可编程器件主要有CPLD和FPGA两类,下面对FPGA结构与工作原理描述中,正确的是
AFPGA全称为复杂可编程逻辑器件
BFPGA是基于乘积项结构的可编程逻辑器件。
C基于SRAM的FPGA器件,每次上电后必须进行一次配置。
D在Altera公司生产的器件中,MAX7000系列属于FPGA结构
12大规模可编程器件主要有CPLD和FPGA两类,其中CPLD通过实现其逻辑功能。
A可编程乘积项逻辑;
B查找表(LUT)C输入缓冲D输出缓冲
13进程中的信号赋值语句,其信号更新是
A按顺序完成B比变量更快完成C在进程最后完成D都不对
14VHDL语言是一种结构化的语言,一个设计实体(电路模块)包括实体说明与结构体两部分,结构体描述
A器件的外部特性B器件的内部功能
C器件的综合约束D器件外部特性与内部功能
15关于VHDL的数字,请找出以下数字中最大的一个A2#1111_1110#B8#276#C10#170#D16#E#E1
判断下列标识符书写是否合法
Architecture\architecture\add2-1add2_1
2_0092,0092.009e32.009E3
VHDL语言的短标识符遵循以下命名规则:
*短标识符必须以英文字母开头;
*短标识符由26个字母(A~Z,a~z)、数字(0~9)和下划线“_”字符组成;
*下划线“_”的前后都必须有英文字母或者数字;
*短标识符不区分大小写;
如:
EDA、Eda、eda均为相同的命名。
VHDL语言的扩展标识符遵循以下命名规则:
*扩展标识符用反斜杠来分隔;
\adde\,\begin-add\等。
*扩展标识符允许包含图形符号及空格等;
\counter&
adder\,\entity%end\
*扩展标识符的两个反斜杠之间可以用保留字;
\entity\,\architecture\等。
*扩展标识符的两个反斜杠之间可以用数字开头;
\ladder\,\44counter\等。
*扩展标识符中允许多个下划线相连;
\adder.es__counter\等。
*同名的扩展标识符和短标识符不表示同一名称;
\adder\和adder不相同。
*扩展标识符区分大小写字母;
\EDA\和\eda\不相同。
*扩展标识符中如果含有一个反斜杠,可以两个反斜杠来代替;
\adder\\counter\表示的扩展标识符名称为adder\countera
十进制数的定义格式为:
整数[.整数][指数]
其中整数可表示为"
数字_数字"
,指数可表示为"
E+(或-)整数"
,但只有十进制的实数才允许指数为负值。
在相邻的数字之间插入下划线,对数值并无影响,而且允许在数字之前冠以若干个零,但是不允许在数字中存在空格或其它字符。
以基表示的数,格式:
基#基于基的整数[.基于基的整数]#指数
基是一个整数,其最小值是2,最大值是16。
基于基的整数可表示为“扩展数字_扩展数字”,其中扩展数字为数字(或字母,如十六进制中的A、B、C、D、E、F,且大小写字母所表达的意义相同),插入下划线不会影响其数值大小。
2#111111_11#等效于(2#11111111#),表示十进制数255
8#0037等效于(8#377#),表示十进制数2553×
82+7×
8+7
016#0Ff#等效于(16#FF#),表示十进制数255=16×
15+15
16#8F#E1表示十进制数2288,即143×
16=(16×
8+15)×
16
2#1.1111_01#e8表示十进制数500=(1+2-1+2-2+2-3+2-4+2-6)×
28
16#0.E#E0表示十进制数0.875=(16×
0+14×
16-1)×
160
位串用于表示位矢量,格式为:
基数说明符“数字字符串”
其中的基数说明符包括B、O和X,
B表示二进制数,O表示八进制数,X表示十六进制数。
B“10101111”,O“375”,X“89AC”,
数位字符串实际是位矢量,只有2,8,16进制,默认为B,
用于对一维位矢量的赋值,8每数占3位,16每数占4位
逻辑运算符的左边和右边以及代入的信号的数据类型必须是相同的,否则编译时会给出出错警告。
当一个语句中存在两个以上的逻辑表达式时,在VHDL语言中,左右没有优先级差别。
X<
=(aANDb)ORc;
若去掉式中的括号,则从语法上来说是错误的。
不过,如果一个逻辑表达式中只有一种逻辑运算符,那么改变运算的顺序不会导致逻辑的改变,此时括号就可以省略掉。
例如:
a<
=bORcORdORe;
=bANDcANDdANDe--对应的逻辑表达式为a=b·
c·
d·
e
=bORcORdORe--对应的逻辑表达式为a=b+c+d+e
=(bORc)AND(dORe)--对应的逻辑表达式为a=(b+c)·
(d+e)
在进行关系运算时,左右两边的操作数的类型必须相同,但是位长度不一定相同。
在利用关系运算符对位矢量数据进行比较时,比较过程是从最左边的位开始,自左至右按位进行比较的。
在位长不同的情况下,只能按自左至右的比较结果作为关系运算的结果。
关系运算符中的小于等于运算符“<
=”与信号赋值时的符号“<
=”是相同的。
在阅读程序时,应按照上下文关系来判断此符号到底是关系运算符还是代入符。
移位运算:
SLL是将位向量左移,右边移空位补零;
SLA是将位向量左移,右边第一位的数值保持原值不变;
SRL是将位向量右移,左边移空位补零;
SRA是将位向量右移,左边第一位的数值保持原值不变。
ROR和ROL是自循环移位方式。
A<
="
1001"
;
B<
=ASLL1;
逻辑左移B=0010
C<
=ASRL1;
逻辑右移C=0100
D<
=ASLA1;
算术左移D=0011
E<
=ASRA1;
算术右移E=1100
F<
=AROL1;
循环左移F=0011
G<
=AROR1;
循环右移G=1100
VHDL的数据对象有三种类型:
常量(constant)、变量(varuable)和信号(signal)它们是用来存放各种类型数据的容器。
*常量。
全局量CONSTANT常量名:
数据类型:
=表达式;