1、模块之间的连接用 wire 型变量。
2、输入必须为 wire ,输出可以为 wire 也可以为 reg 型变量。
3、时序电路中,判断赋值,结果会在下一周期输出。如图1。
FPGA信号亚稳态解决方案图1
4、always块中,只有if不会生成锁存器。
5、if会生成查找表。
6、组合逻辑在电平触发时才会生成锁存器。
7、(|write_start)==1'b0 按位或,只要write_start 的某一位为1,则结果为1,只有全为0,则结果为0,这样可以节约资源。
8、在 testbench 中可以强制改变某一信号的值,使用 force 语句。eg: 在 initial 中,在 41280 ns 时将 read_cnt 赋值为 2 (force 例化顶层模块名字.信号名字),如图2:
FPGA信号亚稳态解决方案图 2 强制改变仿真时某一信号的值
9、ModelSim 中,状态机内的状态名可以在 run.do 文件中让其转化出来,定义一个 virtual type 类型的结构体,如图3:注: virtual type 后面和 virtual_new_signal 前面需要有空格。
FPGA信号亚稳态解决方案图3 在ModelSim中将状态显示出来
10、敏感列表内是电平出发才可以产生 latch,敏感列表内的变量不全,赋值符号右边的变量必须放在敏感列表内,作为判断条件的变量一定要放到敏感列表内。逻辑判断必须有 else 结束赋值, case 要有 default 赋值。
11、串并转换,最简单的是位拼接。
12、带宽=数据总线比特位宽 * 总线同步时钟频率。
13、差分转单端信号,单端信号转差分信号。
14、时钟走线走金线,到达寄存器的延时相同,shew小。计数分频的时钟不能用于触发触发器,计数分频到达寄存器的延时不相同,但可以使用标志位来控制。
15、a = 4`b1111 && 4'b0011= 1 逻辑与
a = 4`b1111 & 4'b0011= 4`b0011 按位与
16、寄存器在时钟上升沿到来时立刻将时钟上升沿前一点数据输出,如果数据上升沿和时钟上升沿同时时,数据会下一拍输出。
17、跨时钟域打拍操作必须时钟目标时钟域。
FPGA信号亚稳态解决方案 FPGA信号亚稳态解决方案 FPGA信号亚稳态解决方案同频异相
FPGA信号亚稳态解决方案 FPGA信号亚稳态解决方案双buffer作用:1. 跨时钟域; 2. 完成数据位宽转换; 3. 完成数据缓冲。
RAM可以重复读,FIFO只能读一次,如果有可能读错数据使用RAM。
FPGA信号亚稳态解决方案
网友评论