欢迎讨论
verilog&知识点问答
1 写一个64位的计数器,由于器件和时钟频率的限制,当计数器位宽大于17位时时序无法收敛。因此内部每一个计数器的位宽不能超过17位。可以采用拆分加法器的方式实现。计数器的使能信号为CntEn,高电平时开始计数,低电平时计数值保持。模块接口如下,请补全代码。
(诺瓦星云FPGA23)
module Counter(
input InClk,
input InRst,
input CntEn,
output[64-1:0] Cnt);
题解:
将64位的Cnt,分为四个16位计数器,Cnt <= {cnt3,cnt2.cnt1,cnt0}。当cnt0计满,cnt1加一;当cnt1计满,cnt2加一;当cnt2计满,cnt3加一。
2 复位
以下说法正确的是:
- 同步复位增加了时序收敛的难度
- 同步化异步复位可以保证逻辑正确复位
- 从使用资源的角度看,应候使用异步复位
- 异步复位可能会导致逻辑错误
(诺瓦星云FPGA23)
题解:
只要存在复位都会增加布局布线的负担,因为复位会连接到每一个寄存器中,会增加时序收敛的难度。
同步化异步复位结合了异步复位和同步复位的优势,因此可以保证逻辑正确复位。 异步复位容易使寄存器出现亚稳态,可能导致逻辑错误。
第三个选项要看 FPGA 。对于 Xilinx 来说,官方文档明确表示尽量避免使用异步复位,如果适应复位就用高复位,这与Altera的规则相反,这是因为内部结构决定的。对于 Altera 器件来说,使用同步复位会造成资源的浪费,所以才会有习惯性的思维(negedge rst_n)。
- 同步复位增加了时序收敛的难度
- 同步化异步复位可以保证逻辑正确复位
- 从使用资源的角度看,应候使用异步复位
- 异步复位可能会导致逻辑错误
参考博文
3 竞争冒险
3.1 引起组合逻辑电路发生竞争冒险的原因是()
- 信号串扰
- 电路延时
- 逻辑关系错误
- 电源波动
(诺瓦星云FPGA23)
题解:
造成竞争冒险的原因是到达门的时间不同。
- 信号串扰
- 电路延时
- 逻辑关系错误
- 电源波动
但是为啥还看到有全选的?不理解
3.2 判断:竞争和冒险只在组合逻辑中出现
题解:
暂且认为不对。
不确定
参考博文
4 分频电路
四分频电路最少需要( )个寄存器实现
题解:
2个
计算公式:m 分频需要 n 个寄存器:n=log2(m)。
5 移位操作
对 6’d53 进行移位操作,先左移一位,再右移三位,得到( )
- 6
- 13
- 12
- 5
题解:
开始把十进制转换成二进制,再移位,转回十进制,
更快的方法二
直接对53进行操作,×2 或 ➗2,除法只舍不进位
6 计数器
6.1 减法计数器
一个 8位二进制减法计数器, 初始状态为 00000000, 问经过 268个输入脉冲后, 此计数器的状态为 ______。
- 11001111
- 11110100
- 11110010
- 11110011
题解:
8位二进制数计数2^8 = 256次后回到00000000,还剩268-256=12次计数,计数1次后从“00000000”减为“11111111”,此后再减11(00001011),得到11110100,选1111 0100
6.2扭环计数器
移位寄存器由 8 级触发器组成,用它构成的扭环形计数器具有 ______种有效状态;用它构成的环形计数器具有 ______种有效状态,构成线性反馈移位寄存器具有 ______种有效状态。
- 16,8,511
- 4, 8,15
- 16,8,255
- 8,16,127
题解:
(1)扭环形计数器,每次状态变化时仅有一个触发器发生翻转,译码不存在竞争冒险,在n(n≥3)位计数器中,使用2n个状态,有2^n-2n个状态未使用;
(2)环形计数器,正常工作时所有触发器中只有一个是1(或0)状态,计n个数需要n个触发器,状态利用率低;
(3)n个寄存器的线性反馈移位寄存器LFSR可以产生的最长的随机序列是2^n−1长度(即m序列)。LFSR常被用来生成m序列,也可产生和校验CRC。
16,8,255
7 FPGA资源
7.1 下列属于FPGA时钟资源的是?
- BUFG
- PLL
- DCM
- MMCM
题解:
参考博文
全选
7.2 FPGA芯片内有哪两种存储器资源?
题解:
FPGA芯片内有两种存储器资源: 一种叫BLOCK RAM,另一种是由LUT配置成的内部存储器 (也就是分布式RAM)。BLOCK RAM由一定数量固定大小的存储块构成的,使用BLOCK RAM资源不占用额外的逻辑资源,并且速度快。但是使用的时候消耗的BLOCK RAM资源是其块大小的整数倍。
8 FIFO
8.1 请简述FIFO使用格雷码的原因
题解:
参考博文1
“关键是理清一个点:多bit变化的含义是写时钟域的写指针相对于前一个写时钟域的写指针的变化,而不是写时钟域的写指针相对于读时钟域的写指针之间的变化。 如果不使用格雷码,多bit变化将使采样紊乱,使用格雷码,将多bit变化变为单bit变化,就不会采到错误的值,即便采到变化前的值,也是安全、正确的。”
参考博文2
“比如写地址在从0111到1000 转换时4条地址线同时跳变,这样读时钟在进行写地址同步后得到的写地址可能是0000-1111的某个值,这个完全不能确定,所以用这个同步后的写地址进 行FIFO空判断的时候难免出错。
这个时候gray码体现了价值,一次只有一位数据发生变化,这样在进行地址同步的时候,只有两种情况:1.地址同步正确;2.地址同步出错,但是只 有1位出错;第一种正确的情况不需要分析,我们关注第二种,假设写地址从000->001,读时钟域同步出错,写地址为000->000,也 就是地址没有跳变,但是用这个错误的写地址去做空判断不会出错,最多是让空标志在FIFO不是真正空的时候产生,而不会出现空读的情形。所以gray码保 证的是同步后的读写地址即使在出错的情形下依然能够保证FIFO功能的正确性,当然同步后的读写地址出错总是存在的(因为时钟异步,采样点不确定)。这里 需要注意gray码只是在相邻两次跳变之间才会出现只有1位数据不一致的情形,超过两个周期则不一定,所有地址总线bus skew一定不能超过一个周期,否则可能出现gray码多位数据跳变的情况,这个时候gray码就失去了作用,因为这时候同步后的地址已经不能保证只有1 位跳变了。”
参考博文3
“但即使指针同步后的值持续一小段时间亚稳态,FIFO将挂起不工作,不会发生任何错误(使用格雷码时,亚稳态不可避免,造成的后果无非是同步失败,格雷码同步失败会保持旧值。对于FIFO而言,同步失败影响空满判断,,这些都不会影响正常使用)”
相对来说,比二进制编码功耗更低
可说可不说
9 CDC
某个系统中,存在两个时钟,分别为150M和50M,在150M时钟域下,每隔1s左右有一个脉冲(单时钟宽度,高脉冲),现在需要将此脉冲同步到50M时钟域下,同样是1个高脉冲,模块接口如下,请补全代码。
module PulseCrossDomain(
input InCIk150M,
input InPulse150M ,//150M时钟下,1个脉冲宽度,高脉冲
input InCIk50M,
output OutPulse50M //5EM时钟下,1个脉冲宽度,高脉冲
);
题解:
快时钟域到慢时钟域,且InPulse150M 时钟域脉冲之间的间隔很大,无需考虑脉冲间隔太小的问题。可以参考牛客网 VL49 脉冲同步电路
10 亚稳态
什么是亚稳态,出现了亚稳态应该如何解决?
题解:
定义: 亚稳态是指由于采样时间不足,触发器无法在某个规定时间段内达到一个可确认的状态。
减少亚稳态的发生:
- 打两拍:也就是同步的方式,引入同步机制,防止亚稳态的传播
- 降低系统时钟频率
- 用反应更快的触发器
- 改善时钟质量,用边沿变化快速的时钟信号
11 状态机
有限状态机FSM分为哪两类?以及两类的区别
题解:
状态机由状态寄存器和组合逻辑电路构成,主要分为2大类:
第一类,若输出只和状态有关而与输入无关,则称为Moore状态机
第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机
12 时序约束
时序约束的概念和基本策略?
题解:
时序约束:满足设计的时序要求。
主要包括:周期约束、偏移约束、静态时序路径约束。
参考博文
“时序约束主要包括周期约束(触发器到触发器),偏移约束,静态时序路径约束三种。通过附加时序约束可以综合布线工具调整映射和布局布线,使设计达到时序要求。
附加时序约束的一般策略是先附加全局约束,然后对快速和慢速例外路径附加专门约束。附加全局约束时,首先定义设计的所有时钟,对各时钟域内的同步元件进行分组,对分组附加周期约束,然后对FPGA/CPLD输入输出PAD附加偏移约束、对全组合逻辑的PAD TO PAD路径附加约束。附加专门约束时,首先约束分组之间的路径,然后约束快、慢速例外路径和多周期路径,以及其他特殊路径。”