1. & 与 && 的使用
需要使用 按位 & 逻辑时 ,必须使用& ;
其他非按位与 逻辑, 推荐使用 &&, 使用& 会导致覆盖率分析不全(软件问题)
2. 数据加,减溢出
数据 加 减 需要保证WDTH 相同(spyglass 检查强需求), 加需要增加1 bit 溢出位置。
减需要关注减数和被减数 的大小,分支数据减翻。
在代码上使用接位 思想 : 例如计算 C = A - B。 可以转换为 { c_nc,C }= {1'b1,A} - {1'b0,B} ;
3 . 计算值的上下边界
例如一块连续 ddr 空间,计算当前最大突发读取的地址区间。 使用waddr-raddr 有数据翻转风险。 该计算值是可以读写的地址区间大小。如果地址raddr > waddr , 则出现指针翻转。 此时允许突发最大读长度为 : { rd_len_nc,rd_left } = {1'b1,waddr}-{1'b0,raddr} ; len_left = max_waddr-rdaddr; =====》 允许突发最大长度为: min (rd_left,len_left)
4. 移位操作和part_select 操作
part_select 的length 和起始位置必须为常数
对于需要动态选择某些bit的,可以使用 ( {WDTH{1'b1}} >> xx ) & data 的方式
5. 数据打拍
打拍后只会在打拍的这一拍有效(逻辑可以使用)。 对于vld 信号的打拍,可以使用移位的方式,因为在计算slot 时,可以方便的使用任意一个bit 作为逻辑触发的slot
6. 有关业务逻辑的代码写法,要注意
vld 信号不可以锁存,else 及时清0
mem rdata 可以锁存,减少 非必要打拍
fc 信号的判断需要再固定slot 判断,如果在slot 后需要判断,则对fc 信号打拍,避免fc出现跳变
计算allowance 和 TH时 ,适当放大,避免一些路劲延时没有cover
业务逻辑的判断必须是符合真值表(所有情况都需要cover)
业务逻辑先判断业务, 在对每一种业务做判断(fc ,资源,空间,其他状态型号 )
在逻辑判断前,使用组合逻辑生成业务需要判断的某些信号,例如pull_all ; pull_part ; pull_none ,这 3个就是一个全集
7. 数据 截位
数据截位 ,必须保证数据不丢失。
8 . 反压路径延时,内部的打拍也需要计算上