RTL设计之设计规范

前言

在新人刚开始接触RTL代码设计时,遵守适当的设计规范显的尤为重要!遵守设计规范,能够帮助我们避免一些常见的基础性错误,使设计的RTL代码具有更好的可读性、可综合性、稳定性和可靠性,能够避免后期浪费大量调试时间!因此,强烈建议新人,认真学习理解RTL代码设计规范,不要凑时序、调时序。优秀的代码其时序都是设计出来的,而不是后期调试凑出来的!

 

在阅读本文的同时,有必要看看“《FPGA快速系统原型设计权威指南》读书小结”这篇博客或者书籍。

 

 

1、信号命名规范

1.1 采用有意义且有效的名字,并且尽量采用连贯的缩写。

例如: addr   address

            clk     clock

1.2避免使用保留字,如in/out/x/z等不能作为变量、端口或模块名

1.3模块内禁止同一信号在不同always逻辑块赋值。

1.4避免组合逻辑反馈。

如下:

1.5设计中常量之间保持关系。若一个常量取决于另一个常量的值,建议将相互关系在定义中体现出来。当一个宏定义一个算术表达式时,应该用圆括号括起来。

1.6常用的后缀名及含义

1.7多级寄存的信号(同一个时钟域),第一级以“_d1”结尾,后面依次“_d2”,“_d3”,并且其他类型的信号名进制使用该后缀。

1.8使用define和parameter定义的常量和参数用大写,所有的模块名,信号名,变量名和端口名用小写。

1.9一个always块内,只对一个寄存器变量赋值,或者对非常相关的一类信号赋值,避免不相关的信号同时赋值。

1.10不需要优先编码的情况下,推荐采用case语句来代替if语句。

case语句通常综合成一级多路复用器,而if-else则被综合成有优先编码的、相串联的多个多路复用器。

1.11由电平触发的always块中,在不需要锁存器的情况下,if和case语句要完全赋值,避免引入不必要的锁存器。

1.12可综合代码设计中,条件表达式不能出现“X”和“Z”;避免使用casex语句,有必要时才能使用casez语句。避免使用for循环语句。

1.13使用组合逻辑时,统一使用“always@(*)”的形式。

1.14always@(敏感表),注意敏感表要完整,保证仿真和综合结果相一致。

1.15用一个函数(function)来代替表达式的多次重复。如果代码中发现多次使用一个特殊的表达式,则采用一个函数来代替,便于版本升级及后续维护。同样,经常使用的一组描述可以写到一个任务(task)中。

1.16函数中避免使用全局变量,否则容易引起HDL行为级仿真和门级仿真的差异。

1.17状态机

 

>>点击这里返回导航页<<

 

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值