FPGA学习手记(二) 简单功能仿真及Verilog基础电路设计
By Nightmare 2011-07-30@Xinxiang
看了某兄的一篇文章,讲到学FPGA切不可急功近利,大概是受到STM32的C语言库快速入门的影响,在学习FPGA时,给自己制定了学习方针如是:掌握FPGA开发的一般流程 → 学习基本外设的设计方法 → NIOSII硬件系统的搭建→设计并DIY简单的项目 → ……
回首而顾,这不正是急功近利的典型例子?在经历了漫长的综合编译并成功在开发板上搭建NIOS II以后,发现自己并没有学会什么,自己不过是在将FPGA一步步转化成MCU来用。为了防止这弯路越走越深,开始学习基础的电路设计知识和Verilog用法,同时翻出了尘封已久的数电书(阿杜一定恨死朱红了,哈哈)。之后准备再了解一下Quartus下的仿真,以及Modelsim,如果没有用好仿真工具,也是会平添许多麻烦的。
把共性的东西用好以后再解决特性的问题,当然不能离开实际,在学的过程中动手操作。在余秋雨先生看来,读万卷书、行往里路就是要拿自己的理性与考察看待只是和脚下的路的关系,看时间与空间的关系,再反观书中谢谢是对的,那些没有写好。我很佩服这样的观点,现在做工程与搞理论的,如果埋头行路或是塞听读书,大概都是没有前途的吧。呵呵,又扯远了……
在学习电路之前,有必要先补充一些东西,即Quartus II的集成的一些非常实用的功能。
一、Netlist Viewers
还是以上一次的HelloFPGA为例,Quartus II除了提供HDL语言的开发环境,还提供了Netlist Viewers工具便于通过可视化界面直观的理解HDL语言在各层的表现形式(如寄存器传送级)。
Netlist Viewer工具包括RTL Viewer、Technology Map Viewer和State Machine Viewer三种,其位置在Task栏中,可分别通过双击相应的图标获取该视图。也可在工具栏的Tools→Netlist Viewers中找到。
其中RTL Viewer可生成寄存器传送级电路,双击RTL Viewer,可看到RTL视图如下:
由于这个模块的逻辑结构十分简单,只是将按键信号取反控制LED,基本不需要可视化图形的帮助就能理解,但是一些复杂的工程就需要这些工具的辅助。通过左侧的Hierarchy栏,可以将了解每一层的组成。
RTL只相当于一种中间形式的描述结构,而TechnologyMap Viewer描述了代码综合后的实际电路结构,由于本例的结构十分简单,所以和实际电路形式与RTL视图相同。下面是一个四路选择器的TechnologyMap视图,内部结构已经展开: