数字逻辑电路和PLD设计.docx

上传人:b****6 文档编号:5946080 上传时间:2023-01-02 格式:DOCX 页数:20 大小:212.15KB
下载 相关 举报
数字逻辑电路和PLD设计.docx_第1页
第1页 / 共20页
数字逻辑电路和PLD设计.docx_第2页
第2页 / 共20页
数字逻辑电路和PLD设计.docx_第3页
第3页 / 共20页
数字逻辑电路和PLD设计.docx_第4页
第4页 / 共20页
数字逻辑电路和PLD设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数字逻辑电路和PLD设计.docx

《数字逻辑电路和PLD设计.docx》由会员分享,可在线阅读,更多相关《数字逻辑电路和PLD设计.docx(20页珍藏版)》请在冰豆网上搜索。

数字逻辑电路和PLD设计.docx

数字逻辑电路和PLD设计

 

数字逻辑电路和PLD设计

 

姓名:

学号:

座号:

24号

时间:

2010/7/5—2010/7/6

 

目录

一、设计题目----------------------------------2

二、设计要求-----------------------------------2

三、设计内容-----------------------------------2

四、设计流程图--------------------------------2

五、实验内容-----------------------------------4

六、总的原理图和仿真波形-----------------17

七、学习小结-----------------------------------21

 

一、设计题目

红绿灯交通管理器

二、设计要求

设计十字路口的交通管理器,该管理器控制甲乙垂直的红黄绿三色灯显示和各自显示时间,指挥车辆和行人安全通行,用VHDL语言描述。

设计工具使用QUARTUSII软件。

三、设计内容

该设计采用分层描述方法,以图形输入和原理输入混合方式建立VHDL描述文件。

交通管理器顶层图形输入文件有控制器和三个各位模26、模30、模5的定时器组成,分别控制两个道口的通行时间和公共停车时间,系统由两组红黄绿指示灯和三组七段显示器作倒计时显示,由BCD码驱动,控制器按照流程图中状态的变化来控制红黄绿灯的变换以及计数器的计时,当某个计数器工作技术信号W1、W2或W3,由“0”转为“1”时,表示计满,控制器转向下一个状态并计时,各定时器连接控制器的C1、C2或C3,当为“1”时,该计数器计时结束,整个系统循环互联。

当计数器计数时,各个减法器同时做倒计时,输出接七段译码显示器做倒计时显示。

各减法器具有置数控制端,当控制端为“1”时,预置30、26、5。

可以将时钟信号和置数信号一同设为进程敏感信号,减法计数器的使能端也对应控制器的C1、C2和C3上升沿开始倒计时。

交通灯具体设计内容:

1)设计三个加法计数器(30s,26s,5s)控制器

2)设计三个减法器(30s,26s,5s)倒计时,用PROCESS(CLK,LD)异步预置

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:

instd_logic;

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<="00000";

c<='0';

elsifen='1'then

ifrising_edge(clk)then

Ifcount="11101"then

count<="00000";

c<='1';

else

count<=count+1;

c<='0';

endif;

endif;

endif;

dout<=count;

endprocess;

endbehavioral;

对该计数器程序生成模块并进行编译

对编译结果进行仿真,仿真波形如下图:

1.2设计一个26秒加法计数器

使计数器由“0000~11001”进行加法计数,当计数器工作计数信号(进位输出C)有“0”转为“1”时,表示计满。

26秒加法计数器的源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycount26is

port(en:

instd_logic;

clk:

instd_logic;

dout:

outstd_logic_vector(4downto0);

c:

outstd_logic);

endcount26;

architecturebehavioralofcount26is

signalcount:

std_logic_vector(4downto0):

="00000";

begin

dout<=count;

process(clk,en)

begin

ifen='0'then

count<="00000";

c<='0';

elsifen='1'then

ifrising_edge(clk)then

ifcount="11001"then

count<="00000";

c<='1';

else

count<=count+1;

c<='0';

endif;

endif;

endif;

dout<=count;

endprocess;

endbehavioral;

对该计数器程序生成模块并进行编译:

对编译结果进行仿真,仿真波形如下图:

1.3设计一个5秒加法计数器

使计数器由“000~100”进行加法计数,当计数器工作计数信号(进位输出C)有“0”转为“1”时,表示计满。

5秒加法计数器的源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycount05is

port(en:

instd_logic;

clk:

instd_logic;

dout:

outstd_logic_vector(2downto0);

c:

outstd_logic);

endcount05;

architecturebehavioralofcount05is

signalcount:

std_logic_vector(2downto0):

="000";

begin

dout<=count;

process(clk,en)

begin

ifen='0'then

count<="000";

c<='0';

elsifen='1'then

ifrising_edge(clk)then

ifcount="100"then

count<="000";

c<='1';

else

count<=count+1;

c<='0';

endif;

endif;

endif;

dout<=count;

endprocess;

endbehavioral;

对该计数器程序生成模块并进行编译:

对编译结果进行仿真,仿真波形如下图:

2、秒减法计数器设计

2.1设计一个30秒减法计数器

当加法计数器计数时,整个减法器同时做倒计时,状态从“30~1”

30秒减法器的源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityde30is

port(clk,ld,en,reset:

instd_logic;

qh:

outstd_logic_vector(3downto0);

ql:

outstd_logic_vector(3downto0));

endde30;

architecturebehavioralofde30is

signalmh,ml:

std_logic_vector(3downto0);

