由于没有 51 单片机的基础,学 FPGA 时对数字逻辑一无所知,知识还停留在计算机一级B只知道与或非门的水平,果然这点基础让我一碰就栽了跟头。在安装 quartus 完软件之后,两三个月只学会了烧写光盘里提供的 sof 文件。
那时每当试图写点简单的项目,哪怕是一个简单的多路选择器,由于对 verilog 语法的不熟悉,经常出现各种莫名其妙的错误,这让我当时非常气妥。
言归正传,在上一篇中详细的介绍了怎样创建原理图工程,这篇同样使用原理图工程新建一个多路选择器,目的是学习使用图形输入的仿真工具输入仿真激励。
新建工程,并输入输入以下的原理图。
编译项目,会多出一个警告: Critical Warning (169085): No exact pin location assignment(s) for 4 pins of 4 total pins
意思是有四个引脚没有分配,这次我们只使用仿真,而不需要下载到板子上,因此没必要分配管脚。
编译成功后新建一个仿真波形文件,
双击主界面 Project Navigator Files 标签下的 waveform.vwf 文件打开仿真波形文件编辑器,空的如下:
在仿真波形文件编辑器中添加仿真的引脚,点击 Edit –> Insert –> Insert Node or Bus
点击 Node Finder...
点击 List,图为仿真引脚的选择工具,这里我们需要添加所有的引脚。完成后点 OK。
再点一次 OK
完成引脚添加工作,接下来设定仿真时间,有于 该编辑器的一个格子是 10 ns,这里我们设为 100 ns。
选择需要修改的时间段,修改为需要的高低电平,想下面这个样子就可以了(*^__^*)。
仿真波形编辑器中的箭头表示选择,可以框选需要修改的波形时间段,放大缩小按钮(左键放大、右键缩小)后面的按钮功能分别是,设为未知(X)、置为低电平、置为高电平、设为高阻,其他可以自己试一下。
接下来点击 Simulation –> Run Function Simulator 进行逻辑仿真。仿真结果如下:
可以看到,当 s = 0 时, y = a;当 s = 1 时,y = b。
这样仿真就结束,而且验证了我们画的的多路选择器是正确的。O(∩_∩)O
此外同样可以使用 verilog 语言描述一个多路选择器,代码如下,各位可以试试。
module mymux ( input wire a, //这里是逗号 input wire b, input wire s, output reg y //这里没有逗号 ); //这里是分号 always @ (*) //敏感信号列表,初学者打星号就可以了 begin if(s==1'b0) //两个等号表示判断是否相等 y = a; else y = b; end endmodule