实训 2:数据选择器的 FPGA
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
与实现
问题提出:数据选择器是一种可以从多个输入信号中选择一个信号作为输出的器件。最简单
的电路为二选一。使用 Verilog 设计实现二选一数据选择器,使用软件仿真验证代码的正确
性,并使用 FPGA验证结果。
1. 逻辑抽象
假设 A、B 为输入,控制信号为 S,输出为 F。当 S=0 时,F=A;当 S=1 时,F=B。FPGA
实现时,使用 3个按键分别代表 A、B和 S,一个 LED灯代表 F,利用不同的组合即可验
证代码的正确性。
2. 列出真值表
S A B F
0 X X A
1 X X B
得到:F=AS + BS
&0
0
0
&0
0
0
A
B
S F
3. 使用 Quartus 8.0建立项目,建立过程和注意事项见前两周的实验指导,选择器件时随便
指定一个。这里的项目名称为 mux21。(切记项目保存路径和实验过程中新建的文件保
存路径都不要出现中文)
4. 项目建好后,新建 Verilog
选择“File”——“New”——“Verilog HDL file”。输入以下代码
保存 verilog 文件,并命名为 mux21。上述方式为数据流描述方式。思考:为什么叫数据流
标书方式?
5. 编译项目。“Processing”——“Start Compilation”
6. 功能仿真
编译通过后,新建波形仿真文件:“File”——“New”,选 择“Vector Waveform File”,如 下
图所示:
在出现的编辑界面左侧右键,选择如下:
在“Insert Node or Bus”里选择“Node Finder…”
在弹出来的“Node Finder”中,首先在“Filter”中选择“Pins: Unassigned”,然后点击“list”,
在“Nodes Found”中会列出所有的引脚,第三步选择全部引脚(鼠标拉),点击“>>”,最
后点击“OK”即可。在回到的“Insert Node or Bus”界面点击“OK”。
这时候会看到所有的引脚会列出来,如下所示,四个输入默认为低电平,输出状态未知。
由实验原理可知,为了得到 A、B、S三个信号不同的组合,设置 A为 10ns周期信号,B为
20ns周期信号,S为 40ns周期信号。设置方法如下:
选择输入“A”,点击右键,选择“Value”——“Clock”。
在 Clock中设置周期为 10ns。如下所示:
按设置完成后,如下所示:
保存波形文件,路径不要有中文!
添加完激励信号后,选择“Processing”—“Simulator Tool”,在 “Simulation mode”中选择
“Functional”,再点击“Generate Functional Simulation Netlist”。然后 选择“Overwrite simulation
input file with simulation result”,点击“Start”开始仿真。
仿真成功后,回到波形文件,会弹出提示如下:
选择“是”来更新仿真结果,如下图所示:
根据仿真结果分析,例如在红线所在位置,S=1,因此 F应该等于 B。这时候 B的值为 0,因
此 F=0,结果正确。也可以从其他任意位置分析,看电路是否符合要求。
7. 指定引脚
点击“File”——“Save Project”,然后关闭 quartus 8.0。打开 Quartus 11.0,选择“Open
Project”,找到上面保存的项目。项目打开后,首先更换器件,方法如下:点击项目中
器件(刚才随便指定的),右键,选择“Device”
在弹出来的器件选择界面中,在 Family栏选择 Cyclone IV E,右边 Package处选择“FPGA”,
然后在列表中找到需要的 EP4CE30F23C08器件,点击 OK。
器件选择后,需要重新编译程序:“Processing”——“Start Compilation”。
编译通过后,查看开发板使用手册,指定引脚。A、B、S对应 SW0至 SW2,引脚分别为:
C2、F1、F2,。LED_OUT对应 LEDG0,引脚为 J2。“Assignments”—“Pin Planner”。
8. 设置其他没有使用的引脚为接地状态
第一步,在项目导航栏中选择器件名称,右键选择“Device”;第二步,在弹出框中选择
“Device and Pin Options”
在“Category”中选择“Unused Pins”,将所 有“Reserve all unused pins”设置为“As output
driving ground”,点击“OK”。
最后编译项目。“Processing”——“Start Compilation”。
9. 烧写程序。“Tools”——“Programor”。检查是否有编程器 USBBlaster,然后按“Start”
开始烧写程序。
10. 在开发板上检验实验结果,拨动开关至不同状态,查看 LED灯是否符合设计要求。拍照,
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
实验结果。未能得到预期实验结果的同学思考各个步骤,排除错误。
扩展实验部分:
1. 使用行为描述实现二选一电路。
所谓行为级描述,就是使用 always或者 initial过程块实现电路功能。
其他设置全部不要改变,回到 Verilog代码,将原来的代码改写为下述代码:
重新编译代码:“Processing”——“Start Compilation”。
下载代码到 FPGA,看电路是否按照要求工作。
思考以下几点:reg是什么关键词?always的用法、格式?
2. 使用结构描述方式完成数据二选一电路。
由于 F的表达式为:F=AS + BS
实现上述电路一共需要 1个非门、2个与门和 1个或门,电路图如下:
&0
0
0
&0
0
0
A
B
S Fnot_s
andcntrl1
andcntrl2
其他设置全部不要改变,回到 Verilog代码,将原来的代码改写为下述代码:
代码主体部分中的 not、and和 or是 quartus中已经定义好的基本门电路,代码相当于直接
调用。这点非常重要,意味着写好了一个电路的代码,如果它可以作为其他更复杂电路的一
部分,直接调用即可。这样不管怎么复杂的电路,都可以由一个一个的小电路“堆砌”而成,
这就是 Verilog的核心思想,“建模”!更复杂的用法将在后面的学习中接触,这里不必深究。