FPGA教学——技术面试题(二)
2022-11-08
来源:FPGA设计论坛
0.1、设计异步FIFO时,要注意
(1)在地址信号跨时钟域时需要对其进行二进制码转格雷码的转换并进行目标时钟域的时钟打两拍同步,以防止亚稳态的产生。
(2)写满信号由读地址同步到写时钟域并与写地址进行比较产生,读空信号由写地址同步到读时钟域并与读地址进行比较产生。这样可以在第一时间得到读空与写满的信息,并对异步fifo进行操作。
(3)异步fifo的深度需要考虑到写状态的背靠背写入状态以得到最适合的深度。
(4)读写地址需要扩展一位来判断是读空还是写满,当扩展后的读写地址的格雷码相等时为读空,若其前两位不同,后面相等时为写满。
0.2、系统工作频率计算
同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间内处理的数据量就愈大。
最高运行速度:
Tco ——触发器的输入数据被时钟打入到触发器到数据到达触发器输出端的延时时间;
Tdelay——组合逻辑的延时;
Tsetup ——D触发器的建立时间
假设数据已被时钟打入D触发器,那么数据到达第一个触发器的Q输出端需要的延时时间是Tco,经过组合逻辑的延时时间为Tdelay,然后到达第二个触发器的D端,要希望时钟能在第二个触发器再次被稳定地打入触发器,则
时钟的延迟必须大于 Tco+Tdelay+Tsetup,也就是说:
最小的时钟周期 Tmin =Tco+Tdelay+ Tsetup,
即最快的时钟频率 Fmax=1/Tmin。
因为Tco和Tsetup是由具体的器件工艺决定的,故设计电路时只能改变组合逻辑的延迟时间Tdelay,所以说缩短触发器间组合逻辑的延时时间是提高同步电路速度的关键所在。由于一般同步电路都大于一级锁存,而要使电路稳定工作,时钟周期必须满足最大延时要求。故只有缩短最长延时路径,才能提高电路的工作频率。
可以将较大的组合逻辑分解为较小的N块,通过适当的方法平均分配组合逻辑,然后在中间插入触发器,并和原触发器使用相同的时钟,就可以避免在两个触发器之间出现过大的延时,消除速度瓶颈,这样可以提高电路的工作频率。这就是所谓 "流水线"技术的基本设计思想,即原设计速度受限部分用一个时钟周期实现,采用流水线技术插入触发器后,可用N个时钟周期实现,因此系统的工作速度可以加快,吞吐量加大。注意,流水线设计会在原数据通路上加入延时,另外硬件面积也会稍有增加。
1、 串行接口与并行接口区别
串行接口是数据线一根线,通过串行协议传输数据,比如uart
并行接口是一个数据在多根数据线并行传输,比如rgb888、rgb565等等
2、i2c和spi总线如何实现多机通信的,简述
I2c通过呼叫应答方式,i2c每帧数据都会先发设备地址指明数据发给谁的,读谁的;
Spi通过片选信号,spi通信前先拉低对应从机的片选,然后和收发数据
3、如何解决亚稳态?Metastability
答:亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
解决方法:
1 、降低系统时钟频率
2 、用反应更快的Flip-Flop(触发器)
3 、引入同步机制,防止亚稳态传播
异步FIFO、对于异步时钟通过异步复位同步释放(就是对异步复位时钟进行两次或者两次以上缓存。)
4 、改善时钟质量,用边沿变化快速的时钟信号
关键是器件使用比较好的工艺和时钟周期的裕量要大。
4、说说静态、动态时序模拟的优缺点
静态时序分析是采用穷尽分析方法来提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误.它不需要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少,不仅可以对芯片设计进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计,因此静态时序分析已经越来越多地被用到数字集成电路设计的验证中。
动态时序模拟就是通常的仿真,因为不可能产生完备的测试向量,覆盖门级网表中的每一条路径.因此在动态时序分析中,无法暴露一些路径上可能存在的时序问题;
静态时序分析缺点:
1、无法识别伪路径
2、不适合异步电路
3、不能验证功能
5、用VERILOG写一段代码,实现消除一个glitch。
毛刺为高则用与门,低就或门
(1)滤掉小于1个周期glitch的原理图如下:
module digital_filter_(clk_in,rst,host_rst,host_rst_filter);
input clk_in;
input rst;
input host_rst;
output host_rst_filter;
reg host_rst_d1;
reg host_rst_d2;
always@(posedge clk_in or negedge rst)
begin
if(!rst)
begin
host_rst_d1 <= 1'b1;
host_rst_d2 <= 1'b1;
end
else
begin
host_rst_d1 <= host_rst;
host_rst_d2 <= host_rst_d1;
end
end
assign host_rst_filter = host_rst_d1 | host_rst_d2;
endmodule
(2)滤掉大于1个周期且小于2个周期glitch的原理图如下:
module digital_filter_(clk_in,rst,host_rst,host_rst_filter);
input clk_in;
input rst;
input host_rst;
output host_rst_filter;
reg host_rst_d1;
reg host_rst_d2;
reg host_rst_d3;
always@(posedge clk_in or negedge rst)
begin
if(!rst)
begin
host_rst_d1 <= 1'b1;
host_rst_d2 <= 1'b1;
host_rst_d3 <= 1'b1;
end
else
begin
host_rst_d1 <= host_rst;
host_rst_d2 <= host_rst_d1;
host_rst_d3 <= host_rst_d2;
end
end
assign host_rst_filter = host_rst_d1 | host_rst_d2 | host_rst_d3;
endmodule
6、简述一下什么是单工、半双工、全双工通信,举个例
单工,只能发或者收数据
半双工,可以发也可以收,但是收发不能同时进行
全双工,可以发也可以收,收发可以同时进行
7、简述触发器和锁存器之间的差别
锁存器对电平信号敏感,在输入脉冲的电平作用下改变状态。
D触发器对时钟边沿敏感,检测到上升沿或下降沿触发瞬间改变状态。
8、计算最小周期
Tco:寄存器时钟输入到数据输出的时间
Tdata:寄存器间的走线延迟
Tsu :建立时间
Tskew:时钟偏斜
最小时钟周期:
Tmin = Tco + Tdata + Tsu - Tskew。最快频率Fmax = 1/Tmin
Tskew = Tclkd – Tclks。
9、时钟抖动和时钟偏移的概念及产生原因,如何避免?
时钟抖动jitter:指时钟信号的跳变沿不确定,故是时钟频率上的不一致。
时钟偏移Skew:指全局时钟产生的各个子时钟信号到达不同触发器的时间点不同,是时钟相位的不一致。
jitter主要受外界干扰引起,通过各种抗干扰手段可以避免。而skew由数字电路内部各路径布局布线长度和负载不同导致,利用全局时钟网络可尽量将其消除。
10、自己的外设和avalon的外设区别
Hps自己的外设是固核,不用也不可以拿来做其他的逻辑
Avalon外设是软核,不用的话逻辑资源可以拿来做其他的
11、什么是线与逻辑?在硬件电路上有什么要求?
线与逻辑是指两根线直接相连能够实现与的功能。在硬件上需要OC门,如果不采用OC门会会导致门电路管电流过大而烧坏逻辑门。用OC门实现线与,应在输出端口加一个上拉电阻。
知识点标记:OC门实际上只是一个NPN型三极管,并不输出某一特定电压值或电流值。OC门根据三极管基极所接的集成电路来决定(三极管发射极接地),通过三极管集电极,使其开路而输出。而输出设备若为场效应晶体管(MOSFET),则称之为漏极开路(英语:Open Drain,俗称“OD门”),工作原理相仿。通过OC门这一装置,能够让逻辑门输出端的直接并联使用。两个OC门的并联,可以实现逻辑与的关系,称为“线与”,但在输出端口应加一个上拉电阻与电源相连。
12、软核、硬核、固核是什么,各有什么特点
软核:综合之前的寄存器传输级(RTL) 模型,灵活性高、可移植性强,但预测性低有不确定风险
硬核:经过验证的设计版图,设计人员不能对其修改与软核实现方式相比,硬核可以把功耗降低5~10 倍, 节约将近90% 的逻辑资源
固核:带有平面规划信息的网表,通常以RTL 代码和对应具体工艺网表的混合形式提供。
固核的设计灵活性稍差,但在可靠性上有较大提高
13、异步FIFO深度计算
如果数据流连续不断则FIFO深度无论多少,只要读写时钟不同源同频则都会丢数;
FIFO用于缓冲块数据流,一般用在写快读慢时,
FIFO深度 / (写入速率 - 读出速率) = FIFO被填满时间 应大于 数据包传送时间= 数据量 / 写入速率
例:A/D采样率50MHz,dsp读A/D读的速率40MHz,要不丢失地将10万个采样数据送入DSP,在A/D在和DSP之间至少加多大容量(深度)的FIFO才行?
100,000 / 50MHz = 1/ 500 s = 2ms
(50MHz - 40MHz) * 1/500 = 20k既是FIFO深度。
14、给一段c语言程序代码,在fpga上面做加速,能从那些方面做提升,简述过程
1. 时间上的优化加速
2. C语言里面存在循环可以展开减少执行时间
3. 里面的变量使用ac数据类型,减少数据位宽优化面积和执行时间
4. 复杂的计算换成简单的计算,比如除以2换成右移1位
5. 函数参数接口使用avalon接口减少位宽,优化面积
6. 接口使用稳定参数优化寄存器级数减少时间
15、系统最高速度计算(最快时钟频率)和流水线设计思想:
同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间内处理的数据量就愈大。
假设Tco是触发器的输入数据被时钟打入到触发器到数据到达触发器输出端的延时时间(Tco=Tsetpup+Thold);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个时钟周期实现,因此系统的工作速度可以加快,吞吐量加大。注意,流水线设计会在原数据通路上加入延时,另外硬件面积也会稍有增加。
16、硬件工具使用
1、万用表、示波器、逻辑分析仪可以测量那些东西,用来测些什么?
万用表主要用来测试电压、电流、通断、电阻、电容等,缺点只能看有效值,不能看实时值示波器主要测量模拟信号实时值,如频率、周期、幅值等,缺点是通道较少没有协议解析
逻辑分析仪主要抓取多路通道的波形,解析编码协议,缺点是只能看数字信号,不能看模拟信号
2、万用表测量电压是什么电压,fpga 输出 50%的占空比的 pwm 波测出来是多少?
有效值,1.65v
3、示波器测量的电压是什么电压,fpga 通过 dac 输出正弦,测量出来是什么?
实时值,测量出来是一个幅值为 dac 基准电压的正弦信号
4、逻辑分析仪是以什么电压区分电平的,输入幅值 3v 的一个正弦信号,逻辑分析仪读取什么?
低端逻辑分析仪是以 ttl 电平,默认 0.7v 以下低电平,1.5v 以上高电平,中间保持
高端的逻辑分析仪有电平设置功能,自己设置高低电平的电压阈值
输入正弦信号软件中为方波
5、现有一个产品出现故障,没有任何输出现象,我们应该先测什么,用什么测
答:输入电源电压,所有芯片电压电压,万用表或者示波器
17、FPGA中可以综合实现为RAM/ROM/CAM的三种资源及其注意事项?
三种资源:BLOCK RAM,触发器(FF),查找表(LUT);
注意事项:
1:在生成RAM等存储单元时,应该首选BLOCK RAM 资源;其原因有二:第一:使用BLOCK RAM等资源,可以节约更多的FF和4-LUT等底层可编程单元。使用BLOCK RAM可以说是“不用白不用”,是最大程度发挥器件效能,节约成本的一种体现;第二:BLOCK RAM是一种可以配置的硬件结构,其可靠性和速度与用LUT和REGISTER构建的存储器更有优势。
2:弄清FPGA的硬件结构,合理使用BLOCK RAM资源;
3:分析BLOCK RAM容量,高效使用BLOCK RAM资源;
4:分布式RAM资源(DISTRIBUTE RAM)
查找表(look-up-table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4(V7和A7都是6输入)输入的LUT,所以每一个LUT可以看成一个有 4位地址线的16x1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
19、HDL语言的层次概念?
HDL语言是分层次的、类型的,最常用的层次概念有系统与标准级、功能模块级,行为级,寄存器传输级和门级。
系统级,算法级,RTL级(行为级),门级,开关级。
21、MOORE 与 MEELEY状态机的特征?
Mealy 状态机的输出不仅与当前状态值有关, 而且与当前输入值有关。
Moore 状态机的输出仅与当前状态值有关, 且只在时钟边沿到来时才会有状态变化。
22、FPGA内部结构及资源:
FPGA主要由可编程单元、可编程I/O单元及布线资源构成。
可编程逻辑单元(可配置逻辑单元,CLB)由两个SLICE构成,SLICE主要包括实现组合逻辑的LUT和实现时序逻辑的触发器。FPGA内部还包含专用存储单元BRAM,运算单元DSP Slice,及专用内嵌功能单元,如:PLL、Serdes等。
23、名词解释,写出下列缩写的中文(或者英文)含义:
FPGA :Field Programmable Gate Array 现场可编程门阵列
VHDL:( Very-High-Speed Integrated Circuit Hardware Description Language) 甚高速集成电路硬件描述语言
HDL :Hardware Description Language硬件描述语言
EDA:Electronic Design Automation 电子设计自动化
CPLD:Complex Programmable Logic Device 复杂可编程逻辑器件
PLD :Programmable Logic Device 可编程逻辑器件
GAL:generic array logic 通用阵列逻辑
LAB:Logic Array Block 逻辑阵列块
CLB :Configurable Logic Block 可配置逻辑模块
EAB: Embedded Array Block 嵌入式阵列块
SOPC: System-on-a-Programmable-Chip可编程片上系统
LUT :Look-Up Table 查找表
JTAG: Joint Test Action Group 联合测试行为组织
IP: Intellectual Property 知识产权
ASIC :Application Specific Integrated Circuits 专用集成电路
ISP :In System Programmable 在系统可编程
ICR :In Circuit Re-config 在电路可重构
RTL: Register Transfer Level 寄存器传输级
24、FPGA内部LUT实现组合逻辑的原理:
LUT相当于存放逻辑表达式对应真值表的RAM。软件将逻辑表达式所有可能结果列出后存放在RAM中,输入作为RAM地址,输出为逻辑运算结果。如使用LUT模拟二输入“与”逻辑。列出真值表:00 – 0,01 – 0,10 – 0,11 – 1。此时将00 01 10 11作为地址线,依次将结果0 0 0 1存放在RAM中。当输入00时及输出0&0=0.
25、 低功耗技术:
功耗可用公式描述:Power = KFCV^2,即功率等于常数系数工作频率负载电容值*电压的平方。
故从以下几个方面降低功耗方式:
a.控制工作频率:降低频率增大数据路径宽度,动态频率调整,门控时钟(时钟使能有效时钟才进入寄存器时钟输入引脚)
b.减少电容负载:使用几何尺寸更小的逻辑门,其电容负载较小,功率也随之减少。
c.降低工作电压:动态改变工作电压、零操作电压(直接关闭系统中一部分的电源)
27、异步串口校验位的奇、偶校验的原理
奇校验:让所有这个字节的数据中出现奇数个1,比如,1000110(0)则必须添0,
这样原来有3个1已经是奇数了,所以添上0之后1的个数保持为奇数
偶校验:让所有这个字节的数据中出现奇数个1,比如,1000110(1)则必须添1,
这样原来有3个1已经是奇数了。所以添上1之后1的个数保持为偶数。
26、FPGA详细设计流程(面试提问)
与数字IC设计流程类似,以xilinx vivado工具为例,主要有以下步骤:
系统设计、
RTL级设计、
RTL级仿真、
综合、
门级仿真、
布局布线、
时序仿真、
板级调试。
27、时序约束相关有哪几种时序路径:
input paths:外部引脚到内部寄存器
register-to-register paths:系统内部寄存器到寄存器路径
output paths:内部寄存器到外部引脚的路径
port to port paths:FPGA输入端口到输出端口路径(不常用)
28、创建时序约束的关键步骤:
baseline约束:create clocks define clocks interactions
I/O约束:set input and output delays
例外约束:set timing execptions(set_max_delay/set_min_delay、set_multicycle_path、set_false_path)
设计初期可先不加I/O约束,但baseline约束要尽早建立。