Verilog入门经验分享
作为一名数字电子技术学生对Verilog HDL语言的学习经验分享
数电基础
- 逻辑代数基础.
- 组合逻辑电路:各种门电路,一些常用电路比如数据选择器,加法器,编码器,译码器,比较器等要十分熟练,要会看电路推导逻辑表达式和真值表,也要熟练逆推.
- 时序逻辑电路:双稳态电路,锁存器,触发器,寄存器,一些常用电路比如移位寄存器,计数器等要十分熟练,状态转移图/状态机要十分熟练,要会看电路图推波形图,也要熟练逆推.
Verilog基础
- Verilog基础语法和关键字
菜鸟教程
中科大Verilog语法入门 - 重要:对Verilog HDL要理解其硬件设计的基本概念,即”实例化+连线”,避免使用行为建模方法,避免使用不可综合语句.
如何从电路设计角度入门Verilog
! 强烈建议初学者不要使用行为建模方式设计电路
Verilog一开始并不是为了设计可综合电路而提出的,它的本质是一门基于事件队列模型的电路建模语言。因此,行为建模很容易会让初学者偏离描述电路的初衷: 开发者需要看着电路图,心里想象电路的行为,然后转化成事件队列模型的思考方式,最后再用行为建模方式来描述电路的行为,综合器再来根据这样的描述推导出相应的电路。从这个过程来看,这不仅是没有必要的,而且还很容易引入错误:- 如果开发者心里本身就已经有电路图,直接描述它是最方便的
- 如果开发者心里本身就已经有电路图,而开发者对行为建模方式的理解所有偏差,可能会采用了错误的描述方式,从而设计出非预期的电路
- 如果开发者心里没有电路图,而是期望通过行为建模方式让综合器生成某种行为的电路,这就已经偏离“描述电路”的本质了。大部分同学非常容易犯这样的错误,把行为建模当作过程式的C语言来写,尝试把任意复杂的行为描述映射到电路,最终综合器只会生成出延迟大,面积大,功耗高的低质量电路
所以,直到大家掌握“描述电路”的思维而不被行为建模误导之前,我们强烈建议初学者远离行为建模方式,仅通过数据流建模和结构化建模方式直接描述电路。例如,上文关于if和always的说法从某种程度上来说是正确的,但下面的问题可以帮助大家测试自己是否已经掌握了Verilog的本质:
- 在硬件描述语言中,“执行”的精确含义是什么?
- 是谁在执行Verilog的语句? 是电路,综合器,还是其它的?
- if的条件满足,就不执行else后的语句,这里的“不执行”又是什么意思? 和描述电路有什么联系?
- 有“并发执行”,又有“顺序执行”,还有“任何一个变量发生变化就立即执行”,以及“在任何情况下都执行”,它们都是如何在设计出来的电路中体现的?
如果你无法对这些问题作出明确的回答,我们强烈建议你不要使用行为建模方式。如果你真的想弄懂它们,你需要阅读 Verilog标准手册 。
真正的描述电路 = 实例化 + 连线
忘记行为建模方式,就可以很容易回归到描述电路的简单本质。想象一下,你手中有一张电路图纸,如果你需要向其它人描述图纸上的内容,你将会如何描述? 你一定会说出类似“有一个A元件/模块,它的x引脚和另一个B元件/模块的y引脚相连”的描述,因为这才是描述电路的最自然的方式。用HDL设计电路,就是在用HDL来描述电路图纸,图纸上有什么,就直接描述什么。所以,用HDL描述电路,无非是做两件事情:- 实例化:在电路板上放一个元件/模块,可以是一个门电路,或者是由门电路组成的模块
- 连线:用导线将元件/模块的引脚正确地连起来
大家可以体会一下,数据流建模和结构化建模是如何体现这两件事的,而行为建模又是如何把这两件简单的事情复杂化的。
硬件设计思维
- 多用Logisim/Modelsim画电路/写Verilog,跑仿真,看波形
- 跟着这款游戏Turing Complete学习也未尝不可
多上手实践
- Verilog刷题网站:HDLBits
- 南京大学的数字电路与计算机组成实验
- 上板练习,练习工程能力:野火/小梅哥/…的FPGA课程
- Verilog基础语法和关键字
进阶:时序约束与优化
竞争冒险,建立/保持时间,时序约束与时序优化…
Verilog入门经验分享
http://example.com/2025/05/08/Verilog入门经验分享/