前言
有关FPGA的简答题
一、理论基础题一
1.1、FPGA和CPLD的区别?
FPGA和CPLD都是数字电路的可编程逻辑器件,它们的主要区别在于规模和灵活性。
FPGA(FieldProgrammable_GateArray是一种可编程逻辑器件,由大量的可编程逻辑单元(例如逻辑门、寄存器等)和可编程的互连资源(例如通道、开关、线缆等)组成。FPGA可实现复杂的数字电路设计,包括高速数据通信、图像处理、信号处理等。FPGA的规模较大,可以实现非常复杂的电路,但它的设计和实现需要较高的技术水平和成本。
CPLD(Complex Programmable Logic Device)则是一种较小规模的可编程逻辑器件。 CPLD通常由可编程逻辑单元和可编程互连资源组成,但规模相对较小,更适合于较简单的电路设计。CPLD的设计和实现相对简单,成本也较低。因此,FPGA适用于需要高速、高密度、高度定制的应用,而CPLD适用于较简单的电路设计,例如控制器、时序器等。
1.2、Latch 和 Register 区别?行为描述中 Latch 如何产生?
latch是电平触发,reg是边沿触发。时序设计中尽量使用reg触发。行为描述中,如果对应所有可能输入条件,有的输入没有对应明确的输出,系统会综合出latch。
1.3、什么是竞争和冒险,如何消除?
竞争:在组合逻辑电路中,门电路两个输入信号同时向相反的逻辑电平跳变(一个从1变为0,另一个从0变为1)的现象。
竞争-冒险:由于竞争而在电路输出端可能产生尖峰脉冲的现象。
三种消除竞争冒险的方式:①输出端接入滤波电容;②引入选通脉冲或者使用时序逻辑电路;③修改逻辑设计,增加冗余项。
1.4、bit, byte, word, dword, qword的区别?
①比特(bit):比特是计算机数据的最小单位,它表示一个二进制位,即0或1。比特用于表示数据的最基本的单元,例如一个开关状态或一个二进制位。
②字节(Byte):是8个比特组成的数据单位。
③字(Word):是处理器一次能处理的二进制位数,大小可以根据体系结构变化。
④双字(Dword):是32位数据单位,由4个字节组成。
⑤四字(Qword):是64位数据单位,由两个双子组成,即8个字节组成。
1.5、FPGA的内部结构组成?
LABs(逻辑阵列块):有多个逻辑单元(LEs)组成,每个逻辑单元由一个查找表和一个触发器组成。EP4CE6F17C8逻辑阵列块有16个LE。
IOB(可编程逻辑IO口):有输入(in)、输出(out)、输入输出(in_out)三种。
时钟资源:锁相环(PLL)——(1、使输出时钟走全局时钟网络;2、分频,倍频,相位偏移)。
嵌入式存储块——M9K。
DSP模块——高性能乘法、除法、累加运算。
1.6、什么是原码,反码,补码。以8bit为例,给出各自表示的数值范围?
原码:是最基本的有符号整数表示方式。在原码中,数值的最高位(最左边的位)表示符号位,0表示正数,1表示负数。其余位表示数值的大小。
反码:是在原码的基础上进行取反得到的表示方式。对于正数,反码与原码相同。而对于负数,反码是将原码中除符号位外的每一位取反(0变1,1变0)。
补码:是在反码的基础上加1得到的表示方式。对于正数,补码与原码相同。对于负数,补码是将反码中的每一位取反,并在最低位加1。
1.7、简述 FPGA 中查找表的原理与结构?
①查找表简称LUT,本质上就是一个RAM。目前FPGA中多数使用的是4输入的LUT,所以可以看成一个有4位地址线的RAM。
②当描述了一个逻辑电路以后,FPGA 开发软件会自动计算逻辑电路的所有可能结果,并把真值表(即结果)事先写入 RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
1.8、简述有限状态机 FSM 分为哪两类?有何区别?有限状态机的状态编码风格主要有哪三种?FSM 的三段式描述风格中,三段分别描述什么?
(1)有限状态机 FSM 分为 Moore 型和 Mealy 型,
Moore 型:输出状态只和当前状态有关。
Mealy 型:输出状态不仅和当前状态有关还和输入状态有关;
(2)有限状态机常用的状态编码风格主要有:二进制编码、独热码、格雷码。
(3)FSM 的三段式描述风格中,三段分别描述:
第一段–时序逻辑–描述状态转移
第二段–组合逻辑–描述状态转移规律
第三段–组合/时序逻辑均可–描述输出
二、理论基础题二
2.1、简述建立时间和保持时间的概念?
建立时间(setup time):触发器在时钟上升沿到来之前,数据输入端的数据必须保持不变的最小时间。
保持时间(hold time):触发器在时钟上升沿到来之后,数据输入端的数据必须保持不变的最小时间。
2.2、亚稳态的概念?产生的原因?如何防止亚稳态?
亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。
产生原因:在异步系统中,寄存器建立时间、保持时间不满足引起亚稳态。
解决方法:
1 降低系统时钟频率(扩大系统时钟周期)
2 用反应更快的 FF(flip-flop触发器)
3 引入同步机制(采用加两级触发器)。
2.3、reg 和 wire 的区别?
reg是寄存器类型可以存储数据,wire是线网型;
reg型在 always块和 initial块中赋值,wire 型用 assign 赋值;
reg型可用于时序逻辑和组合逻辑赋值,wire型只能用于组合逻辑赋值;
wire表示直通,即只要输入有变化,输出马上出现结果,reg表示一定要有触发,输出才会反映输入。
2.4、FPGA 芯片内有哪两种存储器资源?
块RAM(BLOCK RAM):由存储块构成,不占逻辑资源
分布式RAM:由查找表配置成的内部存储器,占逻辑资源
2.5、时钟抖动和时钟偏移各自的概念?
时钟抖动:时钟“频率”上的不一致。时钟周期发生暂时性变化,导致时钟边沿来的早或者晚。和晶振或者PLL内部电路有关,与布线无关。
时钟偏移:时钟“相位”上的不一致。由于不同的布线长度导致同一个时钟信号到达相邻触发器的时间不一致。
2.6、简述同步复位和异步复位的区别?
同步复位:复位信号只有在时钟上升沿到来时,才能有效。
异步复位:无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。
三、理论基础题三
3.1、为什么触发器要满足建立时间和保持时间?
因为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,导致输出将不稳定。
3.2、对于多位的异步信号如何进行同步?
对于一位的异步信号可以使用“一位同步器进行同步”(使用两级触发器)
对于多位的异步信号,可以采用如下方法:
1:异步 FIFO
2:采用保持寄存器加握手信号的方法
3:特殊的具体应用电路结构,根据应用的不同而不同
3.3、流水线的设计方法和作用?
方法:如果某个信号可以分为若干步骤处理,而且整个数据处理过程是单项的,即没有反馈运算和迭代运算,前一个步骤的输出就是下一个步骤的输入,可以考虑流水线设计来提高系统的频率。流水线设计就是将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法。
作用:将一个大操作分解成若干的小操作,每一步小操作的时间较小,所以能提高频率,各小操作能并行执行,所以能提高数据吞吐率(提高处理速度)。
3.4、什么是总线,有什么特点?
在 FPGA 中,总线(Bus)通常指的是一组物理连接,用于在 FPGA 内部或 FPGA 与外部设备之间传输数据或控制信号。
特点主要包括:
1.并行传输:FPGA 中的总线通常采用并行传输方式,即同时传输多个二进制信号,以实现高速数据传输。
2.多设备共享:FPGA 中的总线可以连接多个设备,这些设备可以共享同一个总线,以实现设备之间的通信和数据交换。
3.时序控制:FPGA 中的总线通常需要满足一定的时序要求,需要进行合理的时序控制,以确保总线的稳定性和正确性。
4.资源共享:FPGA 中的总线可以实现资源共享,即多个模块可以使用同一个总线进行数据传输,从而减少硬件资源的使用,提高资源利用率。
5.可编程性:FPGA 中的总线具有很高的可编程性,可以根据不同的应用需求进行设计和实现,以适应不同的硬件环境和应用场景。
3.5、什么是高阻态?
高阻态这是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。
3.6、FPGA 基本设计流程?
原理图/HDL文本输入→ 功能仿真 →综合→适配→时序仿真→编程下载→硬件测试。
四、理论基础题四
4.1、串行接口和并行接口的区别?
串行接口是数据线一根线,通过串行协议传输数据,比如 UART、IIC、SPI
并行接口是一个数据在多根数据线并行传输,比如 RGB888。
4.2、时序设计的实质?
满足每一个触发器的建立/保持时间。
4.3、解释一下什么是 UART?
UART是通用异步收发器的英文缩写,俗称串口。作为常用的三大低速总线(UART、SPI、IIC)之一,在设计众多通信接口和调试时占有重要地位。
物理层:信号引脚主要有2种,发送端TXD和接收端RXD。使用的通信方式为异步通信。通信方向为全双工。
通信协议:数据格式和数据速率。
数据格式:空闲为高电平,起始位是低电平,之后是6-8位的数据位,之后是一位校验位和停止位,停止位。
数据速率:波特率:9600、19200、38400、57600、115200bit/s。
4.4、波特率与比特率的区别?
比特率:每秒传输多少个比特(二进制数)
波特率:每秒传输多少个码元(可以用一个二进制数表示一个码元,也可以用一个多进制数来表示一个码元)
4.5、格雷码的作用
相邻的两个二进制之间可能有多个bit位同时进行跳变,在电路逻辑上的表现就是输入的两个信号同时向相反的逻辑电平进行跳变,也就是竞争现象,由于竞争会导致电路出现竞争冒险,输出端会产生毛刺,进而影响后续电路的运行。而采用格雷码(相邻两个格雷码只有一个bit位发生变化)可以消除这种毛刺。格雷码属于一种可靠性编码,是一种错误最小化的编码方式。
定义:在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。
特点:格雷码是一种具有反射特性和循环特性的单步自补码
1、反射和自补特性使得对其进行求反操作也非常方便
2、循环和单步特性消除了随机取数时出现重大错误的可能
4.6、FPGA与单片机的区别是什么?
五、理论基础题五
5.1、同步电路和异步电路的区别?
同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。
异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,只有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。
5.2、localparam、parameter 和defparam 的区别?
localparam只能在该文件中使用,无法进行参数传递。
parameter 用于定义一个常量,可以在实例化中进行参数传递。
defparam用来修改parameter中定义的常量。
5.3、HDL语言的层次概念?
系统级,功能级/算法级,行为级,RTL 级(寄存器传输级),门级,开关级
5.4、FPGA设计中如何实现同步时序电路的延时?
对于比较大的和特殊要求的延时,一般通过高速时钟产生计数器,通过计数器来控制延时;
对于比较小的延时,可以通过触发器打一拍,不过这样只能延迟一个时钟周期。
5.5、Quartus编译器编译FPGA工程最终生产两种不同用途的文件?
sof和pof.
sof是 SRAM Object下载到FPGA中,断电丢失。
pof是 Programmer Object下载到配置芯片中,上电重新配置。
六、理论基础题六
6.1、SRAM、DRAM、ROM、EEPROM、DDR、FLASH的区别?
SRAM (Static Random-Access Memory):SRAM是一种静态随机存取存储器,它用于高速缓存和寄存器等需要快速存取的应用。SRAM的数据存储是基于触发器的,它不需要刷新操作,读写速度快,但相对较昂贵,容量较小。
DRAM (Dynamic Random-Access Memory):DRAM是一种动态随机存取存储器,它用于主存储器等大容量存储需求的应用。DRAM的数据存储是基于电容的,需要定期刷新操作来保持数据的有效性。DRAM相对便宜,但读写速度较慢。
ROM (Read-Only Memory):ROM是一种只读存储器,其中存储的数据在制造过程中被编程,并且在正常操作期间无法被修改。ROM用于存储固定的程序代码和数据,例如启动程序和固件等。
EEPROM (Electrically Erasable Programmable Read-Only Memory):EEPROM是一种电可擦除可编程只读存储器,它可以通过电信号擦除和重新编程。与ROM不同,EEPROM可以被多次擦除和编程,因此它常用于存储需要经常更新的数据,例如BIOS设置和用户数据等。
DDR (Double Data Rate):DDR是一种内存技术标准,用于提高DRAM的数据传输速率。DDR内存在每个时钟周期内能进行两次数据传输,相比于传统的SDR (Single Data Rate)内存,DDR内存具有更高的带宽和性能。
FLASH:FLASH是一种非易失性存储器,类似于EEPROM,但它可以同时擦除存储块中的大量数据。FLASH存储器通常用于存储固件、操作系统和用户数据等。它的特点是擦写速度较慢,但具有较大的存储密度和较低的成本。
总结:
SRAM和DRAM是不同类型的随机存取存储器,SRAM适用于高速缓存和寄存器等需要快速访问的场景,而DRAM适用于主存储器等大容量存储需求的场景。
ROM是只读存储器,其中的数据在制造过程中被编程,无法修改。
EEPROM是电可擦除可编程只读存储器,可以多次擦除和编程,用于存储需要经常更新的数据。
DDR是一种内存技术标准,用于提高DRAM的数据传输速率。
FLASH是一种非易失性存储器,擦写速度较慢,但具有较大的存储密度和较低的成本,常用于存储固件和用户数据。
6.2、时序约束的概念和基本策略?
时序约束(Timing constraints)是在数字电路设计中使用的一种技术,用于确保电路的时序性能符合设计要求。时序约束定义了各种信号之间的时间关系,包括时钟周期、延迟、时序路径等,以保证电路在正确的时间窗口内响应和传输数据。
周期约束、偏移约束、静态时序路径约束和附加约束是在电子设计自动化(EDA)中常用的约束类型,用于确保设计在实际实现中满足特定的时序要求和功能需求。
周期约束(Timing Constraints):周期约束用于定义时钟信号的频率和时序要求。它指定了时钟周期的最小或最大时间限制,以确保数据在时钟边沿之间正确传输。周期约束还可以包括设置时钟占空比(duty cycle)和时钟延迟等详细要求。
偏移约束(Delay Constraints):偏移约束用于定义数据路径上的延迟要求。它指定从输入到输出的最大或最小传播延迟限制,以确保数据在正确的时间到达目标。偏移约束可以应用于时序路径,以确保数据在特定的时钟边沿之前或之后到达。
静态时序路径约束(Static Timing Path Constraints):静态时序路径约束用于定义数据路径中的最大延迟和最小延迟。它指定了信号从一个设计元素(如寄存器或逻辑门)到另一个设计元素的传播延迟限制。静态时序路径约束通常用于时序分析和优化,以确保设计在特定的时钟频率下能够满足时序要求。
附加约束(Additional Constraints):附加约束是一种自定义的约束类型,用于满足特定的功能
要求或设计约束。它可以包括电源和地连接规则、时钟域划分规则、引脚分配规则、时钟和数据相关性规则等。附加约束通常是根据设计规范、硬件平台或特定的应用需求定义的。
6.3、i2c总线上为什么要用上拉电阻?
通过在SDA和SCL上分别连接上拉电阻,可以确保在空闲状态下信号线维持高电平。因此,通过使用上拉电阻,可以确保I2C总线上的信号线在空闲状态下保持高电平,提供稳定的通信环境,避免信号干扰和通信错误。
6.4、收发数据的时候,LSB MSB是什么意思?
LSB(Least Significant Bit)表示低位先发。
MSB(Most Significant Bit)表示高位先发。
6.5、异步串口校验位的奇、偶校验的原理?
奇校验:数据位和校验位中“1”的个数为奇数个。
偶检验:数据位和校验位中“1”的个数为偶数个。
七、理论基础题七
7.1、UART、IIC、SPI 三大协议的区别?
7.2、简单说明FIFO 和RAM 的异同?
FIFO : 先入先出,先进去的数据先出来。
RAM : 读出的数据顺序跟写入数据顺序不一致,可以向 RAM 中的任意位置写入数据,也可以读取任意的位置的数据。
7.3、相对ARM、DSP 等处理器,谈谈FPGA 具有哪些优势?
ARM 和 DSP 都是处理器,需要软件代码在其中运行才能工作,也就是我们常说的CPU,只有 CPU 而没有程序,这个系统是不能工作的。而程序是顺序执行的,所以 ARM和 DSP 的工作速度是不可能太快的。而 FPGA 是个纯硬件,内部没有代码,一旦完成配置(只需要在上电时配置一次),就可以快速工作,内部各个模块之间没有顺序问题,是同时工作的,所以工作速度可以很快。
因此,FPGA 常用于要求工作速度快,而 ARM 或者 DSP 在工作速度上满足不了应用需求的场合。具备 1.设计灵活 2.兼容性强 3.适用性强等优势
7.4、 格雷码与二进制码之间的相互转换?
7.5、IP 核中的RAM 分为哪几类?他们之间有什么不同?
单端口 RAM 和双端口 RAM,其中双端口 RAM 又分为简单双端口 RAM 和真正双端口 RAM。
对于单端口 RAM,读写操作共用一组地址线,读写操作不能同时进行;
对于简单双端口 RAM,读操作和写操作有专用地址端口(一个读端口和一个写端口),即写端口只能写不能读,而读端口只能读不能写;
对于真正双端口 RAM,有两个地址端口用于读写操作(两个读/写端口),即两个端口都可以进行读写。
八、理论基础题八
8.1、串口根据电气标准大致可分为哪些?各自之间的区别?
RS-232(Recommended Standard 232):RS-232是最早出现的串口标准之一,常用于连接计算机和外部设备。它使用正负电平表示数据,具有较长的传输距离和较低的传输速率。RS-232串口通常使用DB-25或DB-9连接器。
RS-422(Recommended Standard 422):RS-422是一种差分信号传输的串口标准,常用于需要较长传输距离和高抗干扰性能的应用。RS-422可以支持多点通信,具有较高的传输速率和更好的噪声抑制能力。RS-422串口通常使用DB-25连接器。
RS-485(Recommended Standard 485):RS-485也是一种差分信号传输的串口标准,与
RS-422类似,但支持更高的传输速率。RS-485同样适用于多点通信,并具有更好的抗干扰性能。RS-485串口通常使用DB-9或RJ-45连接器。
电气特性:RS-232使用单端信号传输,而RS-422和RS-485使用差分信号传输,差分信号具有更好的抗干扰性能和传输距离。
传输距离:RS-232的传输距离较短,通常在50英尺(15米)左右,而RS-422和RS-485可以达到数千英尺(数百米/1200米)的传输距离。
传输速率:RS-232通常支持较低的传输速率,最高可达115.2 kbps,而RS-422和RS-485可以支持更高的传输速率,最高可达10 Mbps或更高。
连接器类型:RS-232通常使用DB-25或DB-9连接器,而RS-422和RS-485可以使用DB-25、 DB-9或RJ-45连接器。
8.2、在FPGA设计中,跨时钟域同步一般有哪些方法?具体是如何操作的?
一般解决跨时钟域有以下几种方法:
(1)多级寄存,一般针对单bit控制信号跨越两个异步时钟域传输,可以采用多级寄存器。
(2)异步FIFO/RAM缓存,一般用于跨时钟域传输数据,写端和读端分别对应两个时钟域,由空/满信号控制读写过程,实现数据的跨域传输。
(3)握手信号。
8.3、简述IIC总线的通信机制(总线结构、通信协议等相关概念)?
IIC(I2C,Inter-Integrated Circuit)即集成电路总线,是一种两线式串行总线,由数据线SDA和时钟线SCL构成通信线路,既可用于发送数据,也可接收数据,是一种半双工通信协议。总线上的主设备与从设备之间以字节(8 位)为单位进行双向的数据传输。总线上的每一个设备都可以作为主设备或从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件数据手册得知),主从设备之间就是通过这个地址来确定与哪个器件进行通信。
通信协议:
空闲状态:I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
起始信号:在SCL保持高电平期间,SDA的电平被拉低,称为 I2C 总线总线的起始信号,标志着一次数据传输开始。起始信号由主机主动建立的,在建立该信号之前 I2C总线必须处于空闲状态。
数据传输:在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL
串行时钟的配合下,在 SDA上逐位地串行传送每一位数据。进行数据传送时,在 SCL 的高电平期间, SDA 上的电平必须保持稳定,只有在 SCL为低电平期间,才允许 SDA上的电平改变状态。即数据在SCL的上升沿到来之前就必须准备好,并在在下降沿到来之前必须保持稳定。
应答信号:I2C总线上的所有数据都是以字节传送的,发送端每发送一个字节,就必须在第9个SCL脉冲期间释放SDA,由接收端反馈一个应答信号。应答信号为低电平时,称为有效应答位(ACK),表示接收端成功接收了该字节;应答信号为高电平时,称为非应答位(NACK),表示接收端接收该字节失败。
停止信号:在SCL保持高电平期间,SDA被释放,返回高电平,称为I2C总线的停止信号,标志着一次数据传输的终止。停止信号由主机主动建立的,建立该信号之后,I2C总线将返回空闲状态。
8.4、学习中使用到的eeprom/flash的器件名分别是什么?各自的存储容量是多少?具体如何构成?
EEPROM:24LC04B;
容量:4 kbit ;256 x 8 x 2 = 4096 bit 。
FLASH:M25P16。
总容量为16Mbit(2M*8);
总共有32个扇区,每个扇区256页,每页256个字节。
32x256x256=2097152=2M字节。
总结
未完待续