quarterii4位数码管显示实验.docx
《quarterii4位数码管显示实验.docx》由会员分享,可在线阅读,更多相关《quarterii4位数码管显示实验.docx(12页珍藏版)》请在冰豆网上搜索。
quarterii4位数码管显示实验
quarter-ii-4位数码管显示实验
贵州大学实验报告
学院:
电气工程学院专业:
测控技术与仪器班级:
测仪131
姓名
学号
实验组
实验时间
2016.12.2
指导教师
成绩
实验项目名称
4位数码管显示实验
实验目的
通过利用硬件设计语言veriloag设计4位数码管显示电路、理解QuartusII平台进行硬件开发的方法、深入理解verilog语言及其设计方法。
实验要求
集中授课
实验原理
原理框图如下图4-1所示
FPGA控制数码管的动态扫描,采集数据和地址总线的数据,使能不同位的数码管,并将采集到的数据依次传送给段选译码模块,最后输出对应数字的段码,控制数码管显示对应总线的数据。
图4-1原理框图
实验仪器
PC机、QuartusII软件、KeilμVision2软件
实验步骤
1、首先,制作1位数码管显示电路,用verilong语言写。
moduleseg7(clk,rst_n,data,seg,sel);
inputclk;
inputrst_n;
input[3:
0]data;
outputreg[7:
0]seg;
outputreg[2:
0]sel;
always@(posedgeclkornegedgerst_n)
begin
if(!
rst_n)
begin
sel<=0;
end
else
begin
sel<=0;
end
end
always@(*)
begin
if(!
rst_n)
begin
seg=8'b1111_1111;
end
else
begin
case(data)
0:
seg=8'b1100_0000;
1:
seg=8'b1111_1001;
2:
seg=8'b1010_0100;
3:
seg=8'b1011_0000;
4:
seg=8'b1001_1001;
5:
seg=8'b1001_0010;
6:
seg=8'b1000_0010;
7:
seg=8'b1111_1000;
8:
seg=8'b1000_0000;
9:
seg=8'b1001_0000;
10:
seg=8'b1000_1000;
11:
seg=8'b1000_0011;
12:
seg=8'b1100_0110;
13:
seg=8'b1010_0001;
14:
seg=8'b1000_0110;
15:
seg=8'b1000_1110;
default:
seg=8'b1111_1111;
endcase
end
end
endmodule
测试模块
`timescale1ns/1ps
moduleseg7_tb;
regclk;
reg[3:
0]data;
regrst_n;
wire[7:
0]seg;
wire[2:
0]sel;
initial
begin
clk=1;
rst_n=0;
data=10;
#200.1
rst_n=1;
end
always#10clk=~clk;
seg7seg7(
.clk(clk),
.rst_n(rst_n),
.data(data),
.seg(seg),
.sel(sel)
);
Endmodule
2、例化元件
3、4位数码管的设计
Frep模块
modulefreq(
clk,
rst_n,
clk_1k
);
inputclk;
inputrst_n;
outputregclk_1k;
reg[19:
0]count;
always@(posedgeclkornegedgerst_n)
begin
if(!
rst_n)
begin
clk_1k<=1;
count<=0;
end
else
begin
if(count<24999)
count<=count+1;
else
begin
count<=0;
clk_1k<=~clk_1k;
end
end
end
endmodule
Seg7模块
moduleSEG7(
clk,
rst_n,
data,
seg,
sel
);
inputclk;
inputrst_n;
input[15:
0]data;
outputreg[7:
0]seg;
outputreg[2:
0]sel;
reg[3:
0]data_temp;
reg[2:
0]state;
always@(posedgeclkornegedgerst_n)
begin
if(!
rst_n)
begin
sel<=0;
data_temp<=0;
state<=0;
end
else
begin
case(state)
0:
begin
sel<=0;
data_temp<=data[15:
12];
state<=1;
end
1:
begin
sel<=1;
data_temp<=data[11:
8];
state<=2;
end
2:
begin
sel<=2;
data_temp<=data[7:
4];
state<=3;
end
3:
begin
sel<=4;
data_temp<=data[3:
0];
state<=4;
end
default:
state<=0;
endcase
end
end
always@(*)
begin
if(!
rst_n)
begin
seg=8'b1111_1111;
end
else
begin
case(data_temp)
0:
seg=8'b1100_0000;
1:
seg=8'b1111_1001;
2:
seg=8'b1010_0100;
3:
seg=8'b1011_0000;
4:
seg=8'b1001_1001;
5:
seg=8'b1001_0010;
6:
seg=8'b1000_0010;
7:
seg=8'b1111_1000;
8:
seg=8'b1000_0000;
9:
seg=8'b1001_0000;
10:
seg=8'b1000_1000;
11:
seg=8'b1000_0011;
12:
seg=8'b1100_0110;
13:
seg=8'b1010_0001;
14:
seg=8'b1000_0110;
15:
seg=8'b1000_1110;
default:
seg=8'b1111_1111;
endcase
end
end
endmodule
Top模块
moduletop(
clk,
rst_n,
data,
seg,
sel
);
inputclk;
inputrst_n;
input[15:
0]data;
output[7:
0]seg;
output[2:
0]sel;
wireclk_1k;
freqfreq(
.clk(clk),
.rst_n(rst_n),
.clk_1k(clk_1k)
);
SEG7SEG7(
.clk(clk_1k),
.rst_n(rst_n),
.data(data),
.seg(seg),
.sel(sel)
);
endmodule
测试模块
`timescale1ns/1ps
moduletop_vlg_tst();
//constants
//generalpurposeregisters
regeachvec;
//testvectorinputregisters
regclk;
reg[15:
0]data;
regrst_n;
//wires
wire[7:
0]seg;
wire[2:
0]sel;
//assignstatements(ifany)
toptop(
//portmap-connectionbetweenmasterportsandsignals/registers
.clk(clk),
.data(data),
.rst_n(rst_n),
.seg(seg),
.sel(sel)
);
initial
begin
clk=1;
rst_n=0;
data=15h123456;
#200.1
rst_n=1;
end
always#10clk=~clk;
endmodule
4、4位数码管的例化
实验内容
设计一个4位数码管显示电路:
要求在QuartusII软件平台上用verilog语言设计出一个4位数码管显示电路,并通过编译及仿真检查设计结果。
实验数据
一位数码管的仿真图像
4位数码管的仿真
实验总结
由于初次用到modelsim仿真软件,在使用过程中出现了很多问题,有的问老师和师兄,还有一部分只能通过网络上进行查询,所以花费的时间就很多,做起来难度很大,但是通过这次的学习我也学到了很多东西,多动手多动脑才能更好的学习。
指导教师意见
签名:
年月日