中国石油大学 数电课程设计Word文档下载推荐.docx
《中国石油大学 数电课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《中国石油大学 数电课程设计Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
在显示时间小于等于3秒的时候,通车方向的黄灯闪烁。
在东西向绿灯期间,点阵显示自己的姓名;
在南北向绿灯期间,点阵显示自己的学号后3位。
三、具体要求:
本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱的交通灯模块和七段码管中的任意一个或两个来显示。
系统时钟选择时钟模块的50MHz时钟,黄灯闪烁时钟要求为2Hz,七段码管的时间显示为1Hz脉冲,即每1s中递减一次,在显示时间小于等于3秒的时候,通车方向的黄灯以2Hz的频率闪烁。
显示方式:
1秒显示一个汉字或者一个数字(汉字和数字均静止不动,即不循环),然后全暗1秒,然后再显示一个汉字或者一个数字,以此类推。
扩展要求:
利用拨动开关K1扩展时间0-9至0-30s。
实验箱中用到的数字时钟模块、按键开关、数码管、点阵与FPGA的接口电路,以及数字时钟源、按键开关、数码管、点阵与FPGA的管脚连接在以前的实验中都做了详细说明,这里不再赘述。
交通灯模块原理与LED灯模块的电路原理一致,当有高电平输入时LED灯就会被点亮,反之不亮。
只是LED发出的光有颜色之分。
四、输入输出资源说明:
1、外部输入脉冲信号时钟源CP(50MHz),经适当分频后供计数器使用。
2、输出1组显示译码信号(每组7个输出端),接到外部的两个七段数码管上,显示倒计时;
(扩展要求)或输出2组显示译码信号(每组7个输出端),分别接到外部的两个七段数码管M1、M2上,M1和M2分别显示30秒倒计时的十位和个位。
3、输出6个高低电平信号,分别接到外部的6个指示纵向、横向的LED灯。
(输出高电平时,对应的LED灯亮)
4、扩展要求:
利用拨动开关K1将时间0-9s扩展为0-30s(黄灯仍然只在0-3s内闪烁)
其具体框图如下:
图1交通灯控制电路结构框图
根据如上说明,本设计的主要任务和设计要求是:
1、按照现代数字系统的Top-Down模块化设计方法,提出交通灯控制电路设计系统的整体设计方案,并进行正确的功能划分,分别提出并实现控制器、计数器、输出译码、点阵显示等模块化子系统的设计方案。
2、在QuartusⅡ的EDA设计环境中,完成系统的顶层设计、各子系统的模块化设计。
分别完成各个基于Verilog语言实现的子模块(包括控制器电路、计数器电路、输出译码电路、点阵显示电路)的逻辑功能仿真。
最后对顶层设计进行功能仿真。
3、在2步的基础上,用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。
观察实验结果是否与自己的编程思想一致。
5、电路设计、仿真与综合
一、分频器
(1)、源代码
modulefenpin(clk,clk1,clk2,clk1000);
inputclk;
outputclk1,clk2,clk1000;
reg[31:
0]cnt1,cnt2,cnt3;
regclk1,clk2,clk1000;
initial
begin
clk1=0;
clk2=0;
clk1000=0;
cnt1=0;
cnt2=0;
cnt3=0;
end
always@(posedgeclk)
begin
if(cnt1==24999999)
clk1<
=~clk1;
cnt1<
=0;
end
else
=cnt1+1;
if(cnt2==12499999)
clk2<
=~clk2;
cnt2<
=cnt2+1;
if(cnt3==24999)
clk1000<
=~clk1000;
cnt3<
=cnt3+1;
endmodule
(2)元件
(3)仿真波形
因把50MHZ分成1HZ波形显示不出来,所以把分频倍数减小1000倍,用于检验。
二、倒计时
(1)源程序
moduledaojishi(clk,out);
output[3:
0]out;
reg[3:
out<
=4'
b1001;
begin
if(out==4'
b0000)
out<
else
=out-1;
end
(3)波形仿真
3、控制器
modulekongzhi(clk,hong1,hong2,huang1,huang2,lv1,lv2);
outputhong1,hong2,huang1,huang2,lv1,lv2;
reg[4:
0]cnt1,cnt2;
reghong1,hong2,huang1,huang2,lv1,lv2,k;
hong1<
=1;
hong2<
huang1<
huang2<
lv1<
lv2<
cnt1<
=20;
cnt2<
=19;
if(cnt1==10)
=~hong1;
lv1<
=~lv1;
=cnt1-1;
k=1;
elseif(cnt1==3)
huang1<
=~huang1;
elseif(cnt1==0)
if(cnt2==19)
hong2<
=~hong2;
lv2<
=~lv2;
=cnt2-1;
k=0;
elseif(cnt2==12)
huang2<
=~huang2;
elseif(cnt2==9)
elseif(cnt2==0)
四、译码器
moduleyimaqi(in,clk,out);
input[3:
0]in;
output[6:
reg[6:
case(in)
4'
b0000:
out=7'
b0000001;
b0001:
b1001111;
b0010:
b0010010;
b0011:
b0000110;
b0100:
b1001100;
b0101:
b0100100;
b0110:
b0100000;
b0111:
b0001111;
b1000:
b0000000;
b1001:
b0000100;
endcase
5、点阵
moduledianzhen(clk,cin,en1,en2,r,c);
inputclk,en1,en2;
input[3:
0]cin;
reg[3:
0]cnt;
output[15:
0]r;
0]c;
reg[15:
always@(posedgeclk)
if(cnt==15)
cnt=0;
cnt=cnt+1;
if(en2==1)
if(cin==9||cin==6)
begin
case(cnt)
0:
beginr<
=16'
b0111111111111111;
c<
b0000000000000000;
1:
b1011111111111111;
b0111111111111110;
2:
b1101111111111111;
b0000000010000000;
3:
b1110111111111111;
4:
b1111011111111111;
5:
b1111101111111111;
6:
b1111110111111111;
7:
b1111111011111111;
8:
b1111111101111111;
9:
b1111111110111111;
10:
b1111111111011111;
11:
b111111111110