这篇CSDN博客有详细讲述。这块其实有很多地方可以展开写,它是把一个功能落地的最主要的步骤。笔者在这里说一点个人理解。
要先去想为什么会有verilog代码这类硬件描述语言。从发展的历史来看,一开始的工程师是通过画电路图来实现芯片内部结构的描述的,但是随着电路越来越复杂,已经不太可能去靠人工来把电路画出来。需要靠EDA工具,来帮助工程师画电路。所以如果你特别秀,能手画上亿逻辑门,直接写门级网表也不是不可能(手动滑稽)。
从这个角度出发,在写RTL代码的时候,一定不能和写C代码的思维一样,不能简单的想成数据的流动变化,应该把写Verilog等语言的过程想象成画电路图。在画图(写代码)的时候,就尽量往优化PPA(power performance area)的方向去靠,好的硬件代码不是靠代码长度决定(当然简洁易懂的代码看着舒服),而是综合以后电路图的PPA决定的。同时,在写的时候,也要注意Verilog中哪些语句是可综合的,要带着电路的思维去写RTL。
一个典型电路通常包括寄存器(时序逻辑)描述、组合逻辑描述、时钟域描述。在描述时序逻辑时,我们采用非阻塞赋值<=;描述组合逻辑时,采用阻塞赋值=。
接下来会单开一个系列《典型的数字IC电路》来介绍一些常见的数字IC电路设计,包括状态机、fifo、握手协议、总线协议等。这个系列应该算是浅谈数字IC前端设计4-RTL设计的子系列,博主浅谈数字IC前端设计后续打算写常用工具、静态时序分析、验证等。