当前位置:文档之家› 中南大学EDA技术与Veriloghdl实验指导书

中南大学EDA技术与Veriloghdl实验指导书

中南大学EDA技术与Veriloghdl实验指导书
中南大学EDA技术与Veriloghdl实验指导书

实验1:Q u a r t u s I I基本设计流程体验实验

实验步骤:

1.启动QuartusII。

2.创建工程。

(1)选择File->NewProjectWizard命令

(2)输入工程库文件夹(注意:不要使用Quartus安装目录,不要使用路径中包含中文的目录,例如桌面等)。输入工程名:MUX41a

(3)跳过“添加文件”步骤。

(4)选择目标芯片(EP3C55F484C8)

(5)跳过“工具设置”步骤,点击“Finish”。

3.输入设计文件。

(1)选择“File->New”命令,选择VerilogHDLFile选项。

(2)在文本编辑器中输入4选一选择器的代码(使用Case语句)。

(3)选择File->SaveAs命令保存文件。

3.进行全程编译。编译过程中注意Processing窗口的编译信息。

4.查看编译报告。

扩展实验与思考:

1.将代码中Case语句修改为if-else语句,比较两者的编译结果(硬件资源使

用情况)。

2.将if-else语句改为不完整条件语句,再次编译后查看编译结果(1.查看综

合报告中的警告信息;2.利用Tools>NetlistViewers>RTLViewer查看结构图)。

实验2:ModelSim仿真实验1

实验步骤:

(1)启动Modelsim;

(2)选择File->New->Project建立新工程,工程目录指定为实验1所用目录,加入验证对象文件MUX41a.v;

(3)在Project窗口中选中设计文件,单击鼠标右键,选择Compile->CompileAll 编译源代码;如有编译错误,修改源代码;

(4)选择Simulate->StartSimulation或点击Simulate按键,选Library窗口中work->MUX41a,点击OK。

(5)在Object窗口中选择需要观察的信号,单击鼠标右键,选择

Add->ToWave->SelectedSingals,添加待观察信号至波形窗口;

(6)在Transcript窗口中使用force输入激励信号;例如:forceA0

(7)在Transcript窗口输入run命令或点击run按键执行仿真,查看结果. (8)改变激励信号,执行仿真并查看结果。

扩展实验与思考:

1.将设计文件改为第61页例3-17中的计数器电路,进行仿真,观察波形。其

中时钟信号的激励使用命令:forceclk00,150–repeat100

实验3ModelSim仿真实验2

1.实验目的:

学习使用描述语言生产激励信号的方法。

2.实验步骤:

(1)启动Modelsim;

(2)建立新工程,加入文件:教科书第290页中方法一所设计的三段代码:测试对象addr4.v,信号发生器signal_gen.v,仿真测试模块test_adder4.v

(3)编译源代码;如有编译错误,修改源代码;

(4)进入仿真状态,选择仿真模块;

(5)添加待观察信号至波形窗口;

(6)执行仿真,查看结果;

扩展实验:

1.参考第六章6.1,定制计数器模块,并设计测试模块testbench,创建新的

modelsim工程进行仿真测试。

实验4:LED驱动实验

实验步骤:

1.启动QuartusII建立一个空白工程,保存为led_test.qpf。

2.将test1\led.v、setup.tcl拷入工程目录。

3.将led.v加入工程并创建符号文件led.bsf。

4.建立图形设计文件led_test.bdf,放入led模块,添加输出引脚,并命名为led[7..0],将led输出与输出引脚相连。

5.参考setup.tcl进行引脚锁定,将未使用的引脚设置为三态输入(必须)。在led_test.bdf中可以察看引脚锁定情况。

6.将led_test.bdf设置为顶层模块,进行全程编译,察看编译报告。

7.确保JP6上的LED0-LED7已通过跳线与FPGA引脚相连。

8.打开电源,将led_test.sof下载至FPGA,观察LED1-LED8的亮灯状态是否与设计吻合。

扩展实验与思考:

1.修改led.v中代码,重新编译下载后,观察LED的状态变化。

实验5:流水灯

实验步骤

1.启动QuartusII建立一个空白工程,保存为led_water.qpf.

2.将test2\ledwater.v、int_div.v、setup.tcl拷入工程目录。

