中南大学EDA技术与Veriloghdl实验指导书剖析 下载本文

实验1: QuartusII基本设计流程体验实验

实验步骤:

1. 启动QuartusII。 2. 创建工程。

(1)选择File->New Project Wizard命令

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

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

(5)跳过“工具设置”步骤,点击“Finish”。 3. 输入设计文件。

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

(2)在文本编辑器中输入4选一选择器的代码(使用Case语句)。 (3)选择File->Save As命令保存文件。

3. 进行全程编译。编译过程中注意Processing窗口的编译信息。 4. 查看编译报告。

扩展实验与思考:

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

2. 将if-else语句改为不完整条件语句,再次编译后查看编译结果(1.查看综合报告中的警告信息;2.利用Tools>Netlist Viewers>RTL Viewer查看结构图)。

实验2: ModelSim仿真实验1 实验步骤:

(1)启动Modelsim;

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

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

(4)选择Simulate->Start Simulation或点击Simulate按键,选Library窗口中work->MUX41a,点击OK。 (5)在Object窗口中选择需要观察的信号,单击鼠标右键,选择Add->To Wave-> Selected Singals,添加待观察信号至波形窗口;

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

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

扩展实验与思考:

1. 将设计文件改为第61页例3-17中的计数器电路,进行仿真,观察波形。其中时钟信号的激励使用命令:force clk 0 0,1 50 –repeat 100

实验3 ModelSim仿真实验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相连;设置int_div的分频参数F_DIV=24000000,F_DIV_WIDTH=25。

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的状态变化。