数字逻辑电路和PLD设计Word格式文档下载.docx
- 文档编号:18937267
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:20
- 大小:212.15KB
数字逻辑电路和PLD设计Word格式文档下载.docx
《数字逻辑电路和PLD设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数字逻辑电路和PLD设计Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
3)设计相应减法器的BCD码七段显示模块
4)设计总体状态转换器,完成各输入文件,并产生各模块后,再用原理图输入方式产生总图。
四、设计流程图
红绿灯交通管理器控制甲、乙两道的红、黄、绿三色灯,指挥车辆和行人安全。
交通管理器示意图如下图
(1)所示。
图
(1)中三个计时器分别确定甲道和乙道通行时间t3、t1以及公共的停车(黄灯燃亮)时间t2。
C1、C2和C3分别是3个定时器工作信号,即当C1、C2或C3为1时,相应的定时器计数。
W1、W2和W3为计数器的指示信号,计数器在计数过程中,相应的指示信号为0,
计数结束时为1。
交通管理器工作流程图如下图:
五、实验内容
1、秒加法计数器设计
1.1设计一个30秒加法计数器
使计数器由“0000~11101”进行加法计数,当计数器工作计数信号(进位输出C)有“0”转为“1”时,表示计满。
设30秒加法计数器的源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycount30is
port(
en:
instd_logic;
clk:
dout:
outstd_logic_vector(4downto0);
c:
outstd_logic);
endcount30;
architecturebehavioralofcount30is
signalcount:
std_logic_vector(4downto0):
="
00000"
;
begin
dout<
=count;
process(clk,en)
begin
ifen='
0'
then
count<
c<
='
elsifen='
1'
ifrising_edge(clk)then
Ifcount="
11101"
else
=count+1;
endif;
endprocess;
endbehavioral;
对该计数器程序生成模块并进行编译
对编译结果进行仿真,仿真波形如下图:
1.2设计一个26秒加法计数器
使计数器由“0000~11001”进行加法计数,当计数器工作计数信号(进位输出C)有“0”转为“1”时,表示计满。
26秒加法计数器的源程序:
libraryieee;
entitycount26is
port(en:
endcount26;
architecturebehavioralofcount26is
signalcount:
ifcount="
11001"
对该计数器程序生成模块并进行编译:
1.3设计一个5秒加法计数器
使计数器由“000~100”进行加法计数,当计数器工作计数信号(进位输出C)有“0”转为“1”时,表示计满。
5秒加法计数器的源程序:
entitycount05is
outstd_logic_vector(2downto0);
endcount05;
architecturebehavioralofcount05is
std_logic_vector(2downto0):
000"
100"
2、秒减法计数器设计
2.1设计一个30秒减法计数器
当加法计数器计数时,整个减法器同时做倒计时,状态从“30~1”
30秒减法器的源程序:
entityde30is
port(clk,ld,en,reset:
qh:
outstd_logic_vector(3downto0);
ql:
outstd_logic_vector(3downto0));
endde30;
architecturebehavioralofde30is
signalmh,ml:
std_logic_vector(3downto0);
process(clk,ld)
if(ld='
orreset='
)then
mh<
0011"
ml<
0000"
elsif(clk'
eventandclk='
if(en='
if(ml<
0001"
ANDmh<
)
thenml<
elsif(ml=0)then
1001"
if(mh=0)then
elsemh<
=mh-1;
elseml<
=ml-1;
endif;
qh<
=mh;
ql<
=ml;
对该减法器程序生成模块并进行编译
2.2设计一个26秒减法计数器
当加法计数器计数时,整个减法器同时做倒计时,状态从“26~1”
26秒减法器的源程序:
useieee.std_logic_arith.all;
entityde26is
port(clk,ld,en,reset:
endde26;
architecturebehavioralofde26is
signalmh,ml:
process(clk,reset)
0010"
0110"
andmh<
elseif(ml=0)then
endprocess;
2.3设计一个5秒减法计数器
当加法计数器计数时,整个减法器同时做倒计时,状态从“5~1”
5秒减法器的源程序:
entityde5is
q:
endde5;
architecturebehavioralofde5is
signalm:
m<
0101"
if(m="
thenm<
elsem<
=m-1;
q<
=m;
3、交通控制器设计
W1、W2、W3分别为30秒(红灯),5秒(黄灯)和26秒(绿灯)计数进位信号,RESET为控制清零的信号。
时钟信号以1秒为一周期。
g2,y2,r2分别为甲方向的红、黄、绿灯始能信号,g1,y1,r1分别为乙方向各信号灯的始能信号。
交通控制器的源程序:
entitytrafficcontrolis
port(
c1,c2,c3:
outstd_logic;
w1,w2,w3:
r1,r2:
y1,y2:
g1,g2:
reset:
instd_logic);
endtrafficcontrol;
architectureaoftrafficcontrolis
typestate_spaceis(s0,s1,s2,s3);
signalstate:
state_space;
process(clk)
ifreset='
then
state<
=s0;
elsif(clk'
)then
casestateis
whens0=>
ifw1='
=s1;
whens1=>
ifw2='
=s2;
whens2=>
ifw3='
=s3;
whens3=>
endcase;
c1<
whenstate=s0else'
c2<
whenstate=s1orstate=s3else'
c3<
whenstate=s2else'
r1<
whenstate=s1orstate=s0else'
y1<
whenstate=s3else'
g1<
r2<
whenstate=s2orstate=s3else'
y2<
whenstate=s1else'
g2<
enda;
对该交通控制器程序生成模块并编译
4、设计BCD2LED七段显示器
七段显示器在这里主要是用于各减法计数器的倒计时显示,输入信号各为减法计数器的BCD码输入。
通过显示器内部转换最后以数字形式显示。
BCD2LED七段显示器源程序:
entitybcd2ledis
port(a3,a2,a1,a0:
a,b,c,d,e,f,g:
endbcd2led;
architecturestructuralofbcd2ledis
signalbcd:
signalled:
std_logic_vector(6downto0);
bcd<
=a3&
a2&
a1&
a0;
process(bcd)
casebcdis
when"
=>
led<
1111110"
1100000"
1011011"
1110011"
0100"
1100101"
0110111"
0111111"
0111"
1100010"
1000"
1111111"
1110111"
whenothers=>
0000000"
a<
=led(6);
b<
=led(5);
=led(4);
d<
=led(3);
e<
=led
(2);
f<
=led
(1);
g<
=led(0);
endstructural;
将个该程序生成模块并编译
六、总的原理图和仿真波形
交通灯总体设计
将各个模块连接起来,构成完整的红绿灯管理器。
原理图中的de05,de26,de30分别为5秒,26秒,30秒减法计数器,count05,count26和count30分别为加法计数器。
Trafficcontrol为交通灯控制器。
图中的clk为总的时钟输入信号,reset分别作为各减法计数器的初始置数信号和控制器的清零信号。
减法计数器qh输出信号表示高位输出信号,ql表示低位输出信号。
总体输入信号为clk和reset,输出信号为各减法计数器的BCD码输出信号。
设计总原理图:
交通灯管理器总体仿真:
七、学习小结
两天数字逻辑电路和PLD设计学习生活很快就结束了,但是就是这短暂的两天却让我学到了很多。
在学习此课程之前,听说还是运用QuartusⅡ软件,鉴于我学习过CPLD实验,所以我是自信满满的,但是在听完老师的要求之后,我就明白其实这次任务还是很艰巨的,因为此次完全要我们自己独立设计出一个交通红绿灯控制器。
经过努力,我终于自己设计完成了一个十字路交通管理器,更加熟练使用了QuartusⅡ可编程逻辑器件开发软件,并且巩固了上学期在课堂上学到的关于VHDL语言的编程语言的课程。
虽然上个学期学过VHDL语言描述数字电路,但是当时仅仅只是自己编程,并没有给我们这样一个实验平台,让我们看到自己编的程序,可以生成自己想要的效果。
QuartusⅡ软件界面易懂,输入方式灵活多样,是一个十分常用的软件,而这次课程设计锻炼了我对这个软件的熟练程度,也已经为今后进行更复杂的设计打下了扎实的基础。
这次的学习中,我遇到了很多小问题,但是通过同学们的帮助与自身的努力,我开始慢慢的找到了编程思路以及编程中要注意的一些小细节,增强了我的自信心、丰富了我的知识。
两天的课程设计,我学会了怎么将自己所学的知识整合的到实际运用当中,加深了我对相关知识的理解和掌握。
对数电所学知识的实际运用有了进一步的了解,特别是深入的学习了VHDL语言。
这次的实践课程虽然已经结束,但对这个软件的学习以及对VHDL语言的学习并没有结束,我会在以后的学习中抓住机会加深对它们的理解,做到真正掌握这些技术。
总之,每一次的实践课实习学习都是在给我们将来积累经验,锻炼了自主学习,独立思考,综合运用所学知识的能力,我们应该学会如何整理自己所学的知识为现实生活服务,同时开发了我们锻炼思维创新能力克服困难的决心。
2010-7-6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 逻辑电路 PLD 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)