Verilog个人小结

时延的常用用法:

  • #delay Q = A + B;

延时N单位时间后,计算A+B的值并立即赋值给Q

  • Q = #delay A + B;

立即计算A+B的值,并且保持N个单位后赋值给Q

两种写法的区别是A+B的计算时间是不同的。比如在t时刻语句执行,则第一种写法中Q在(t+delay)时刻得到此时的A+B的值,第二种写法中Q在(t+delay)时刻得到t时刻的A+B的值。


代码规范:

  • 参数化设计
    如设计时钟周期为1ns,复位周期为5个时钟周期↓↓↓
……
parameter CLK_PERIOD = 1;
parameter RST_MUL_TIME = 5;
parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;
……
always begin
    # CLK_PERIOD/2 clk <= ~clk;
end
initial begin
    clk <= 0;
    rst_n <= 0;
    # RST_TIME rst_n <= ~rst_n;
end
……

如此:在更改时钟周期的时候,只需要更改参数的值。

  • 规范化信号命名
    ①信号名一律小写,参数用大写。
    ②对于低电平有效的信号结尾要用‘_n’标记,如‘rst_n’。
    ③端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后方便很多。
    ④一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个entity。在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔离。这样做可以让综合器综合出更优的结果。
    ⑤尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只能做例化,禁止出现任何胶连逻辑(glue logic),哪怕仅仅是对某个信号取反。理由同上。
    ⑥在FPGA的设计上禁止用纯组合逻辑产生latch,带D触发器的latch的是允许的,比如配置寄存器就是这种类型。
    ⑦一般来说,进入FPGA的信号必须先同步,以提高系统工作频率(板级)。所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也是极有好处的。
    ⑧除非是低功耗设计,不然不要用门控时钟–这会增加设计的不稳定性,在要用到门控时钟的地方,也要将门控信号用时钟的下降沿 打一拍再输出与时钟相与。

最好的解决门控时钟的办法是使用或门(上升沿触发),如果门控触发器是下降沿触发,则应该使用与门。

⑨禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加了静态时序分析的复杂性。


Updating……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值