3.将ledwater.v、int_div.v加入工程并创建符号文件led.bsf、int_div.bsf。

4.建立图形设计文件led_water.bdf,放入ledwater、int_div模块;添加输入输出引脚,将输入引脚命名为clock,将输出引脚命名为led[7..0];将输入引脚clock与int_div的clock输入、int_div的clk_out输入与ledwater的clk 输入、ledwater的led输出与输出引脚led

5.参考setup.tcl进行引脚锁定,将未使用的引脚设置为三态输入(必须)。在led_water.bdf中可以察看引脚锁定情况。

6.将led_water.bdf设置为顶层模块,进行全程编译,察看编译报告。

7.确保JP6上的LED0-LED7已通过跳线与FPGA引脚相连。

8.打开电源,将led_water.sof下载至FPGA,观察LED1-LED8的亮灯状态是否与设计吻合。

扩展实验与思考:

1.修改ledwater.v中代码,重新编译下载后,观察LED的状态变化。

2.ledwater.v中缺少复位信号,为何流水灯能够正常显示?如果需要增加复位信号,如何修改设计?(reset的引脚分配为PIN_B11)。

3.使用状态机设计流水灯。

实验6:读取按键信号

实验步骤:

1.启动QuartusII建立一个空白工程,保存为keyled.qpf.

2.将test3\keyled.v、setup.tcl拷入工程目录。

3.参考setup.tcl进行引脚锁定,将未使用的引脚设置为三态输入(必须)。

5.将keyled.v设置为顶层模块,进行全程编译,察看编译报告。

6.确保JP6上的LED0-LED7已通过跳线与FPGA引脚相连,将JP6的KEY1-KEY8

通过跳线与D6的SW1-SW8相连。

7.打开电源,将keyled.sof下载至FPGA,观察LED1-LED8的亮灯状态,按下KEY1-KEY8的任意一键,观测LED的状态。

扩展实验与思考:

1.修改keyled.v中寄存器赋值,重新编译下载后,观察LED的状态变化。

2.如果keyled.v中的case语句缺少default,会产生什么电路?修改重新编译后观测编译报告,并下载到FPGA,同时按下2个键观察LED的状态。

实验7:按键去抖动

实验步骤:

1.启动QuartusII建立一个空白工程,保存为key_debounce.qpf.

2.将test4\debounce.*、int_div.*、decl7s.*、setup.tcl拷入工程目录。

3.将debounce.v加入工程并创建符号文件debounce.bsf。

4.使用MegaWizardPlug-InManager加入宏功能模块counter(4位递增计数器LPM_COUNTER)。

5.建立图形设计文件dled.bdf,放入int_div、debounce、and2、counter、decl7s 模块;添加输入引脚clock,与int_div的clock输入相连;添加输入引脚key1,

与debounce的key_in输入相连;添加输入引脚key2,与and2的一个输入相连;添加输出引脚seg[7..0],与decl7s的输出seg相连;添加输出引脚dig[7..0],添加GND与之相连;将int_div的clk_out输入与debounce的clk输入、debounce 的输出与and2的另一输入、and2的输出与counter的输入、counter的输出与decl7s相连。设置int_div的分频参数F_DIV=240000,F_DIV_WIDTH=18,设置debounce的参数KEY_WIDTH为1。

5.参考setup.tcl进行引脚锁定,将未使用的引脚设置为三态输入(必须)。在key_debounce.bdf中可以察看引脚锁定情况。

6.将key_debounce.bdf设置为顶层模块,进行全程编译,察看编译报告。

7.确保JP6上的KEY1-KEY2已通过跳线与FPGA引脚相连。

8.打开电源,将key_debounce.sof下载至FPGA,连续按下K1,看数码管数值是否连续递增;连续按下K2,看数码管数值是否连续递增.

扩展实验与思考:

1.为何连续按下K2的结果不是连续递增?

实验8:静态数码管显示

实验步骤

1.启动QuartusII建立一个空白工程,保存为sled.qpf.

2.将test5\decl7s.v、int_div.v、setup.tcl拷入工程目录。

3.将decl7s.v、int_div.v加入工程并创建符号文件decl7s.bsf、int_div.bsf。