begin

process(clk,ld)

begin

if(ld='1'orreset='1')then

mh<="0011";

ml<="0000";

elsif(clk'eventandclk='1')then

if(en='1')then

if(ml<="0001"ANDmh<="0000")

thenml<="0000";

mh<="0011";

elsif(ml=0)then

ml<="1001";

if(mh=0)then

mh<="0011";

elsemh<=mh-1;

endif;

elseml<=ml-1;

endif;

endif;

endif;

qh<=mh;

ql<=ml;

endprocess;

endbehavioral;

对该减法器程序生成模块并进行编译

对编译结果进行仿真,仿真波形如下图:

2.2设计一个26秒减法计数器

当加法计数器计数时,整个减法器同时做倒计时,状态从“26~1”

26秒减法器的源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityde26is

port(clk,ld,en,reset:

instd_logic;

qh:

outstd_logic_vector(3downto0);

ql:

outstd_logic_vector(3downto0));

endde26;

architecturebehavioralofde26is

signalmh,ml:

std_logic_vector(3downto0);

begin

process(clk,reset)

begin

if(ld='1'orreset='1')then

mh<="0010";

ml<="0110";

elsif(clk'eventandclk='1')then

if(en='1')then

if(ml<="0001"andmh<="0000")

thenml<="0110";

mh<="0010";

elseif(ml=0)then

ml<="1001";

mh<=mh-1;

elseml<=ml-1;

endif;

endif;

endif;

endif;

qh<=mh;

ql<=ml;

endprocess;

endbehavioral;

对该减法器程序生成模块并进行编译

对编译结果进行仿真,仿真波形如下图:

2.3设计一个5秒减法计数器

当加法计数器计数时,整个减法器同时做倒计时,状态从“5~1”

5秒减法器的源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityde5is

port(clk,ld,en,reset:

instd_logic;

q:

outstd_logic_vector(3downto0));

endde5;

architecturebehavioralofde5is

signalm:

std_logic_vector(3downto0);

begin

process(clk,ld)

begin

if(ld='1'orreset='1')then

m<="0101";

elsif(clk'eventandclk='1')then

if(en='1')then

if(m="0001")

thenm<="0101";

elsem<=m-1;

endif;

endif;

endif;

q<=m;

endprocess;

endbehavioral;

对该减法器程序生成模块并进行编译

对编译结果进行仿真,仿真波形如下图:

3、交通控制器设计

W1、W2、W3分别为30秒(红灯),5秒(黄灯)和26秒(绿灯)计数进位信号,RESET为控制清零的信号。

时钟信号以1秒为一周期。

g2,y2,r2分别为甲方向的红、黄、绿灯始能信号,g1,y1,r1分别为乙方向各信号灯的始能信号。

交通控制器的源程序:

libraryieee;

useieee.std_logic_1164.all;

entitytrafficcontrolis

port(

clk:

instd_logic;

c1,c2,c3:

outstd_logic;

w1,w2,w3:

instd_logic;

r1,r2:

outstd_logic;

y1,y2:

outstd_logic;

g1,g2:

outstd_logic;

reset:

instd_logic);

endtrafficcontrol;

architectureaoftrafficcontrolis

typestate_spaceis(s0,s1,s2,s3);

signalstate:

state_space;

begin

process(clk)

begin

ifreset='1'then

state<=s0;

elsif(clk'eventandclk='1')then

casestateis

whens0=>

ifw1='1'then

state<=s1;

endif;

whens1=>

ifw2='1'then

state<=s2;

endif;

whens2=>

ifw3='1'then

state<=s3;

endif;

whens3=>

ifw2='1'then

state<=s0;

endif;

endcase;

endif;

endprocess;

c1<='1'whenstate=s0else'0';

c2<='1'whenstate=s1orstate=s3else'0';

c3<='1'whenstate=s2else'0';

r1<='1'whenstate=s1orstate=s0else'0';

y1<='1'whenstate=s3else'0';

g1<='1'whenstate=s2else'0';

r2<='1'whenstate=s2orstate=s3else'0';

y2<='1'whenstate=s1else'0';

g2<='1'whenstate=s0else'0';

enda;

对该交通控制器程序生成模块并编译

对编译结果进行仿真,仿真波形如下图:

 

4、设计BCD2LED七段显示器

七段显示器在这里主要是用于各减法计数器的倒计时显示,输入信号各为减法计数器的BCD码输入。

通过显示器内部转换最后以数字形式显示。

BCD2LED七段显示器源程序:

libraryieee;

useieee.std_logic_1164.all;

entitybcd2ledis

port(a3,a2,a1,a0:

instd_logic;

a,b,c,d,e,f,g:

outstd_logic);

endbcd2led;

architecturestructuralofbcd2ledis

signalbcd:

std_logic_vector(3downto0);

signalled:

std_logic_vector(6downto0);

begin

bcd<=a3&a2&a1&a0;

process(bcd)

begin

casebcdis

when"0000"=>led<="1111110";

when"0001"=>led<="1100000";

when"0010"=>led<="1011011";

when"0011"=>led<="1110011";

when"0100"=>led<="1100101";

when"0101"=>led<="0110111";

when"0110"=>led<="0111111";

when"0111"=>led<="1100010";

when"1000"=>led<="1111111";

when"1001"=>led<="1110111";

whenothers=>led<="0000000";

endcase;

endprocess;

a<=led(6);

b<=led(5);

c<=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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1