电子科技大学
实
验
报
告
学生姓名:
学号:
指导教师:黄敏
实验地点:主楼C2-514
实验时间:(1班)
一、实验室名称:虚拟仪器实验室
二、实验项目名称:3-8 译码器实验
三、实验学时:4学时
四、实验原理
开发板上共四个按键:SW3~SW6,其中SW3 为总开关;SW4、SW5、SW6 作为三个译码输入。
本实验3-8 译码器所有的接口如下。
input ext_clk_25m, //外部输入25MHz 时钟信号
input ext_rst_n, //外部输入复位信号,低电平有效
input[3:0] switch, //4个拨码开关接口,ON -- 低电平;OFF -- 高电平。
SW3 为总开关;SW4、SW5、SW6 的三个译码输入
output reg[7:0] led //8 个LED 指示灯接口
注:X 表示ON 或OFF,即任意状态。
五、实验目的
熟悉利用HDL代码输入方式进行电路的设计和仿真的流程,掌握Verilog语言的基本语法。
并通过一个3-8译码器的设计把握利用EDA软件(Quartus II 13.1)进行HDL代码输入方式的电子线路设计与仿真的详细流程。
六、实验内容
利用HDL代码输入方式在Quartus II 13.1平台上实现一个3-8译码器设计,并进行仿真,然后生成配置文件下载到开发板上进行验证。
七、实验器材(设备、元器件)
1. 计算机(安装Quartus II 13.1& ModelSim13.1软件平台);
2. Cyclone IV FPGA开发板一套(带Altera USB-Blaster下载器)。
八、实验步骤
(1)新建工程,设置器件属性:在Quartus II 13.1平台中,新建一个工程(注意命名规范),在“Family”中选择“Cyclone IV E”系列,“Available
device”中选择具体型号“EP4CE6E22C8”,设置好器件属性。
在EDA
Tool Settings 页面中,可以设置工程各个开发环节中需要用到的第三方
(Altera 公司以外)EDA 工具,我们只需要设置“Simulation”工具为
“ModelSim-Altera”,Format 为“Verilog HDL”即可,其他工具不涉及,
因此都默认为<None>。
(详见实验指导书)
(2)Verilog源码文件创建与编辑:点击菜单栏的“File→New…”,然后弹出如图所示的新建文件窗口,在这里我们可以选择各种需要的设计文
件格式。
可以作为工程顶层设计文件的格式主要在Design Files 类别下,
我们选择Verilog HDL File(或者VHDL File)并单击OK完成文件创
建。
将新建的文件保存后通过菜单栏“Project→Add/Remove Files in
Project”将刚刚创建的文件加入新建的工程中,点击“Add”加入后选
择OK按钮。
(详见实验指导书)
(3)Modelsim仿真验证:将工程编译,无误后,采用第三方EDA仿真工具Modelsim进行仿真。
1)设置路径:点击Tools →Options…”,进
入选项卡“General EDA Tool Options”,设置“Modelsim-Altera”后面
的路径,即我们安装Modelsim 时的路径;2)完成测试脚本创建与编
辑;3)测试脚本关联设置;4)调用Modelsim进行功能仿真和时序仿
真。
(详见实验指导书)
(4)管脚分配:根据文档“SF-CY4 FPGA学习板原理图Ver2.0”对3-8译码器的进行引脚分配。
(详见实验指导书)
(5)综合、实现与配置文件产生综合。
(详见实验指导书)
(6)FPGA在线下载配置:1)连接开发板并给开发板供电;2)开启Programmer 界面;3)识别USB-Blaster;4)执行在线下载操作。
(详
见实验指导书)
(7)拨动开发板对应按钮,观察输出是否符合预期。
(8)给开发板断电,清理器件,实验结束。
九、实验数据及结果分析
9.1 用Verilog HDL语言编写3-8译码器源码如下:
module txt1(
input ext_clk_25m,
input ext_rst_n,
input [3:0] switch,
output reg[7:0] led
);
always@(posedge ext_clk_25m or negedge ext_rst_n)
if(!ext_rst_n)
led<=8'hff;
else if(switch[0])
led<=8'hff;
else begin
case(switch[3:1])
3'b111:led<=8'b1111_1110;
3'b110:led<=8'b1111_1101;
3'b101:led<=8'b1111_1011;
3'b100:led<=8'b1111_0111;
3'b011:led<=8'b1110_1111;
3'b010:led<=8'b1101_1111;
3'b001:led<=8'b1011_1111;
3'b000:led<=8'b0111_1111;
default:;
endcase
end
endmodule
9.2 TestBench源码如下:
parameter PERIOD=40;
always begin
#(PERIOD/2) ext_clk_25m=0;
#(PERIOD/2) ext_clk_25m=1;
end
initial begin
ext_rst_n=0;
switch=4'b0000;
#10000;
ext_rst_n=1;
end
always #100 switch[0]=~switch[1];
always #40 switch[3:1]=switch[3:1]+1;
9.3 提供仿真波形并对波形进行文字说明:
9.3.1 功能仿真总体波形图1(波形上同时体现switch[0] = 1和switch[0]
= 0两种情况):
9.3.2 功能仿真波形图2(switch[0] = 1)
当switch[0] = 1时,无论输入switch[3:1]如何变化,输出led始终保持不变,即所有的灯不亮。
9.3.3 功能仿真波形图3(switch[0] = 0)
当switch[0] = 0时,输出状态随着switch[3:1]的变化而变化,需要覆盖到所有led都曾点亮的情况。
9.3.4 时序仿真总体波形图(波形上需要体现延时情况)
9.4 根据原理图完成管脚分配(提供管脚分配截图)
输入端口:时钟复位/按键SW3~ SW6:
输出端口:
图 1 管脚分配对应关系图
根据上面原理图对应关系,可以得到对应得到输入/输出端口对应的管脚,双击每个信号对应的Location部分,输入对应的管脚即可完成分配。
分配好的如下图所示:
图 2 管脚分配图
9.5 FPGA在线下载配置(在开发板上观察实验结果)
十、实验结论
通过本次实验设计并仿真了3-8译码器,且在板子上成功进行了验证!
十一、实验中遇到的问题及相应的解决办法
(1)程序BUG较多
答:写程序时应多注意细节
报告评分:
指导教师签字:。