常见问题
问题1:同步复位和异步复位的优缺点
同步复位 优点:能确保电路是100%的; 同步复位可以综合处更小的触发器; 可以保证复位只发生在有效时钟边沿,过滤掉复位信号毛刺; 内部逻辑产生的复位信号,采用同步复位可以有效过滤掉毛刺。 缺点: 当复位信号宽度小于时钟周期时,可能需要一个脉冲展宽器,使得复位信号在时钟边沿能被正确采样; 当复位信号有外部逻辑组合产生,那么复位信号可能容易受外部信号控制; 在采用门控时钟的设计中,复位信号有效是时钟可能处于关闭状态,复位无效; 异步复位 优点:很多EDA工具带有异步复位的库文件,能保证数据路径上是干净的,减小延迟; 复位信号独立于时钟,只要复位信号发起,电路立即复位; 综合工具能很好的识别出复位信号; 缺点:对毛刺敏感; 若复位刚好在时钟边沿撤销,很容易使寄存器的输出产生亚稳态。
问题2:什么是竞争和冒险,如何消除?
信号由于经由不同路径传输达到某一汇合点的时间有先有后的现象,就称之为竞争,由于竞争现象所引起的电路输出发生瞬间错误的现象,就称之为冒险。设计中最简单的避免方法是尽量使用时序逻辑同步输入和输出。
问题3:什么是同步电路,什么是异步电路?
同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。在电路中同一个时钟源的时钟分频出来的不同频率的时钟作用于两部分电路,这两部分电路也是同步的。反之,不同时钟源的电路就是异步电路。
问题4:什么是亚稳态,产生的原因,如何消除?
亚稳态:是指触发器无法在规定时间内达到一定的状态,此时则会出现亚稳态现象。原因:由于触发器的Tsu和Th不满足,当触发器进入亚稳态,使得无法预测该单元的输出,这种不稳定是会沿信号通道的各个触发器级联传播。消除方法:两级或者多级寄存器同步。但是理论上不能完全消除,可以降低。
问题5:AXI协议(只问到outstanding)
outstanding就是发出去的地址数量,未处理的地址可以先存放在AXI总线的缓存里。等完成一次传输的事务后,无需再握手传输地址,即可进行下一次数据传输,所以axi的outstanding的本质上是为了实现数据传输的pipeline
问题6:从A时钟域到B时钟域,用通常的打两拍来做同步,这两个时钟域的时钟要满足什么样的条件?
在慢时钟域到块时钟域的单bit信号,我们直接打两拍即可进行传输。但是在快时钟到慢时钟进行传输的时候,如果传输的是脉冲信号,那么直接打拍传输的话就很有可能会导致一些脉冲信号没法采集到,从而丢失数据
问题7:FPGA项目中你是怎么时序优化的
首先查看时序报告,对于复位信号处理解决方法通常有:
(1)Set false path 因为本身复位没有办法保证到达每一个寄存器保证延迟一致时序不出现违例,这里约束是忽略对此路径的时序分析。
(2)Set multi cycle 约束我们的建立时间或者保持时间余量大于 1 个时钟周期。对于外部输入信号,尽量采用时钟和数据中心对齐的方式,然后对输入信号进行input delay约束,输出信号进行output delay约束。对于IP自动生成的信号,则可不必进行约束,因为IP已经自动帮我们约束好了。当我们完成综合后进入布局布线流程,可以通过 vivado 工具选择不同的布局布线方案,选择不同的约束优化方案对我们的设计会有不同方向的优化作用。最后处理一些时序问题还可以插入流水寄存器。
问题8:你了解multicycle吗
两级寄存器之间有复杂的组合逻辑,比如与或非等等组合逻辑运算,这样此处的组合逻辑延迟可能超过一个时钟周期,按照两级 寄存器的时序分析原理,这里一定会报时序错误,但是有时候我们采集此信号未必需要在发射沿的下一个时钟周期采样,我们可能需要经过多个时钟周期采集数据,这就是multicycle。
问题9:同步复位和异步复位的区别,异步复位同步释放又是什么?
同步复位:同步复位只有在时钟沿到来时复位信号才起作用,则复位信号持续的时间应该超过一个时钟周期才能保证系统复位。异步复位:异步复位只要有复位信号系统马上复位,因此异步复位抗干扰能力差,有些噪声也能使系统复位,因此有时候显得不够稳定,要想设计一个好的复位最好使用异步复位同步释放。异步复位同步释放:所谓异步复位,同步释放就是在复位信号到来 的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。
问题10:你了解过PCIE吗?
了解过。
(1)计算机通信平台中 ,PCI Express体系结构代表作高性能的外围组件互联方法。
(2)由PCI 和PCI-X 体系结构演变而来architectures。
(3)PCI Express 以一种串行的点对点的方式互联两个设备。
(3)信息传输基于数据包协议实现。
(4)PCI Express 互联中可实现单通道或多通道的数据传输。
(5)PCI Express 协议目前已经发布4个版本,分别是PCIE1.0到PCIE4.0
问题11:异步FIFO怎么设计?
异步FIFO的设计主要有5部分组成。(1)双口 RAM 存储数据。(2)同步读数据指针到写时钟域。(3)同步写数据指针到读时钟域。(4)处理写指针和满信号的逻辑。(5)处理读指针和空信号的逻辑。
问题12:什么叫数字IC?
IC 就是半导体元件产品的统称,IC 按功能可分为:数字 IC、模拟 IC、微波 IC 及其他 IC。数字 IC 就是传递、加工、处理数字信号的 IC,是近年来应用最广、发展最快的 IC 品种,可分为通用数字 IC 和专用数字 IC。通用 IC:是指那些用户多、使用领域广泛、标准型的电路,如存储器(DRAM)、微处理器 (MPU)及微控制器(MCU)等,反映了数字 IC 的现状和水平。专用 IC(ASIC):是指为特定的用户、某种专门或特别的用途而设计的电路。
问题13:reg和wire的区别,reg定义的变量一定是寄存器吗?
(1)reg是寄存器类型可以存储数据,wire是线网型。
(2)reg型在always块和initial块中赋值,wire型用assign赋值。
(3)reg型可用于时序逻辑和组合逻辑赋值,wire型只能用于组合逻辑赋值。所以reg定义的变量不一定是寄存器。
问题14:什么是建立时间,什么是保持时间?
建立时间Tsu(setup):触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的最小时间。保持时间Th(hold):触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的最小时间。
问题15:IC设计的流程
算法设计 芯片架构定义 RTL描述 功能验证:使用UVM或者FPGA原型验证对功能进行验证 综合:将RTL映射到基本逻辑单元 DFT:可测试性设计 等价性检查:使用形式验证技术,是指从数学上完备地证明或验证电路的实现方案是否确实实现了电路设计所描述的功能.以检查设计的RTL和门级网表描述是否代表相同的设计 STA:静态时序分析,分析设计是否达到目标频率 布局规划(floor plan): CTS:时钟树综合均匀分配时钟,减少不同部分之间的时钟偏移 布局布线(place & route):保证没有太多的内部交互,避免布线上的拥塞 寄生参数提取:用于post_layout仿真 DRC:设计规则检查 LVS:布线图和原理图比较 STA:静态时序分析 GDSII:foudary需要的文件 整个过程称为RTL2GDS,用GDSII生产芯片叫做流片(tapout )
问题16:为什么要采用同步复位异步释放的方式(性能,效率)
异步复位中最严重的问题是,如果异步复位信号在触发器时钟有效沿附近“释放” (复位信号从有效变为无效)的话,可能会导致触发器输出的亚稳态;而同步复位可能存在问题是复 是复位信号必须保持有效电平大于一个时钟周期,才能被正确采样从而复位成功。因此采用 异步复位同步释放的方式来规避上述两种缺点。不管是第一级触发器还是第二级触发器发生亚稳态, 最后输出的复位信号都是稳定的,复位更加安全。但是由于同步触发器的引入,增加了资源,也可能存在复位从有效变到无效的时间延后,增加实际复位的时间。
问题17:parameter 和 define ,local parame 的区别
parameter:在同一module内定义有效,可用于参数传递;在模块内部定义时无法进行参数传递。 define:可以跨模块的定义,写在模块名称上面,在整个设计工程都有效。一旦‘define指令被编译,其在整个编译过程中都有效。例如,通过另一个文件中的`define指令,定义的常量可以被其他文件中被调用。直到遇到 ‘undef; localparam:同一module内有效的定义,不可用于参数传递;
问题18:亚稳态的解决方法
亚稳态:指触发器无法在一定时间内达到稳定状态的现象. 原因:由于触发器的Tsu和Thd不满足,当触发器进入亚稳态,使得输出一个不确定的状态,会沿着信号通路上的触发器传播下去. 解决方法: 1. 降低系统时钟 2 .用反应更快的FF 3.引入同步机制,防止亚稳态传播 4. 改善时钟质量,用边沿变化快速的时钟信号
问题19:跨时钟域怎么解决(单多bit)
单bit跨时钟域处理
慢到快:两级触发器同步
快到慢:开环结绳法、闭环结绳法;握手
多bit跨时钟域 DMUX、异步fifo、握手、格雷码+双D触发器
问题20:flash cache DRAM SDRAM谁速度快,谁容量大
flash是指闪存,是非易失存储器,断电可长期保存,容量大,速度慢,价格低; cache是指缓存,一般采用静态随机存储器即sram作为缓存,速度快,容量小,价格高; DRAM动态随机存储器,是易失性存储器,容量较大,速度比sram慢,一般用作主存; SDRAM是指同步动态随机存储器,容量比SRAM大,一般用于嵌入式设备内存; 速度:cache>SDRAM>DRAM>Flash 容量:SDRAM、DRAM>flash>cache
问题21:低功耗方法;
系统级:合理的软硬件划分;低功耗软件;选择合适的处理器
体系结构级:高级门控时钟;动态电压域调节;基于缓存的体系结构;对数FFT结构;异步设计;电源门控;多阈值电压;多电压域供电存储电源门控。
寄存器传输级:状态机编码采用格雷码或独热码;二进制表示;门控时钟;独热码多路器;除掉多余转换;资源共享;使用行波计数器;总线反转;高活跃度网络;启用和禁用逻辑云。
晶体管级:更高的工艺;版图优化;衬底偏压;减少氧化层厚度;多氧化器件;利用定制设计减小电容。
问题22:risc-v指令的特点
risc-v指令的特点: 1.指令按模块划分,根据实际应用场景选择需要的模块,以使得面积最优化; 2.支持指令扩展; 3.易实现性:指令非常规整,不同指令的通用字段位置改动较小,使得译码模块的设计变得简便;支持压缩指令,在极低功耗场景的应用有着重要作用;仅仅支持小端模式,降低了设计难度;采用静态分支预测与简单的分支跳转;取消一条访存指令访问多次存储器,一条访存指令只访问一次存储器等
问题23:分支预测是什么、有哪些方法
分支预测是指当处理器在执行分支指令前,对即将要跳转的指令地址与跳转方向进行预测的方法,从而减少流水线空转。 分支预测方法可以分为静态分支预测和动态分支预测两种。静态分支预测有分支预测成功、分支预测失败、使用分支延迟槽、BTFN;动态分支预测有一bit饱和计数器、两bit饱和计数器、一级预测器、两级预测器等。
问题24:TCM和cache应用场景的区别,如果用一个dma搬运数据到cache会不会解决内存空间的问题
TCM应用于一些对实时性要求要高的场景,容量一般比较小,可直接地址访问。而DMA直接操作总线地址,用于需要搬运大量数据的场景。对于cache容量的较小的问题,采用专门的映射规则或有与主存进行数据的查找与替换,提升缓存的性能。DMA工作是不受CPU控制的,若将DMA用于将数据搬运到缓存,出现缓存不一致的概率将更大,造成系统混乱。此外DMA对存储器操作后,也会产生一致性问题,还需要专门解决由于DMA造成的缓存一致性问题。
问题25:什么是cache一致性
由于主存的速度与cpu速度差异较大,所以引入了缓存。缓存通过一定的规则将内存的数据映射到其中。当cpu对缓存中的数据进行修改时,而内存中的数据没有被修改,就造成了相同的块数据不一致。
Cache一致性问题,主要是指由于某些操作导致Cache和内存(如DDR)之间的数据不一致,且我们无法正确取到最新的数据。 正常情况下,Cache控制器有一套完善协议去保证我们对内存读写操作的正确性。但在某些复杂场景下,会发生cache一致性问题,此问题常发生在多核之间或使用DMA进行数据搬运前后。
问题26:指令乱序是出现在什么情况下是,怎么实现的
在cpu执行指令时,若出现结构冒险、分支冒险、数据冒险等指令相关性,则可能需要暂停流水线导致后续指令无法继续执行。而流水线暂停会影响cpu运行最高频率,因此在遇到这类情况时希望后续或其他指令能继续执行。为了能够让指令能乱序执行,一般会对指令进行调度来消除指令之间的相关性,方法有如前递法,循环展开法、寄存器重命名、Tomasolo、记分牌等方法。
问题27:在AXI中如果2个master和4个slave,master的ID有3位,那么转换到slave后ID变成几位
在AXI中,多主多从通信通常会有由AXI intonector来进行仲裁或转发,然后对不同主机发送的数据加以标记,让从机能判断出数据的来源。由于AXI支持乱序传输,在从机端不同主机的事务可以乱序接收,而相同主机的不同ID可以乱序发送,相同主机的相同ID数据需顺序接收。而在主机端, interconnect需要保证不同slave的相ARID的事务顺序返回,主机接口处相同ARID必须以主机发起的地址顺序到达,而不同的ARID可以无顺序限制。因此通过interconnect还需增添1位来区分主机。
问题28:在同步设计中,FIFO对前后级的握手信号如何产生?
答案:只要FIFO没满,就可以一直收数据,即对上级的应答信号ready一直拉高,FIFO不为空,就可以一直向下级发送数据 ,即数据发送信号valid一直拉高。 解析:此题是笔者再面试DJI数字前端设计中主管面时被问到的一个问题,在IP设计中,同步FIFO是经常被使用的,此时的FIFO模块的端口常常是包含上下级握手信号的接口,正确的产生握手信号是很关键的。此题在项目中是经常会遇到的,对有项目经验的人来说,难度较低,重点考察的知识点为FIFO设计&握手信号设计,笔者认为这两点是ip设计中基础且关键的点。
问题29:为什么异步fifo可以进行跨时钟域处理
1.异步fifo中使用了存储器RAM能将两个时钟域的时序路径隔开。
2.在异步fifo的读写控制中,引入了格雷码同步。由于格雷码相邻两个码之间只有一位发生变化,因此在指针跨时钟域传递时如果发生亚稳态,指针要么是变化后的地址,要么是与同步前的指针保持一致。因此这不会引起fifo的功能紊乱,只是影响了其读写效率。
问题30:跨时钟域传输方式有哪些?
答案:单比特信号
①快时钟域到慢时钟域可能存在信号变化过快,慢时钟域采不到的情况,需要先对跨时钟域信号做电平展宽,在慢时钟域下同步展宽信号生成需要的脉冲信号,最后需要在快时钟域下同步脉冲信号,用于拉低电平信号。
②慢时钟域到快时钟域 一般直接经过两级触发器即可,其原理是即使第一级触发器采到的值是亚稳态,经过一个周期的恢复时间(相对亚稳态来说,时间很长),第二级触发器采到的值极大概率是稳定的,需要注意的是,打两拍的方式只能大概率保证传输的值是稳定的,但不一定是正确的,因为当信号处于亚稳态后,经过一段时间恢复可能恢复到0,也可能恢复到1,注意在同步之前需要保证传输信号是寄存器信号。
多比特信号 :多采用异步FIFO和握手信号。异步FIFO适用于对传输速度要求比较高的系统,握手信号适合于对对传输速度要求慢一点的系统。 需要注意的是,当传输信号连续变化,且从慢时钟域到快时钟域时,此时并不完全需要用异步FIFO进行传输,可直接将信号进行格雷码转换(确保信号在传输时,相邻变化信号只有某一bit发生翻转,大大降低亚稳态的概率)并同步,在快时钟域将格雷码转换成二进制即可。
解析:跨时钟传输基本上是每个企业必问的一道题,其中包含的知识点很多,具有很强的延展性。切莫勿记八股,理解着记才更加深刻。
问题31:跨时钟域处理时对单bit信号有什么要求
- 源时钟域与目的时钟域之间不能有组合逻辑,组合逻辑各个路径的信号之间有延迟,导致运算后可能会出现毛刺。若时钟上升沿刚好在毛刺时刻采样,造成采样错误。 2.数据使能信号在跨时钟域前,也需要进行同步处理。 3.快时钟域到慢时钟域同步时,可能会由于脉冲过窄,导致慢时钟域没办法正确采样,导致信号丢失。因此在做慢时钟域到快时钟(快到慢的时候)域的同步时,需要保证信号宽度是慢时钟域周期的1.5倍,或者在同步前做脉冲展宽。
问题32:解释一下建立时间,保持时间,不满足时会发生什么?
答案:建立时间:时钟有效沿到来之前,输入数据必须保持有效的时间; 保持时间:时钟有效沿到来之后,输入数据仍然保持有效的时间。 建立时间和保持时间常出现在时序逻辑中,当不满足时,信号传输会出现亚稳态,如果不及时 消除亚稳态,会级级传递下去,导致电路功能出错。 当建立时间不满足时,也就是两级寄存器之间的组合逻辑路径过长,可以通过加流水线的方式拆分组合逻辑路径,也可以降低时钟频率,或者在时钟路径上加buffer的方式改善(可能会造成后端时钟树设计复杂),或者更换器件库; 当保持时间不满足时,可通过在两级寄存器之间的组合路径上加buffer的方式,也可通过更换器件库。
问题33:csic和risc-v的区别
CISC:
1.一条指令通常可以执行数个操作
2.指令功能复杂,指令格式、寻址方式多,指令数目庞大;
3.绝大多数指令需多个机器周期完成;
4.多数指令都可访问存储器;
5.采用微码控制;
6.只有少量的专用寄存器
7.生成高效的目标代码程序难以靠编译技术; 在CISC指令集中大约有20%的指令会被反复使用,占整个程序代码的80%。而剩下的80%的指令却不经常使用,只占程序代码的20%。 RISC
1.统一指令编码,可以快实现快速译码
2.寄存器数广泛,针对整数、浮点、向量等有专用的寄存器;
3.寻址模式简单;
问题34:阻塞赋值和非阻塞赋值的区别是什么?
答案:阻塞赋值:先计算表达式的右边,然后立即将结果赋值给表达式的左边,阻塞下一条语句的执 行,在并行语句块中是并行执行的,在串行语句块是顺序执行的; 非阻塞赋值:先计算表达式右边,等待一段时间将结果赋值给表达式的左边,在并行语句块和 串行语句块中都是并行执行的。 其中,阻塞赋值常被用于组合逻辑,非阻塞赋值常被用于时序逻辑。
问题35:数字IC流程中插入扫描链的作用?
扫描链是DFT的一种,其先将普通寄存器替换成scan mode寄存器,然后将这些scan mode 寄存器连接起来,通过外部注入pattern,对电路的physical defects 进行default fault进行检测。扫描链的插入能更好的检测和控制到设计中寄存器之间的时序电路,从而能更好的检测出电路故障。
问题36:FPGA和ASIC区别
FPGA是现场可编程逻辑门阵列,可通过编程的方式,定义其功能,灵活性高。它有上千个基本单元CLB或slice构成,编写的程序生成二进制bit流将基本逻辑块的配置成具有特定功能的电路。ASIC是专用集成电路,其生产出来后功能就无法进行改动,因为其数字电路是永久连接的门和触发器。在性能方面,ASIC可以针对设计的某以性能的指标进行优化,也能在更高频率下工作;而FPGA由于工艺的限制,与ASIC相比实现的频率有限。虽然设计方法上,虽然FPGA与ASIC在前期都适用verilog作为设计输入,但ASIC设计人员往往在设计过程中需要关注验证和后端的方面的事情,而FPGA则不太需要。在设计成本上,ASIC在小批量生产中价格非常昂贵,所以圆形验证一把采用FPGA的原型验证。
问题37:100个数据100个cycle写,写后休息100个cycle,2个数据2个cycle读,读后休息2个cycle,计算一下需要的FIFO深度
答案:100个数据100个cycle写,写后休息100个cycle,即写100个数据需要200个周期,且不出现背靠背传输现象。 2个数据2个cycle读,读后休息2个cycle,即读2个数据需要4个周期。 所以考虑极端情况,写100哥数据需要的时间是100个周期,在100个周期内,读数据能读出来100/4*2=50个数据,那么需要缓存的数据为100-50=50,FIFO的最小深度为50。 解析:这类题的做法网上有很多公式,但是笔者不建议记公式。不管题目如何变,只需要分析出写速率和读速率,突发传输的长度需要多少个写周期的时间,在这段写周期的时间内,能读出多少个数据,剩下的就是需要缓存的数据,即fifo的最小深度。
问题38:解释input delay和 output delay的含义
两者都是对外部器件与芯片之间时序路径的约束 。input delay是指 从上游器件的时钟边沿开始到FPGA输入端口之间的延迟,包括触发器的输出延迟Tco、PCB的走线延迟Tpcb; input delay(max)=Tco(max)+ Tpcb(max) input delay(min)=Tco(min)+ Tpcb(min) output delay 是指从FPGA端口输出数据到下游器件时钟沿之间的延迟,包括pcb走线延迟与下游器件第一级寄存器的建立时间。 output delay(max) = Tpcb(max) + Tsu output delay(min) = Tpcb(min) - Th
问题39:你在RTL中怎么选用if-else和case?
首先if_else和case都是具有优先级的语法,只是通常在综合时不太一样,case语句常常被综合 成类似于多选1或者多选多数选器的结构,if-else语句常常被综合成级联的2选一数选器的结构,具有 明显的优先级。 所以在优先级不那么明确的条件下,建议使用case语句,反之,选择if-else语句。
问题40:什么是同步时钟和异步时钟?
同步时钟是指相位具有确定关系的时钟,一般由MMCM或PLL分频产生的时钟与主时钟为同步时钟,因此在做时域约束的可以对同步时钟偶衍生时钟约束。 异步时钟是指相位关系无法确定的时钟,来自不同的晶振的时钟为异步时钟,来自不同主时钟的时钟之间也一般判定为异步时钟。问题15:csic和risc-v的区别
问题41:对低功耗设计有多少了解?有哪些低功耗设计方法。
答案:1.门控时钟。在前端rtl设计中,通常采用门控时钟来降低时钟不必要的翻转带来的动态功耗; 2.多阈值电压。在后端物理实现中,对关键路径采用 低阈值的器件,因其速度快,但存在漏电大的问题,可以满足电路时序;在非关键路径上采用高阈值的器件,因其速度慢,漏电小的特点,来降低静态功耗。 3.多电压供电。在soc设计中,不同模块对供电电压需求不一样,存在不同的电压域,这样就可以大大降低整体的动态功耗。 4.电源门控。在soc设计中,将暂时用不到的模块直接关闭,直接降低动态功耗和静态功耗。问题15:你在RTL中怎么选用if-else和case?
问题42:如果芯片已经生产出来,发现setup time或者hold time有违例,怎么办?能补救吗?
在芯片生产出来后,由于建立时间的时序路径与时钟周期有关,因此若是硅后出现setup违例可通过降低时钟频率来增大时序裕量;而对于hold违例,首先在需要保证再经过处理后setup不能为例,因此首先先降频保证满足建立时间,然后对芯片进行升温,增大器件延迟比如Tcq,从而增大保持时间时序裕量。