4.使用MegaWizardPlug-InManager加入宏功能模块counter(4位递增计数器LPM_COUNTER)。

5.

5.参考setup.tcl进行引脚锁定,将未使用的引脚设置为三态输入(必须)。在sled.bdf中可以察看引脚锁定情况。

6.将sled.bdf设置为顶层模块,进行全程编译,察看编译报告。

7.打开电源,将sled.sof下载至FPGA,观察数码管的显示状态。

扩展实验与思考:

1.将上述第4步改为自己设计的代码,重新编译后下载到FPGA,观测结果是否正确。

2.是否需要复位信号?有复位信号与无复位信号有什么不同?

实验9:动态数码管显示

实验步骤

1.启动QuartusII建立一个空白工程,保存为dled.qpf.

2.将test6\scan_led.v、int_div.v、setup.tcl拷入工程目录。

3.将scan_led.v、int_div.v加入工程并创建符号文件scan_led.bsf、

int_div.bsf。

4.使用MegaWizardPlug-InManager加入宏功能模块constant

(LPM_CONSTANT,32’

5.建立图形设计文件dled.bdf,放入int_div、constant、scan_led模块;添加输入引脚clock,与int_div的clock输入相连;添加输出引脚dig[7..0]、seg[7..0],分别与scan_led的输出dig、seg相连;将int_div的clk_out输入与scan_led的clk_lk输入、constant的输出与scan_led的输入d相连。设置int_div的分频参数F_DIV=48000,F_DIV_WIDTH=16。

5.参考setup.tcl进行引脚锁定,将未使用的引脚设置为三态输入(必须)。在dled.bdf中可以察看引脚锁定情况。

6.将dled.bdf设置为顶层模块,进行全程编译,察看编译报告。

7.打开电源,将dled.sof下载至FPGA,观察数码管的显示状态。

扩展实验与思考:

1.

2.scan_led.v中使用了两个always过程语句,第二个是否可以改写为assign 语句?修改后重新编译下载,察看结果是否相同,察看编译报告中硬件资源使用情况的变化。

3.用自己设计的代码替换上述第4步。

4.以32位计数器代替constant。

实验10交通灯实验

1.实验目的

通过此实验让用户进一步了解、熟悉和掌握CPLD/FPGA开发软件的的使用方法及VerilogHDL的编程方法。学习简单状态机的设计和硬件测试。

2.实验内容

本实验的内容是设计一个简易的交通灯控制器,要求能实现红、绿、黄灯三种信号的控制并通过数码管显示倒计时时间。整个设计在SmartSOPC实验箱上实现,用第一、第二个数码管显示A方向的倒计时时间,用第七、第八个数码管显示B方向的倒计时时间。此外,由于缺少交通灯模块,本实验用第一、第二、第三个LED灯代表A方向的红、绿、黄灯三种信号,用第六、第七、第八个LED灯代表B方向的红、绿、黄等三种信号。

3.实验原理

本实验设计的交通灯控制器要求实现对A、B两个方向的红、绿、黄灯三种信号的控制,并能实现时间显示的倒计时。因此每个方向的信号可用一个状态机实现(参考交通灯.ppt),状态的跳转顺序为红灯-绿灯-黄灯-红灯(另一个的状态应为绿-黄-红-绿),同时设计一个计时器,来记录每种灯的倒计时时间。最后将交通灯的状态信息输出至数码管和对应LED灯。注意,一个方向的红灯时间应和另一个方向的绿黄灯时间总和相等。

4.实验步骤

1)启动QuartusII建立一个空白工程,然后命名为traffic_test.qpf(器件为:

EP3C55F484C8)。

2)加入并完成交通灯控制模块traffic_ctrl.v,加入顶层模块traffic_test.v及交通灯显示模块traffic_display.v,进行综合编译,若在编译过程中发现错

误,则找出并更正错误,直至编译成功为止。

3)运行引脚绑定脚本文件setup.tcl;

4)对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

5)确保JP6上的LED0-LED7已通过跳线与FPGA引脚相连。

6)按核芯板上的复位按键,观察交通灯是否正常运作。

5.结构图

5.程序清单:

traffic_test.v(已完成),traffic_ctrl.v(未完成),traffic_display.v(已完成)。

相关主题
文本预览
相关文档 最新文档