fpga面试数电部份
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FP GA大公司面试笔试数电部份
ASIC工程师
1:什么是同步逻辑和异步逻辑?(汉王)
同步逻辑是时钟之间有固定的因果关系。
异步逻辑是各时钟之间没有固定的因果关系。
〔补充〕:同步时序逻辑电路的特点:各触发器的时钟端全部连接在一起,并接在系统时钟端,只有那时钟脉冲到来时,电路的状态才能改变。
改变后的状态将一直维持到下一个时钟脉冲的到来,现在不管外部输入 x 有无转变,状态表中的每一个状态都是稳固的。
异步时序逻辑电路的特点:电路中除能够利用带时钟的触发器外,还能够利用不带时钟的触发器和延迟元件作为存储元件,电路中没有统一的时钟,电路状态的改变由外部输入的转变直接引发。
2:同步电路和异步电路的区别:
同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的转变都与所加的时钟脉冲信号同步。
异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这些触发器的状态转变与时钟脉冲同步,而其他的触发器的状态转变不与时钟脉冲同步。
3:时序设计的实质:
电路设计的难点在时序设计,时序设计的实质确实是知足每一个触发器的成立维持时刻的而要求。
4:成立时刻与维持时刻的概念?
成立时刻:触发器在时钟上升沿到来之前,其数据输入端的数据必需维持不变的时刻。
维持时刻:触发器在时钟上升沿到来之后,其数据输入端的数据必需维持不变的时刻。
不考虑时钟的skew,D2的成立时刻不能大于(时钟周期T - D1数据最迟抵达时刻T1max+T2max);保持间不能大于(D1数据最快抵达时刻T1min+T2min);D2的数据将进入亚稳态并向后级电路传播
5:什么缘故触发器要知足成立时刻和维持时刻?
因为触发器内部数据的形成是需要必然的时刻的,若是不知足成立和维持时刻,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳固,在0和1之间转变,这时需要通过一个恢复时刻,其输出才能稳固,但稳固后的值并非必然是你的输入值。
这确实是什么缘故要用两级触发器来同步异步输入信号。
如此做能够避免由于异步输入信号关于本级时钟可能不知足成立维持时刻而使本级触发器产生的亚稳态传播到后面逻辑中,致使亚稳态的传播。
(比较容易明白得的方式)换个方式明白得:需要成立时刻是因为触发器的D段像一个锁存器在同意数据,为了稳固的设置前级门的状态需要一段稳固时刻;需要维持时刻是因为在时钟沿到来以后,触发器要通过反馈来所存状态,从后级门传到前级门需要时刻。
6:什么是亚稳态?什么缘故两级触发器能够避免亚稳态传播?
这也是一个异步电路同步化的问题,具体的能够参考《EDACN
技术月刊20050401》。
亚稳态是指触发器无法在某个规定的时刻段内抵达一个能够确认的状态。
利用两级触发器来
使异步电路同步化的电路其实叫做一步同位器”,他只能用来对一名异步信号进行同步。
两级触发器可避免亚稳态传播的原理:假设第一级触发器的输入不知足其成立维持时刻,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时刻后必需稳固下来,而且稳固的数据必需知足第二级触发器的成立时间,
如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据知足其成立维持时刻。
同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的成立时刻 < = 时钟周期。
更确切地说,输入脉冲宽度必需大于同步时钟周期与第一级触发器所需的维持时刻之和。
最保险的脉冲宽度是两倍同步时钟周期。
因此,如此的同步电路关于从较慢的时钟域来的异步信号进入较快的时钟域比较有效,关于进入一个较慢的时钟域,那么没有作用。
7:系统最高速度计算(最快时钟频率)和流水线设计思想:
同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处置数据的时刻距离越短,电路在单位时刻内处置的数据量就愈大。
假设Tco是触发器的输入数据被时钟打入到触发器到数据抵达触发器输出端的延不时刻;Tdelay是组合逻辑的延时;Tsetup是D触发器的成立时刻。
假设数据已被时钟打入D触发器,那么数据抵达第一个触发器的Q输出端需要的延不时刻是Tco,通过组合逻辑的延不时刻为Tdelay,然后抵达第二个触发器的D端,要希望时钟能在第二个触发器再次被稳固地打入触发器,那么时钟的延迟必需大于Tco+Tdelay+Tsetup,也确实是说最小的时钟周期Tmin =Tco+Tdelay+Tsetup,即最快的时钟频率Fmax =1/Tmin。
FPGA开发软件也是通过这种方式来计算系统最高运行速度Fmax。
因为Tco和Tsetup是由具体的器件工艺决定的,故设计电路时只能改变组合逻辑的延迟时刻Tdelay,因此说缩短触发器间组合逻辑的延不时刻是提高同步电路速度的关键所在。
由于一样同步电路都大于一级锁存,而要使电路稳固工作,时钟周期必需知足最大延时要求。
故只有缩短最长延时途径,才能提高电路的工作频率。
能够将较大的组合逻辑分解为较小的N块,通过适当的方式平均分派组合逻辑,然后在中间插入触发器,并和原触发器利用相同的时钟,就能够够幸免在两个触发器之间显现过大的延时,排除速度瓶颈,如此
能够提高电路的工作频率。
这确实是所谓"流水线"技术的大体设计思想,即原设计速度受限部份用一个时钟周期实现,采纳流水线技术插入触发器后,可用N个时钟周期实现,因此系统的工作速度能够加速,吞吐量加大。
注意,流水线设计会在原数据通路上加入延时,另外硬件面积也会稍有增加。
8:时序约束的概念和大体策略?
时序约束要紧包括周期约束,偏移约束,静态时序途径约束三种。
通过附加时序约束能够综合布线工具调整映射和布局布线,是设计达到时序要求。
附加时序约束的一样策略是先附加全局约束,然后对快速和慢速例外途径附加专门约束。
附加全局约束时,第一概念设计的所有时钟,对各时钟域内的同步元件进行分组,对分组附加周期约束,然后对FPGA/CPLD输入输出PAD附加偏移约束、对全组合逻辑的PAD TO PAD途径附加约束。
附加专门约束时,第一约束分组之间的途径,然后约束快、慢速例外途径和多周期途径,和其他特殊途径。
9:附加约束的作用?
作用:1:提高设计的工作频率(减少了逻辑和布线延时);
2:取得正确的时序分析报告;(静态时序分析工具以约束作为判按时序是不是知足设计要求的标准,因此要求设计者正确输入约束,以便静态时序分析工具能够正确的输出时序报告)
3:指定
FPGA/CPLD的电气标准和引脚位置。
10:FPGA设计工程师尽力的方向:
SOPC,高速串行I/O,低功耗,靠得住性,可测试性和设计验证流程的优化等方面。
随着芯片工艺的提高,芯片容量、集成度都在增加,FPGA设计也朝着高速、高度集成、低功耗、高靠得住性、高可测、可验证性进展。
芯片可测、可验证,正在成为复杂设计所必
备的条件,尽可能在上板之前查出bug,将发觉bug的时刻提早,这也是一些公司花大力气设计仿真平台的缘故。
另外随着单板功能的提高、本钱的压力,低功耗也慢慢进入FPGA 设计者的考虑范围,完成相同的功能下,考虑如何能够使芯片的功耗最低,听说altera、xilinx 都在根据自己的芯片特点整理如何降低功耗的文档。
高速串行IO的应用,也丰富了FPGA的应用范围,象xilinx的v2pro中的高速链路也慢慢被应用。
总之,学无止境,当把握必然概念、方式以后,就要开始考虑FPGA其它方面的问题了。
11:关于多位的异步信号如何进行同步?
对以一名的异步信号能够利用一名同步器进行同步,而关于多位的异步信号,能够采纳如下方式:1:能够采纳维持寄放器加握手信号的方式(多数据,操纵,地址);
2:特殊的具体应用电路结构依照应用的不同而不同;
3:异步
FIFO。
(最经常使用的缓存单元是DPRAM)
12
:
FPGA
和
CPLD
的区别?
FPGA
是可编程
ASIC。
ASIC:
专用集成电路,它是面向专门用途的电路,专门为一个用户设计和制造的。
依照一个用户的特定要求,能以低研制本钱,短、交货周期供货的全定制,半定制集成电路。
与门阵
列等其它
ASIC(ApplicaTIon Specific IC)
相较,
它们又具有设计开发周期短、
设计制造本钱
低、开发工具先进、标准产品无需测试、质量稳固和可实时在线查验等优势。
CPLD
FPGA
内部结构
Product
-
term Look
-
up Table
内部
EEPROM SRAM
,外挂
EEPROM
资源类型组合电路资源丰硕触发器资源丰硕
集成度
低
高
利用处合
完成操纵逻辑
能完成比较复杂的算法
速度
慢
快
-
PLL
、
RAM
和乘法器等
保密性
可加密
一样不能保密
13
:锁存器(
latch
)和触发器(
flip-flop
)区别?
电平灵敏的存储期间称为锁存器。
可分为高电平锁存器和低电平锁存器,用于不同时钟之间的信号同步。
有交叉耦合的门组成的双稳态的存储原件称为触发器。
分为上升沿触发和下降沿触发。
能够以为是两个不同电平灵敏的锁存器串联而成。
前一个锁存器决定了触发器的成立时刻,
后一个锁存器那么决定了维持时刻。
14
:
FPGA
芯片内有哪两种存储器资源?
FPGA
芯片内有两种存储器资源:一种叫
block ram,
另一种是由
LUT
配置成的内部存
储器(也确实是散布式
ram
Block ram
由必然数量固定大小的存储块组成的,利用
BLOC
K RAM
资源不占用额外的逻辑资源,而且速度快。
可是利用的时候消耗的
BLOCK RAM
资源是其块大小的整数倍。
15
:什么是时钟抖动?
时钟抖动是指芯片的某一个给定点上时钟周期发生临时性转变,也确实是说时钟周期在不同的周期上可能加长或缩短。
它是一个平均值为
的平均变量。
16
:
FPGA
设计中对时钟的利用?(例如分频等)
FPGA
芯片有固定的时钟路由,这些路由能有减少时钟抖动和误差。
需要对时钟进行相位移动或变频的时候,
一样不许诺对时钟进行逻辑操作,
如此不仅会增加时钟的误差和抖
动,
还会使时钟带上毛刺。
一样的处置方式是采纳
FPGA
芯片自带的时钟治理器如
PLL,DL
L
或
DCM
,或把逻辑转换到触发器的
D
输入(这些也是对时钟逻辑操作的替代方案)。
17
:
FPGA
设计中如何实现同步时序电路的延时?
第一说说异步电路的延时实现:
异步电路一半是通过加
buffer
、
两级与非门等
(我还没
用过因此也不是很清楚),但这是不适合同步电路实现延时的。
在同步电路中,关于比较大的和特殊要求的延时,
一半通太高速时钟产生计数器,
通过计数器来操纵延时;
关于比较小
的延时,能够通过触发器打一拍,只是如此只能延迟一个时钟周期。
18
:
FPGA
中能够综合实现为
RAM/ROM/CAM
的三种资源及其注意事项?
block ram;
触发器(
FF
),查找表(
LUT
);
注意事项:
1
:在生成
RAM
等存储单元时,应该首选
block ram
资源;其缘故有二:第一:
利用
block ram
等资源,能够节约更多的
FF
和
4-LUT
等底层可编程单元。
利用
m
能够说是
“
不用白不用
”
,是最大程度发挥器件效能,节约本钱的一种表现;第二:block
ram
是一种能够配置的硬件结构,其靠得住性和速度与用LUT
和
register
构建的存储器更有
优势。
2
:弄清
FPGA
的硬件结构,合理利用
block ram
资源;
3
block ram
容量,
高效利用
block ram
资源;
4
:散布式
ram
资源(
distribute ram
)
19
:
Xilinx
中与全局时钟资源和
DLL
相关的硬件原语:
经常使用的与全局时钟资源相关的
器件原语包括:
IBUFG,IBUFGDS,BUFG,BUFGP,
BUFGCE,BUFGMUX,BUFGDLL,DCM
等。
关于各个器件原语的说明能够参考《
FPGA
设
计指导准那么》
p50
部份。
20
:
HDL
语言的层次概念?
HDL
语言是分层次的、类型的,最经常使用的层次概念有系统与标准级、功能模块级,行为级,寄放器传输级和门级。
21
:查找表的原理与结构?
查找表(
look-up-table
)简称为
LUT
,
LUT
本质上确实是一个
RAM
FPGA
中多使
用
4
输入的
LUT
,因此每一个
LUT
能够看成一个有
4
位地址线的
16x1
的
RAM。
当用户
通过原理图或
HDL
语言描述了一个逻辑电路以后,
PLD/FPGA
开发软件会自动计算逻辑电
路的所有可能的结果,并把结果事前写入
RAM,
如此,每输入一个信号进行逻辑运算就等于
输入一个地址进行查表,找出地址对应的内容,然后输出即可
22
:
ic
设计前端到后端的流程和
eda
工具?
设计前端也称逻辑设计,后端设计也称物理设计,二者并无严格的界限,一样涉及到与工艺有关的设计确实是后端设计。
1
:规格制定:客户向芯片设计公司提出设计要求。
2
:详细设计:芯片设计公司(
Fabless
)依照客户提出的规格要求,拿出设计解决方
案和具体实现架构,划分模块功能。
目前架构的验证一样基于
systemC
语言,对价后模型
的仿真能够利用
systemC
的仿真工具。
例如:
CoCentric
和
Visual Elite
等。
3
:
HDL
编码:设计输入工具:ultra
,
visual VHDL
等
4
:仿真验证:modelsim
5
:逻辑综合:synplify
6
:静态时序分析:synopsys
的
Prime Time
7
:形式验证:
Synopsys
的
Formality.
23
:寄生效应在
ic
设计中如何加以克服和利用(这是我的明白得,原题仿佛是说,ic
设计过
程中将寄生效应的如何反馈阻碍设计师的设计方案)?
24
:用
filp-flop
和
logic-gate
设计一个
1
位加法器,输入carryin
和
current-stage
,输
出
carryout
和
next-stage
?
process(sig_intel) begin
case
sig_intel
is
when "000"
=> carryout <=
'0';
next_state <=
'0';
when "001" => carryout <=
'1';
next_state <=
'0';
when "010" =>
carryout <=
'1';
next_state <=
'0';
when "011" => carryout <=
'0';
next_state <=
'1';
when "100" => carryout
'1';
next_state <=
'0';
when "101" => carryout <=
'0';
next_state <=
'1';
when "110" => carryout <=
next_state <=
'1';
when "111" => carryout <=
'1';
next_state <=
'1';
when others => carryout <=
'X';
next_state <=
'X';。