赞
踩
目录
004——FSM有限状态机(Moore 型、Mealy 型)
005——CDC跨时钟域处理【打两拍】【握手】【异步FIFO】【脉冲展宽】【指示信号】
CDC(Clock Domain Conversion)跨时钟域:
007——存储器问题【SRAM】【DRAM】【SDRAM】【Flash】【EPROM】【EEPROM】
008——FPGA时序分析之关键路径(Critical Path)
009——CDC跨时钟域处理及相应的时序约束【set_clock_groups】【set_max_delay】
011——DFT(Design for Test)可测性设计
013——FIFO深度计算【字节跳动】【大疆】【简便计算公式】
STA静态时序分析(Static Timing Analysis)
(1) 静态时序分析是一种验证数字集成电路时序是否合格的验证方法;
(2) 静态时序分析的前提是同步逻辑设计(重要!),不能分析异步电路;
(3) 静态时序分析工具计算路径延迟的总和,并比较相对于预定义时钟的延迟;
(4) 静态时序分析仅关注时序间的相对关系,而不是评估逻辑功能;
(5) 静态时序分析对所有的时序路径进行错误分析,不需要使用测试向量激活某个路径(与时序仿真的不同点),分析速度比时序仿真工具快几个数量级,克服了动态时序验证的缺陷,适合大规模的电路设计验证,在同步逻辑情况下,能够达到100%的时序路径覆盖;
(6) 静态时序分析的目的是找到隐藏的时序问题,根据时序分析结果优化逻辑或者约束条件,使设计达到时序闭合(Timing Closure);
(7) 静态时序分析能够识别的时序故障:建立时间(Setup)/保持时间(Hold)/恢复时间(Recovery)/移除时间(Removal)检查;最小跳变和最大跳变;时钟脉冲宽度、时钟畸变(Skew、Jitter);总线竞争;不受约束的逻辑通道;关键路径;约束冲突等;
综合工具(DC),布局布线工具(ICC2),时序分析工具(PrimeTime),Xilinx的Vivado中集成了综合、布局布线和时序分析。
代表性企业:Synopsys 。
建立时间:时钟沿到来之前,数据必须保持稳定的最短时间,对应的是数据路径的最大延时;
与寄存器的时钟有关。
保持时间:时钟沿到来之后,数据必须保持稳定的最短时间,对应的是数据路径的最小延时;
与寄存器的时钟有关。
------------------- 分割线 -----------------------------------
建立时间或者保持时间不满足导致数据采样出错,亚稳态现象。
--------------------------------------------------------------------
STA 四种时序路径:
路径1:输入端口到寄存器的数据输入 D,
路径2:内部寄存器的时钟输入端到下一个寄存器的数据输入 D,
路径3:内部寄存器的时钟输入端到输出端口;
路径4:输入端口到输出端口。
每条时序路径包含 1 个起点和 1 个终点,
起点只能是设计的基本输入端口或内部寄存器的时钟输入端,
终点只能是内部寄存器的数据输入端或设计的基本输出端口。
对于路径3,分析根据寄存器的Tco延迟和组合路径延迟等分析setup和hold是否满足。
对于路径1和3,可以加入 input delay 和 output delay 来分析,来满足寄存器的建立/保持时间要求。
复位的恢复时间:时钟有效沿来临之前,异步复位已经撤销的最小时间(复位已经无效的最小时间,对应于数据的恢复);
即在时钟有效沿来临之前,复位就要撤销,数据就要开始恢复的正常状态的时间。
与寄存器的复位有关。
复位的移除时间:时钟有效沿来临之后,异步复位需要保持有效的最小时间,类似时钟的 hold。
(2021乐鑫科技,多选)以下方法哪些是进行面积优化( )。
A: 串行化
B: 资源共享
C: 流水线设计
D: 寄存器配平
E: 逻辑优化
F: 关键路径优化
答案:ABE
解析:
(1)流水线设计(也是属于关键路径的优化,在关键路径的组合逻辑中插入寄存器);
(2)寄存器配平(重定时);
(3)关键路径优化(减少关键路径上的组合逻辑延时);
(4)消除代码优先级(if_else嵌套、case);
(5)并行化(加法树、乘法树,消除符号运算的优先级);
(1)串行化;
(2)资源共享;
(3)逻辑优化;
(单选)状态机的编码风格包括一段式、两段式和三段式,下列描述正确的是()
A、一段式寄存器输出,易产生毛刺,不利于时序约束;
B、二段式组合逻辑输出,不产生毛刺,有利于时序约束;
C、三段式寄存器输出,不产生毛刺,有利于时序约束;
D、所有描述风格都是寄存器输出,易产生毛刺,有利于时序约束。
答案:C
解析:
(1)一段式:一个always块,既描述状态转移,又描述状态的输入输出,当前状态用寄存器输出;
(2)二段式:两个always块,时序逻辑与组合逻辑分开,一个always块采用同步时序描述状态转移;另一个always块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出,当前状态用组合逻辑输出,可能出现竞争冒险,产生毛刺,而且不利于约束,不利于综合器和布局布线器实现高性能的设计;
(3)三段式:三个always块,一个always模块采用同步时序描述状态转移;一个always采用组合逻辑判断状态转移条件,描述状态转移规律;第三个always块使用同步时序描述状态输出,寄存器输出。
三段式与二段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。
(单选)实现同一功能的 Mealy 型同步时序电路比 Moore 型同步时序电路所需要的 ______。
A.状态数目更多
B.状态数目更少
C.触发器更多
D.触发器更少
答案:B
解析:
(1)Mealy型:输出信号不仅取决于当前状态,还取决于输入;
(2)Moore型:输出信号只取决于当前状态;
Mealy型比Moore型输出超前一个时钟周期,Moore型比Mealy多一个状态。
实现相同的功能时,Mealy型比Moore型能节省一个状态(大部分情况下能够节省一个触发器资源,其余情况下使用的资源相同,视状态数和状态编码方式决定),Mealy型比Moore型输出超前一个时钟周期。
1.(大疆2020数字芯片)下列关于多bit数据跨时钟域的处理思路,错误的有()
A. 发送方给出数据,接收方用本地时钟同步两拍再使用;
B. 发送方把数据写到异步fifo,接收方从异步fifo里读出;
C. 对于连续变化的信号,发送方转为格雷码发送,接收方收到后再转为二进制;
D. 发送方给出数据,发送方给出握手请求,接收方收到后回复,发送方撤销数据。
答案:A
解析:多bit跨时钟域不能简单使用打两拍,打拍后可能数据错乱;
分单bit和多bit传输,其中:
单bit(慢时钟域到快时钟域):用快时钟打两拍,直接采一拍大概率也是没问题的,两拍的主要目的是消除亚稳态;
单bit(快时钟域到慢时钟域):握手、异步FIFO、异步双口RAM;快时钟域的信号脉宽较窄,慢时钟域不一定能采到,可以通过握手机制让窄脉冲展宽,慢时钟域采集到信号后再“告诉”快时钟域已经采集到信号,确保能采集到;
多bit:异步FIFO、异步双口RAM、握手、格雷码;
2. 关于异步处理,以下说法正确的是:
A、静态配置信号可以不做异步处理
B、异步FIFO采用格雷码的原因是为了提高电路速度
C、异步处理需要考虑发送和接收时钟之间的频率关系
D、单比特信号打两拍后可以避免亚稳态的发生
答案:AC
解析:
A. 静态不变,直接采,不会出现亚稳态,因为不会在采集时钟的边沿处发生变化;
B. 异步 FIFO 中确实采用了格雷码,但是目的是为了跨时钟传输,不是为了提高电路速度;
将多 bit 的自然二进制读写地址转成格雷码,相邻数据仅有 1 bit 的不同,可以使用“打两拍”的二级同步器进行读写地址传输;
C. 异步处理需要考虑两个时钟的频率,比如前面提到的
单bit(慢时钟域到快时钟域): | 快的一定能采到慢的,用快时钟打两拍; |
---|---|
单bit(快时钟域到慢时钟域): | 快时钟域的信号脉宽较窄,慢时钟域不一定能采到,可以通过握手机制让窄脉冲展宽,慢时钟域采集到信号后再“告诉”快时钟域已经采集到信号,确保能采集到; |
D. 这里的说法有几个问题
(1)像 C 里提到的,快到慢就没办法只使用“打两拍”;
(2)慢到快的单比特信号打两拍,仅仅是降低了亚稳态发生的概率,但是没有消除亚稳态;
亚稳态无法消除,只能降低发生的概率,二级同步不够的时候可以使用三级甚至四级,具体相关的参数是 MTBF 平均无故障时间(Mean Time Between Failure),可以去查阅一下相关的。
https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/4bzarA5tSjUJH4EcXDv6wA
(大疆2020芯片开发工程师A卷)对12.918做无损定点化,需要的最小位宽是多少位?位宽选择11位时的量化误差是多少?
A. 12位,0.0118
B. 13位,0.0039
C. 12位,0.0039
D. 13位,0.0118
答案:C,12位,误差0.0039
解析:
12.918,定点量化时对整数部分和小数部分分别量化。
(1)整数部分12,最少使用4位量化,4-bit表示范围0~15;
(2)小数部分0.918,假设12.918整体使用12位量化,整数已使用4-bit,则小数部分还能使用8-bit量化,能够表示2的8次方共计256个刻度,每个刻度的间隔是1/256 = 0.00390625,这个值也就是量化精度。
小数0.918需要多少个刻度来表示呢? 0.918/(1/256) = 0.918*256 = 235.008,四舍五入取整,则使用235个刻度来表示,误差是0.008个刻度,误差大小是0.008*(1/256) = 0.00003125。
量化误差小于量化精度的一半,认为是“无损量化”。由于量化后误差0.00003125肯定是小于精度0.00390625的一半,所以这个误差小到可以认为是无损量化。
当使用11位量化时,同理:
(1)整数部分12,最少仍需要4位量化,4-bit表示范围0~15;
(2)小数0.918,只能使用剩下的7-bit量化,能够表示2的7次方共计128个刻度,每个刻度的间隔是1/128。
小数0.918需要多少个刻度来表示呢? 0.918/(1/128) = 0.918*128 = 117.504,四舍五入取整,则使用118个刻度来表示,误差是-0.496个刻度,误差大小是-0.496*(1/128) = -0.003875,保留四位小数并取正数,0.0039。
- (大疆2020芯片工程师A卷,单选)1个16K x 8位的存储器,其地址线和数据线总和是
A、46
B、17
C、48
D、22
答案: D
解析:
地址线:16K = 1K*16 = 1024*16 = (2^10)*(2^4) = 2^14,即需要 14 根地址线;
数据线:8 位数据需要 8 根数据线;
所以一共需要 22 根线。
2. (大疆2020芯片工程师A卷,多选)下面哪些是非易失性存储器()
A、Flash
B、EPROM
C、DRAM
D、SRAM
答案:AB
解析:
(1)ROM(Read-Only Memory,只读存储器)只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。ROM所存数据通常是装入整机前写入的,整机工作过程中只能读出。
可编程只读存储器(PROM);
可擦可编程序只读存储器(EPROM);
带电可擦可编程只读存储器(EEPROM,一般使用 IIC 接口读写)。
(2)RAM(Random Access Memory,随机存取存储器),而且速度很快,RAM在计算机和数字系统中用来暂时存储程序、数据和中间结果,比如计算机的8G内存,掉电丢失;
(3)SRAM(Static Random-Access Memory,静态随机存取存储器)是 RAM 的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以保持;
(4)DRAM(Dynamic Random Access Memory,动态随机存取存储器),需要周期性地更新存储数据,所以叫“动态”。
-----------------------------------------------------------
SRAM 和 DRAM 比较:
SRAM 不需要动态刷新,速度快,性能高,但是功耗大、集成度低,同时体积也比DRAM大,由此SRAM的造价更高。
-----------------------------------------------------------
(5)SDRAM(Synchronous Dynamic Random-access Memory,同步动态随机存取内存),是有同步接口(Synchronous)的DRAM,系统读写能够同步;
第一代 SDRAM 是 SDR 单数据速率,其后第二代 DDR SDRAM、第三代 DDR2 SDRAM、第四代 DDR3 SDRAM、第五代 DDR4 SDRAM均为双倍速率的存储器,一般简称 DDR。
DDR:Double Data Rate。
(6)Flash 存储器,又叫闪存。结合 RAM 和 ROM 的优点,既能电可擦除,不掉电丢数据(ROM),又能快速读写数据(RAM),U盘大部分使用的是 Flash 技术,所以你知道了,不丢数据,可读可写,还挺快,但是还是不如 RAM 快。
Flash 分 2 种:Nor Flash 和 Nand Flash。
Nand Flash | 成本低,串行结构,读写慢,可靠性差 |
---|---|
Nor Flash | 与上面相反 |
关键路径通常是指同步逻辑电路中,组合逻辑时延最大的路径(这里我认为还需要加上布线的延迟),也就是说关键路径是对设计性能起决定性影响的时序路径。
对关键路径进行时序优化,可以直接提高设计性能。对同步逻辑来说,常用的时序优化方法包括Pipeline、Retiming、逻辑复制、加法/乘法树、关键信号后移、消除优先级等解决。
静态时序分析能够找出逻辑电路的关键路径。通过查看静态时序分析报告,可以确定关键路径。在Vivado工具中,可以通过report_timing_summary 等来查看,如下图所示,WNS(Worst Nagative Slack)对应最大延迟分析的所有时序路径的最差裕量(Setup),显示的Slack为时序裕量,Levels为该条路径上源逻辑驱动的级数,HighFanout为高扇出的值,源和目的,总的延时=逻辑延时+布线延时,这里,使用100MHz的时钟,对应周期10ns,逻辑延时最大0.535ns,布线延时1.950ns。
组合逻辑的延时过长,就会成为关键路径,这时可以考虑在该路径上插入额外的寄存器,这种方法也称为插入流水线,多用于高度流水的设计中,因为这种设计中额外插入寄存器增加的时钟周期延时并不会违反整个设计的规范要求,从而不会影响设计的总体功能性实现,也即额外插入的寄存器在保持吞吐量不变的情况下改善了设计的时序性能。当然,其不可避免地会带来部分面积的增加,如图所示。
在插入寄存器时,要在组合逻辑中选择合适的位置进行插入,使得插入寄存器后被分割出的几块小的组合逻辑延时基本一致,也相当于下图所示的先加入寄存器,再对寄存器进行重定时Retiming。
在不增加寄存器个数的前提下,通过改变寄存器的位置来优化关键路径,可以对比和流水线插入寄存器的不同。
平衡前,a和b均经过3个乘法器带来的延时,c经历2个,d经历1个,最长延时为3个乘法器延时。平衡后,树形结构,a、b、c、d均经历2个乘法器延时,最长延时为2个乘法器延时。
本身确实不需要优先级的地方,可以使用case代替if…else,使得顺序执行的语句编程并行执行。如果确实有优先级,则不能这样做。这种消除代码中的优先级的策略也称为代码结构平坦化技术,主要针对那些带优先级的编码结构。
当某个信号的扇出fanout比较大时,会造成该信号到各个目的逻辑节点的路径变得过长,从而成为设计中的关键路径,此时可以通过对该信号进行复制来降低扇出。高扇出的危害是大大增加了布局布线的难度,这样其扇出的节点也就无法被布局得彼此靠近,所以就导致了布线长度过大的问题。
关键输入应该在逻辑最后一级提供,其中关键输入为芯片、Slice、或者LUT提供的时延最大的输入,比如在if…else if…链中,将关键信号放在第一级。
(大疆2020数字芯片)下列关于多bit数据跨时钟域的处理思路,错误的有()
A. 发送方给出数据,接收方用本地时钟同步两拍再使用;
B. 发送方把数据写到异步fifo,接收方从异步fifo里读出;
C. 对于连续变化的信号,发送方转为格雷码发送,接收方收到后再转为二进制;
D. 发送方给出数据,发送方给出握手请求,接收方收到后回复,发送方撤销数据。
答案:A
解析:
多bit跨时钟域不能简单使用打两拍,打拍后可能数据错乱;
CDC(Clock Domain Conversion)跨时钟域分单bit和多bit传输,其中:
1. 单bit(慢时钟域到快时钟域):用快时钟打两拍,直接采一拍大概率也是没问题的,两拍的主要目的是消除亚稳态;
其中:
(1)为了更长的平均无故障时间 MTBF( Mean Time Between Failures),需要配合一个 ASYNC_REG 的约束,把用作简单同步器的多个寄存器放入同一个 SLICE,以降低走线延时的不一致和不确定性。
- (* ASYNC_REG = "TRUE" *) reg rst_reg_0;
- (* ASYNC_REG = "TRUE" *) reg rst_reg_1;
(2)或者:直接在约束文件里进行约束
set_property ASYNC_REG TRUE [get_cells [list rst_reg_0 rst_reg_1]]
2. 单bit(快时钟域到慢时钟域):握手(脉冲展宽)、异步FIFO、异步双口RAM;快时钟域的信号脉宽较窄,慢时钟域不一定能采到,可以通过握手机制让窄脉冲展宽,慢时钟域采集到信号后再“告诉”快时钟域已经采集到信号,确保能采集到;
3. 多bit跨时钟域:异步FIFO、异步双口RAM、握手、格雷码;
(1)使用异步FIFO的IP
实际上是用 FPGA 内部的 BRAM 来搭建,所有的控制逻辑都在 BRAM 内部,是推荐的 FIFO 实现方式。
时序约束简单,进行时序例外约束,只需要 set_clock_groups 将读写时钟约束为异步时钟组即可,简单高效。
- set_property -asynchronous -group [get_clocks write_clock] \
- -group [get_clocks read_clock]
(2)自己写外部控制逻辑的FIFO
格雷码做异步 FIFO 的跨时钟域处理,计数器和读写控制逻辑在 BRAM 或者 RAM 的外部,除了代码的合理设计以外,还需要进行额外的时序例外约束,不能简单使用 set_clock_groups 约束异步时钟组,还需要考虑外部的读写逻辑的约束。
Xilinx建议这里设置 set_max_delay 来约束跨时钟域路径,约束的原则是:最大路径延时等于或者略小于目的时钟的一个周期。
写逻辑从cell1到cell2的约束中,cell2的驱动时钟周期为5,如下所示,读逻辑约束进行相应约束。
set_max_delay 5 –from [get_cells cell1] –to [get_cells cell2] –datapath_only
(大疆2020校招,芯片开发工程师A卷)对于流水线设计的理解,下列错误的是()
A. 流水线设计会消耗较多的组合逻辑;
B. 流水线设计会导致原有通路延时增加;
C. 流水线设计的思想,是使用面积换取速度;
D. 关键路径中插入流水线,能够提高系统时钟频率;
答案:A
解析:
流水线的实现方式:
(1)插入寄存器(触发器Flip-Flop,FF)去分割延迟比较大的组合逻辑,消耗了更多的触发器,组合逻辑资源不变(理论上);
(2)由于增加了寄存器,每增加一级寄存器就会对数据寄存一个时钟周期,所以输入到输出的延时增加;
(3)对于整体来讲,数据同时处理,速度提升,最大工作频率提高,是典型的面积换速度的思想。
DFT(Design for Test,可测性设计,不是信号处理里的离散傅里叶变换)
(大疆2020芯片开发工程师A卷)关于DFT (design for test) 的描述错误的是()
A、DFT测试不能覆盖电路的时序问题;
B、DFT测试过程通常会消耗大量的动态功耗;
C、DFT的主要目的是发现芯片在生产过程中出现的缺陷;
D、寄存器扫描链是一种常用的DFT技术;
答案:A
解析:
在芯片设计过程中,加入各种可测性逻辑,使芯片变得容易测试,找到存在制造缺陷的芯片,主要是为了找出在生产制作中引入的制造缺陷(短路、断路等)。
比如,在设计中加入一些MUX选择器逻辑,用于测试;
常见的可测性设计技术(Design for Test)
Scan Chain 扫描链:针对时序电路,测试寄存器(Flip-Flop)和组合逻辑;
BIST(Bulit-in Self Test,内建自测试):内部生产测试向量,简化测试步骤,但增加了设计 难度,测试存储器(ROM、RAM)、一些 IP 核;
Boundary Scan 边界扫描:测试封装与 IO、芯片间互联,常用的调试器 JTAG 由此而来(Joint Test Action Group,联合测试工作组),基本原理是在器件内部定义一个 TAP(Test Access Port,测试访问口),然后通过专用的 JTAG 测试工具对内部节点进行测试,多个 JTAG 口可以形成 JTAG 链;
(A)DFT的Scan Chain 扫描链:针对时序电路,测试寄存器(Flip-Flop)和组合逻辑;
其中,DC Scan是慢速测试;AC Scan是全速测试 at speed test,使用高于芯片工作频率的时钟,测试 setup 和 hold 。
(B) 影响器件测试的动态功耗有两种:峰值功率和平均功率。峰值功率,也称为“瞬时功率”,反映了器件中节点开关的活动水平,从一个逻辑状态切换到另一个状态的节点数量越多,峰值功率就越大,DFT里涉及大量MUX选择开关。
(大疆2020校招芯片开发)以下哪个工具不具备逻辑综合功能()
A、Synplify
B、Design Compiler
C、Modelsim
D、ISE
答案:C
解析:Modelsim是仿真软件,用于功能仿真(前仿真)和时序仿真(后仿真),不具备逻辑综合功能。
顾名思义,不加时序信息,只仿真逻辑功能是否实现,也叫静态仿真;
加入综合、布局布线后的延时信息(包括门级延时、布线延时等),看加入时序信息后功能是否还能达标;时序仿真时利用网表文件”.vo”和延时文件”.sdo”,也叫动态仿真。
以 Xilinx 的 Vivado 工具为例,仿真包括:
行为级仿真(综合前的),综合后的功能仿真、综合后的时序仿真、布局布线后的功能仿真,布局布线后的时序仿真。
(2020乐鑫科技数字IC提前批)下面哪些属于动态验证范畴( ).
A: 形式验证
B: Modelsim仿真
C: 后仿
D: STA
答案:BC
解析:
A,形式验证是一种静态的验证手段,它根据电路结构静态地判断两个设计在功能上是否等价,常用来判断一个设计在修改前和修改后其功能是否保持一致。它运行时无须测试向量,但是必须有一个参照设计和一个待验证的设计;
B,Modelsim仿真中既可以功能仿真(静态),也可以时序仿真(动态),时序仿真时利用网表文件”.vo”和延时文件”.sdo”;
C,后仿,时序仿真加入布局布线的连线延时,属于动态时序分析;
D,Static Timing Analysis,静态时序分析;
前仿是针对RTL的功能验证,
后仿是针对是综合后(加入约束,延时等信息)的网表文件,在前仿的基础上加入了延时信息的功能仿真,同时验证了设计的时序以及功能都正确。
(1)专业的综合工具:Synplify、Synplify Pro、Synplify Premier、Design Compiler(简称DC);(以上均属于 Spynopsys 新思科技的 EDA 工具)
(2)集成工具:Xilinx 使用的 Vivado、ISE,Altera(现属于Intel)使用的 Quartus,是集成了 FPGA 设计所有流程的工具,包括了综合、布局布线等,其中底层的很多技术使用的也是Cadence、Spynopsys 等 EDA 企业的技术。
综合(Synthesis):完成 HDL 语言到硬件电路的转化,并生成综合网表;
比如,将异或逻辑使用底层的 LUT 实现,将 D 触发器映射为底层的 FDRE(同步使能,同步复位的触发器 Flip-Flop) 等;
实现(Implementation):主要是布局布线(Place & Route),布局是将综合后的器件约束到 FPGA 对应位置,布线是使用布线资源连接这些器件。
传统的 FPGA 设计流程
1. (字节)设计一个同步fifo,读写时钟相同,其中在写入时每100个时钟周期会写10个,具体哪个时刻写入不确定,在读出侧每10个cycle会读1个,计算最小深度?
答案:18
解析:fifo设计中最小深度的要求是不溢出(overflow),考虑极限情况,写入数据最多的时候时候就是需要存储数据最多的时候,也是FIFO深度的下限值,即最小深度。
考虑最大数据情况,考虑写数据的连续200个时钟周期,前一个100个时钟记作TimeA,后一个记作TimeB,写数据的恰好在TimeA的最后和TimeB的最前,即20个时钟周期发生连续的20次写,而对应的20个时钟周期会读出2个数据,所以这里需要的最小深度为20-2=18。
考虑整体读写,每100个时钟写10个,每100个时钟也读出10个,且读写时钟一样,所以不需要增加额外的FIFO深度来进行补充。
综合来看,最小深度为18。
2. ModuleA/ModuleB用的是同个Clock, Clock频率80MHz。ModuleA和ModuleB同时启动,ModuleA产生如下周期性的burst数据给ModuleB,一共产生8次burst. burst rate : 1280Mbit/s,burst持续时间1us。burst内部速率均匀,burst周期5us,余下的4us内没有数据。
ModuleB收到启动信号后,需要花10us做初始化,所以先把module A的数据缓存在ModuleB内部的同步FIFO中,同步FIFO位宽32bits,初始化结束后,ModuleB以640 Mbit/s的均匀速度从FIFO中读取数据。在满足功能需求的前提下,为了节省电路面积,要求FIFO size越小越好,以下四个选项的FIFO深度,选项()的FIFO深度符合要求:
A: 128
B: 64
C: 96
D: 160
答案:A
解析:
考虑最大数据情况,
在ModuleB启动的10us内,ModuleA一直在传输数据,一共2us有效数据,需要存储 1280Mbit/s * 2us = 2560bit;
在第11us,ModuleA传输数据 1280Mbit/s * 1us = 1280bit,ModuleB读取 640 Mbit/s * 1us = 640 bit,需要存储 1280 - 640 = 640 bit,此时共需存储 2560 + 640 = 3200 bit。
考虑整个读写,前15us共写入 3 * 1280=3840,读取 5*640=3200,只需要存储640,目前设置存储3200,所以满足要求。
综合考虑,最大需要存3200bit,深度需要 3200 / 32 = 100,选A的128较为合适。
【知乎:FPGA探索者】对于读写同时进行的FIFO,有一个简便计算公式
FIFO_Depth >= Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate)
以第1题为例,
最大突发写长度 Burst_length = 20;
读时钟等于写时钟,rd_clk = wr_clk;
读取速率rd_rate,每10个时钟周期读取1个数据,所以rd_rate = 1/10=0.1;
所以:
FIFO_Depth >= Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate)
= 20 – 20*1*0.1
= 18
3. 以大疆的一个题目为例(选B,32):
大疆2020芯片
可以得出:
(1)写入最频繁的情况下,是连续的200个时钟内,有连续的160个时钟在写,即最大突发写长度 Burst_length = 160;
(2)读时钟等于写时钟,rd_clk = wr_clk;
(3)读取速率rd_rate,每10个时钟周期读取8个数据,所以rd_rate = 8/10=0.8;
所以:
FIFO_Depth >= Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate)
= 160 – 160*1*0.8
= 32
(大疆2020芯片工程师校招)组合逻辑电路中的冒险是由于( )引起的。
A、电路有多个输出
B.、电路未达到最简
C、逻辑门类型不同
D、电路中的时延
答案:D
解析:
--------------------- 分割线 ---------------------
(1)竞争
在一个组合电路当中,当某一个变量经过两条以上的路径到达输出端的时候,由于每条路径上的延迟时间的不同,到达终点的时间就会有先有后,这一现象称作竞争。
(2)冒险
在具有竞争现象的组合电路中,当某个变量发生变化的时候,比如说从 1 跳到 0,或者说从 0 跳到 1,如果真值表所描述的逻辑关系或者功能遭受到短暂的破坏,在输出端出现一个不应有的尖脉冲毛刺,这种现象就叫冒险。
冒险是由竞争造成的,而竞争是因为电路中的时延不同,所以选D,
冒险是因为电路中的时延问题导致。
但是有竞争的时候不一定会出现冒险。
--------------------- 分割线 ---------------------
(1)公式法
写出逻辑表达式,当某些逻辑变量取特定值 0 或 1 时,
若逻辑表达式能转换为 A·(~A),则该电路存在1型冒险(该为 0 的时候出现了为 1 的错误数据,1 型冒险);
若逻辑表达式能转换为 A+(~A),则该电路存在0型冒险(该为 1 的时候出现了为 0 的错误数据,0 型冒险)。
(2)卡诺图法
画出其卡诺图,
若输入变量在卡诺圈内改变时,则输出不会有冒险现象;
若输入变量是在相邻卡诺圈的相邻处发生变化,并且是从一个卡诺圈进入另一个卡诺圈,则有可能产生逻辑冒险现象。(卡诺图相切)
如下图所示,
当A=1、C=0,B由0->1时,在卡诺圈内变化,不会出现冒险;
当B=C=1,A由0>1时,在卡诺圈内变化,不会出现冒险。
当A=B=1,C从0>1时,相当于输入变量A、B、C从110变化到111,此时的变化是从一个卡诺圈变化进入另一个卡诺圈,该电路输出存在冒险现象。
--------------------- 分割线 ---------------------
(1)增加冗余项
如下图,增加一个冗余项AB,这样状态变化时也是在卡诺圈内变化,此时逻辑表达式不是最简表达式,但是消除了冒险。
(2)增加选通信号(高电平)
输入端加入选通信号,针对 A+(~A) 的 1 型冒险,避开毛刺。
(3)引入封锁脉冲(低电平)
输入端加入封锁脉冲信号,针对 A·(~A) 的 0 型冒险,避开毛刺。
(4)增加滤波电容
冒险输出的是一个很窄的毛刺,在输出端接滤波电容将其滤除。
(5)采用可靠性编码
比如格雷码,每次只变化1位。
大疆2020芯片工程师A卷)指令系统中程序控制类指令的功能是()
A、实现主存与CPU之间的数据传送
B、实现程序执行顺序的改变
C、实现算术和逻辑运算
D、实现堆栈操作
答案:B
解析:程序控制类指令包括跳转指令,循环指令,子程序指令以及中断指令,这些指令控制程序的执行顺序。
相关题目:
2、对某个寄存器中操作数进行操作的寻址方式称为(C)寻址。
A.直接;B.间接;C.寄存器;D.寄存器间接。
3、寄存器间接寻址方式中,操作数在(B)中。
A.通用寄存器;B.主存单元;C.程序计数器;D.堆栈。
4、指令条统中采用不同寻址方式的目的主要是(B)。
A. 提供扩展操作码的可能,并降低指令译码难度;
B. 缩短指令字长,扩大大寻址空间,提高编程灵活性;
C. 实现存储程序和程序控制;
D. 可以直接访问外存。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。