数字电路设计之RTL编码指导原则

2019-04-13 11:28发布

一、performance:要满足所需逻辑功能以及时序要求。这是最重要的一项,要是连这个都不满足,那么做这个项目就没有了意义。不过在满足这个performan的过程中会遇到一些问题,比如下面的都是在写HDL的功能上需要注意的地方。如果要有较高的frequency的话,可以考虑并行处理,流水线之类的。

阻塞/非阻塞:“=”用于组合逻辑;“<=”用于时序逻辑。 不完全敏感清单:always@(*)是利用了所有的信号,这样做不容易遗漏信号。 RTL的延时:延迟是不可以综合的,可以考虑加buffer,buf可以有延时效果。使用#delay是无效的。 锁存器:不完整的case和if语句会导致锁存器,一般不要有锁存器,会导致时序的混乱。 代码的循环利用:尽量写成可循环利用的模块,可以提高代码利用率,减少面积和功耗。 状态机:Moore机由当前状态决定输出,通常用one-hot代码,输出译码逻辑少。Mealy机由当前状态和当前输入决定下一状态,一般使用二进制编码!但是比较快! 避免触发器混合用:如果正负时钟沿用于捕捉或提供外部DDR数据,利用I/ODDR。
二、resource:就是实现我们的功能我们希望尽量减少资源的使用,提高资源的利用率。我们希望用最少的资源做最多的事,这为我们的设计降低了成本。我们可以在综合设置选项中关闭逻辑复制(logic replication)综合选项。我们要尽量减少寄存器的使用,一些工程师跟我说寄存器往往是最宝贵的资源,尽量节约一些。所以编程的时候尽量用wire,不要用reg的资源。不是很必要的话,尽量减少流水线级数,多使用SRLs,DSP slices和block RAMs等专有硬件资源代替。
三、power:如今移动设备越来越轻量化,对于功耗提出了更高的要求,除了电池的单位存储量越来越大之外,还可以使得硬件的低功耗运行状态,具体技术可以看我之前的博客。那些方法都是从很多论文里看到的,理论简单,都是效果很好。还推荐大家看一本书《power essential》,这本书从物理模电级别,COMS到数字电路的RTL再到架构都有进行低功耗处理,应该是目前为数不多的几本低功耗书籍,你可以看看亚马孙的价格都要上千的。(不过可以向我要电子版!!!)只有英文版,写得真是不错!