北邮 数字逻辑实验报告.docx
- 文档编号:24612221
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:45
- 大小:315.06KB
北邮 数字逻辑实验报告.docx
《北邮 数字逻辑实验报告.docx》由会员分享,可在线阅读,更多相关《北邮 数字逻辑实验报告.docx(45页珍藏版)》请在冰豆网上搜索。
北邮数字逻辑实验报告
北京邮电大学课程设计报告
课程设计
名称
数字逻辑
学院
计算机
指导教师
班级
班内序号
学号
学生姓名
成绩
--
--
--
杨杨
--
--
--
陈陈
--
--
--
金金
课
程
设
计
内
容
教学目的:
掌握ispLEVER软件的使用方法,掌握isp器件的使用方法,用VHDL进行较复杂逻辑电路的设计和调试,熟练掌握isp器件的下载方法。
基本内容:
1.交通灯控制2.电子钟显示
3.药片装瓶系统
实验方法:
先用VHDL进行软件编程,然后下载到ISP器件,进行硬件仿真实验。
组员分工:
详见各实验报告实验分工。
学生
课程设计
报告
(附页)
课
程
设
计
成
绩
评
定
遵照实践教学大纲并根据以下四方面综合评定成绩:
1、课程设计目的任务明确,选题符合教学要求,份量及难易程度
2、团队分工是否恰当与合理
3、综合运用所学知识,提高分析问题、解决问题及实践动手能力的效果
4、是否认真、独立完成属于自己的课程设计内容,课程设计报告是否思路清晰、文字通顺、书写规范
评语:
成绩:
指导教师签名:
年月日
注:
评语要体现每个学生的工作情况,可以加页。
实验一:
交通灯控制器设计
一、实验目的
①学习采用状态机方法设计时序逻辑电路。
②掌握ispLEVER软件的使用方法。
③掌握用VHDL语言设计数字逻辑电路。
④掌握ISP器件的使用。
二、实验所用器件和设备
在系统可编程逻辑器件ISP1032
一片
示波器
一台
万用表或逻辑笔
一只
TEC-5实验系统,或TDS-2B数字电路实验系统
一台
三、实验内容
以实验台上的4个红色电平指示灯,4个绿色电平指示灯模仿路口的东南西北4个方向的红,绿,黄交通灯。
控制这些交通灯,使它们按下列规律亮,灭。
(1)初始状态为4个方向的红灯全亮,时间1s。
(2)东,西方向绿灯亮,南,北方向红灯亮。
东,西方向通车,时间5s。
(3)东,西方向黄灯闪烁,南,北方向红灯,时间2s。
(4)东,西方向红灯亮,南,北方向绿灯亮。
南,北方向通车,时间5s。
(5)东,西方向红灯闪烁,南,北方向黄灯闪烁,时间2s。
(6)返回
(2),继续运行。
(7)如果发生紧急事件,例如救护车,警车通过,则按下单脉冲按钮,使得东,南,西,北四个方向红灯亮。
紧急事件结束后,松开单脉冲按钮,将恢复到被打断的状态继续运行。
四、设计思路
(1)将本实验分为分频,状态计数器,led输出三大模块;
(2)分频模块需要注意到占空比,采用when-else语句;
(3)状态计数器都分为5s,2s,5s,2s,四个状态时间,通过计数器作状
态转移;
(5)led输出模块的黄灯闪烁可通过2HZ的方波信号实现。
(6)选择实验台上的5kHz频率时钟,作为设计中分频的初始时钟。
(5)紧急事件发生时,要注意保存必要的信息,已被紧急事件结束后,恢复到原状态继续运行使用。
五、设计方案
模块图
1、tralight(顶层模块代码)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytralightis
port(clk,emg:
instd_logic;--5KHZ时钟输入,紧急输入
tout:
outstd_logic_vector(11downto0);--12盏led灯输出
tout2,tout1:
outstd_logic_vector(3downto0));--倒计时
endtralight;
architecturetopoftralightis
componentfenpin--分频模块
port(clkin:
instd_logic;--5KHZ时钟输入
clkout1:
outstd_logic;--1HZ时钟
clkout2:
outstd_logic);--2HZ时钟
endcomponent;
componentztjishuqi--状态计数器模块
port(emg1,clk1:
instd_logic;--紧急输入,1HZ时钟输入
stateout:
outstd_logic_vector(1downto0);--2位状态输出
daoout2,daoout1:
outstd_logic_vector(3downto0));--倒计时
endcomponent;
componentled--led交通灯显示模块
port(emg2,clk2:
instd_logic;--紧急输入,2HZ时钟输入(方波闪烁)
statein:
instd_logic_vector(1downto0);--2位状态输入
ledout:
outstd_logic_vector(11downto0));--12盏led灯输出
endcomponent;
signalfenpin1:
std_logic;
signalfenpin2:
std_logic;
signalstate:
std_logic_vector(1downto0);
begin
u1:
fenpinPORTMAP(clkin=>clk,clkout1=>fenpin1,clkout2=>fenpin2);
u2:
ztjishuqiPORTMAP(emg1=>emg,clk1=>fenpin1,stateout=>state,daoout2=>tout2,
daoout1=>tout1);
u3:
ledPORTMAP(emg2=>emg,clk2=>fenpin2,statein=>state,ledout=>tout);
end;
2、fenpin(底层分频模块)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpinis
port(clkin:
instd_logic;--5KHZ时钟输入
clkout1:
outstd_logic;--1HZ时钟
clkout2:
outstd_logic);--2HZ时钟
endfenpin;
architectureartoffenpinis
signaltemp:
integerrange0to4999;
begin
process(clkin)
begin
if(clkin'eventandclkin='1')then
if(temp=4999)then
temp<=0;
else
temp<=temp+1;
endif;
endif;
endprocess;
clkout1<='1'when(temp<2500)else'0';
clkout2<='1'when(temp<1250or(temp>=2500andtemp<3750))else'0';
endart;
3、ztjishuqi(底层状态计数器模块)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityztjishuqiis
port(emg1,clk1:
instd_logic;--紧急输入,1HZ时钟输入
stateout:
outstd_logic_vector(1downto0);--2位状态输出
daoout2,daoout1:
outstd_logic_vector(3downto0));--倒计时
endztjishuqi;
architectureartofztjishuqiis
signaltemp:
integerrange0to13;
typeStateIS(s0,s1,s2,s3);
signalcurrent_state,next_state:
State;
begin
process(emg1,clk1)
begin
if(emg1='0')then
if(clk1'eventandclk1='1')then
if(temp=0)then
stateout<="00";temp<=temp+1;daoout2<="0100";daoout1<="0110";
elsif(temp>0andtemp<=4)then
stateout<="00";temp<=temp+1;daoout2<=daoout2-1;
daoout1<=daoout1-1;
elsif(temp=5ortemp=6)then
stateout<="01";temp<=temp+1;daoout1<=daoout1-1;
elsif(temp=7)then
stateout<="10";temp<=temp+1;daoout2<="0110";daoout1<="0100";
elsif(temp>7andtemp<=11)then
stateout<="10";temp<=temp+1;daoout2<=daoout2-1;
daoout1<=daoout1-1;
elsif(temp=12)then
stateout<="11";temp<=temp+1;daoout2<=daoout2-1;
elsif(temp=13)then
stateout<="11";temp<=0;daoout2<=daoout2-1;
endif;
endif;
endif;
endprocess;
endart;
4、led(底层led输出模块)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityledis
port(emg2,clk2:
instd_logic;--紧急输入,2HZ时钟输入(方波闪烁),1HZ时钟输入
statein:
instd_logic_vector(1downto0);--2位状态输入
ledout:
outstd_logic_vector(11downto0));--12盏led灯输出
endled;
architectureartofledis
begin
process(emg2,statein,clk2)
begin
if(emg2='1')then
ledout<="001001001001";
else
casestateinis
when"00"=>ledout<="100100001001";
when"01"=>caseclk2is
when'1'=>ledout<="010010001001";
whenothers=>ledout<="000000001001";
endcase;
when"10"=>ledout<="001001100100";
whenothers=>caseclk2is
when'1'=>ledout<="001001010010";
whenothers=>ledout<="001001000000";
endcase;
endcase;
endif;
endprocess;
endart;
六、调试中出现的问题及解决方法
在编写交通的的程序的时候,本人没有碰到太大的技术上的问题(因为本身程序的要求比较简单,模块数也不多)。
主要的一些碰到挫折的地方有1、方波闪烁问题:
在编译成功连上线之后,发现红绿灯正常,但是黄灯不出现闪烁也不亮。
经分析代码后发现,黄灯的信号输入并没有产生方波,而只是一个一个的脉冲,要产生方波需要信号具有一定的占空比。
改进代码后此问题迎刃而解。
clkout1<='1'when(temp<2500)else'0';
clkout2<='1'when(temp<1250or(temp>=2500andtemp<3750))else'0';
2、警报使能无效:
黄灯问题解决后,我发现在警报情况下,红灯全亮,但是状态计数器并没有暂停,警报解除后状态不能回到警报之前的状态。
后发现是if语句的条件关系。
时钟上升沿信号和警报使能信号不能“与”在一个if里,需要将他们已嵌套的方式放在两个if语句里当条件。
在经过一天的编写和调试,交通灯的模型已经达到了老师及课本上的要求。
因为其他两名组员暂时还没有碰到什么问题,我开始着手增加功能的事情。
我给交通灯增加了一个倒计时功能,这并不难实现,只需在状态计数器的后面增加相应的语句,利用七段译码器实现倒计时的实现。
七、层次设计的体会
实验思路比较简单,我们没有采用元件例化的方法,但是模块划分仍然很清晰。
程序可分为分频,状态计数器,led输出三大模块(控制灯亮灭)。
层次设计将大问题分解为较小的问题,可以提高效率,使思路清晰。
八、比较不同种描述方式的心得
实验中结构体的三种描述方式都用到了:
数据流描述、结构描述、行为描述。
数据流描述逻辑清晰、描述简单。
结构描述使程序模块划分清晰,便于从宏观上把握程序功能,便于整体设计。
行为描述更容易把握程序对于不同输入或者信号所做的动作。
根据不同情况选择不同描述方法可以使程序得到优化。
九、本次设计的收获和不足
程序中多个进程同时进行,使我们更加理解了硬件的执行方式,什么是并行执行。
本次是实验小组成员共同讨论的成果,一些问题的调试,每个人都提出了自己的看法,使得程序更加完善,效率更高。
同时,提高了我们的团队合作意识,在实验设计过程中,我们得到了很多工作经验。
在状态计数器模块中,大量采用了if-else语句,幸好本实验规模不大,其实这是比较危险的。
如果能够采用标准的current-state,next-state,进行状态转移可以显得更规范。
十、实验分工
本实验由金金主编,调试及记录文档。
改进功能由金金完成。
实验二:
电子钟设计
一、实验目的
(1)掌握复杂的逻辑设计和调试
(2)学习用原理图+VHDL语言设计逻辑电路。
(3)学习数字电路模块层次设计。
(4)掌握ispLEVER软件的只用方法。
(5)熟悉ISP器件的使用
二、实验所用器件和设备
在系统可编程逻辑器件ISP1032
一片
示波器
一台
万用表或逻辑笔
一只
TEC-5实验系统,或TDS-2B数字电路实验系统
一台
三、实验内容
(1)设计并用ISP1032实现一个电子钟。
电子钟具有下述功能:
a)试验台上的6个数码管显示时、分、秒。
b)能使电子钟复位(清零)。
c)能启动或者停止电子钟运行。
d)再电子钟停止运行状态下,能够修改时、分、秒的值。
e)具有报时功能,整点时喇叭鸣叫。
(2)要求整个设计分为若干模块。
顶层模块用原理图设计,底层模块用VHDL语言设计。
(3)在试验台上调试设计。
电子钟设计框图
四、设计思路
实验要求以VHDL和原理图两种方式设计。
时钟用一个模24的计数器来实现;分钟和秒钟则分别用一个模60的计数器来实现;要实现自动计时,则需要连上实验台的5KHz提供脉冲,还需要一个分频的模块dclk,使其吻合时钟速度;整点报时则用一个ring的模块实现,分钟进位时开始计数从而实现报时5秒。
clock24(时钟计数)
clock(顶层模块)clock60(分钟和秒钟计数
dclk(分频,提供1Hz的时钟脉冲)
ring(实现整点报时)
五、代码实现
原理图设计
顶层模块,用于整合整个时钟系统
libraryieee;
useieee.std_logic_unsigned.all;
useieee.std_logic_1164.all;
entityclockis
port(clr,clk,tclk,timing:
instd_logic;--清零,5KHz,QD,暂停
con:
instd_logic_vector(2downto0);--校时时选择时,分,秒
h0,m1,m0,s1,s0:
outstd_logic_vector(3downto0);--分别对应时钟,分钟,秒钟
h1:
outstd_logic_vector(6downto0);
c,speaker,light:
outstd_logic);--时钟进位,响铃,上下午灯
endclock;
architecturearcofclockis
componentclock60--模60计数器
Port(clks,sclr,sclk,stiming:
instd_logic;
v1,v0:
outstd_logic_vector(3downto0);
co:
outstd_logic);
ENDcomponent;
componentdclk--分频,提供1Hz脉冲
port(high,con1:
instd_logic;--con1表示校时按钮
low:
outstd_logic);
endcomponent;
componentclock24--模24计数器
port(clkh,hclr,hclk,htiming:
instd_logic;
y0:
outstd_logic_vector(3downto0);
Y:
outstd_logic_vector(6downto0);
co,noon:
outstd_logic);
endcomponent;
componentringis--实现响铃
port(cclk,cc1,cc2:
instd_logic;
loud:
outstd_logic);
endcomponent;
signalc1,c2,clk1:
std_logic;
begin
u1:
dclkportmap(high=>clk,low=>clk1,con1=>timing);--提供脉冲(校时时不提供)
u2:
clock60portmap(sclr=>clr,stiming=>con(0),sclk=>tclk,clks=>clk1,v0=>s0,v1=>s1,co=>c1);
u3:
clock60portmap(sclr=>clr,stiming=>con
(1),sclk=>tclk,clks=>c1,v0=>m0,v1=>m1,co=>c2);
u4:
clock24portmap(hclr=>clr,htiming=>con
(2),hclk=>tclk,clkh=>c2,y0=>h0,Y=>h1,co=>c,noon=>light);
u5:
ringportmap(cclk=>clk1,cc1=>c1,cc2=>c2,loud=>speaker);
endarc;
底层模块clock24,用于时钟计时、校时及显示
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityclock24is
port(clkh,hclr,hclk,htiming:
instd_logic;
y0:
outstd_logic_vector(3downto0);--个位
Y:
outstd_logic_vector(6downto0);--十位
co,noon:
outstd_logic);--进位,上下午灯
endclock24;
architecturearc2ofclock24is
signalt1,t0:
std_logic_vector(3downto0);
signalbibibi:
std_logic;
begin
bibibi<=clkhwhen(htiming='0')elsehclk;--判断是否处于校时状态
process(bibibi,hclr)
begin
if(hclr='1')then--清零
t0<="0000";
t1<="0000";
elsif(bibibi'eventandbibibi='1')then
if(t1=2andt0=3andhtiming='0')then--模24进位
co<='1';
else
co<='0';
endif;
--计数器
if(t0=9)then
t0<="0000";
t1<=t1+1;
elsif(t1=2andt0=3)then
t0<="0000";
t1<="0000";
else
t0<=t0+1;
endif;
--计数器
ENDIF;
endprocess;
y0<=t0;
noon<='1'when(t1<1or(t1=1andt0<3))else'0';--上午亮灯,下午灯灭
Y<="1111110"whent1="0000"else--0
"0110000"whent1="0001"else--1
"1101101"whent1="0010"else--2
"0000000";
endarc2;
底层模块clock60,用于分钟、秒钟的计时与校时
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityclock60is
Port(clks,sclr,sclk,stiming:
instd_logic;
v0,v1:
outstd_logic_vector(3downto0);--个位,十位
co:
outstd_logic);--进位
endclock60;
architecturearc1ofc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮 数字逻辑实验报告 数字 逻辑 实验 报告