江苏大学09级数字逻辑课程设计报告Word下载.docx
《江苏大学09级数字逻辑课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《江苏大学09级数字逻辑课程设计报告Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
但不向高位进位。
(3)按下“SC”键后,秒清零。
要求按下“SA”和“SB”均不会产生数字跳变(“SA”、“SB”按键是有抖动的,必须地“SA”、“SB”进行消抖处理,消抖电路用D触发器构成。
原理:
一个触发器CP(64HZ)内,屏蔽所有的抖动脉冲)。
(4)计时(24进制计数器),计分(60进制计数器)、计秒(60进制计数器)模块可由10进制计数器连接构成,也可用VHDL语言完成(可以参考教材P341,例8.2.1多功能电子钟的设计)。
10进制计数器需自己设计(用VHDL语言,与所做实验74160计数器相同),不能调用系统库。
(5)其他如分频电路、提供报时控制信号、闹时电路等模块用VHDL语言实现。
3.能利用实验板上的扬声器作整点报时
(1)当计时到达59’50”、51”、52”、53”、54”、55”、56”、57”、58”、59”鸣叫,鸣叫声频可定为500HZ;
(2)到达00分00秒时为最后一声整点报时。
整点报时的频率可定为1KHZ。
报时信号从ISP1032的PIN68输出,PIN68与扬声器的输入电路相连,激励扬声器;
4.闹时
(1)闹时的最小时间间隔为十分钟。
(2)闹时长度为一分钟。
(3)闹时声响可以是单频。
(4)闹时时声响也可以是双频交替的警笛声。
5.使用MAX+plusII10.0BASELINE软件设计符合上述功能的多功能数字钟,并用层次化设计方法设计该电路。
6.报时功能。
闹时功能用功能仿真的方法验证,可通过观察有关波形确认电路设计是否正确。
7.使用设计思路----层次化的思想:
计时(间)模块、时间校对模块、报时模块、分频模块、动态显示模块
(1)
8.完成全部电路设计后在EP1KTC144-3实验系统上下载,验证设计的正确性。
四.顶层图及相关模块说明:
1.顶层图:
说明:
程序下载后自动进入计时状态,sa,sb,sc可分别调时,分,秒。
2.各模块说明:
(1)进制模块:
1.十进制源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityls160is
port
(
data:
instd_logic_vector(3downto0);
clk,ld,p,t,clr:
instd_logic;
count:
bufferstd_logic_vector(3downto0);
tc:
outstd_logic);
endls160;
architecturebehaviorofls160is
begin
tc<
='
1'
when(count="
1001"
andp='
andt='
andld='
andclr='
)else'
0'
;
cale:
process(clk,clr,p,t,ld)
begin
if(rising_edge(clk))then
if(clk='
)then
if(ld='
if(p='
if(t='
if(count="
count<
="
0000"
else
=count+1;
endif;
else
=count;
=data;
endprocesscale;
endbehavior;
十进制生成器件
2.二十四进制:
电路图:
生成器件:
3.六十进制:
模块说明:
此计数器由两个十进制计数器构成,片一的进位TC独立与片二的P,T连在一起,并行连接成一百进制计数器,片一的P,T接高电平,两片的CLK都接在同一输入上,形成异步置零。
片一上的AD,片二上的AC接入同一与非门,再接到两片的LD上。
H[3…0]构成十位,L[3…0]构成个位。
(2)DTSM模块:
dtsh源程序:
libraryieee;
useieee.std_logic_arith.all;
entitydtsmis
port(clk:
instd_logic;
s:
instd_logic_vector(7downto0);
f:
m:
selout:
outstd_logic_vector(5downto0);
segout:
outstd_logic_vector(6downto0)
);
enddtsm;
architectureaofdtsmis
signalnumber:
std_logic_vector(3downto0);
signalsel:
std_logic_vector(5downto0);
signalseg:
std_logic_vector(6downto0);
signalq:
std_logic_vector(2downto0);
a:
process(clk)
if(clk'
eventandclk='
)then
q<
=q+1;
endif;
endprocessa;
process(q)
caseqis
when"
000"
=>
sel<
000001"
001"
000010"
010"
000100"
011"
001000"
100"
010000"
101"
100000"
whenothers=>
000000"
endcase;
endprocess;
process
ifsel="
then
number<
=m(3downto0);
elsifsel="
=m(7downto4);
=f(3downto0);
=f(7downto4);
=s(3downto0);
=s(7downto4);
1111"
process(number)
casenumberis
when"
seg<
0111111"
0001"
0000110"
0010"
1011011"
0011"
1001111"
0100"
1100110"
0101"
1101101"
0110"
1111101"
0111"
0000111"
1000"
1111111"
1101111"
whenothers=>
0000000"
selout<
=sel;
segout<
=seg;
enda;
生成器件:
端口说明:
s,f,m分别为时、分、秒的输入端,定义为std_logic_vector(7downto0);
segout为七端显示管的输出,定义为std_logic_vector(6downto0);
selout为扫描地址端,定义为std_logic_vector(5downto0),某一时刻只有一个为1,对应的数组号即为当前扫描的数码管的编号。
功能实现:
定义一个std_signa_vector(2downto0)变量q,它在0至5之间不断的循环,用来指示当前扫描的哪一根管,循环用语句ifq>
=5thenq<
elseq<
实现。
再定义一个类型为std_logic_vector(5downto0)的sel信号,它用来产生一个长度为6的数,该数在同一时刻只有一位是高电平表示正在扫描该显示管,在进程结束时它的值将赋给selout输出。
定义一个std_logic_vector(6downto0)类型的seg,用来存放将由四位bcd码编码而来的七段显示码。
最后在进程中定义一个std_logic_vector(3downto0)类型的number变量,用来存放时、分、秒的高位或低位,然后将该数编码成七段显示码,并赋给seg信号。
具体算法如下:
建立一个以clk脉冲为敏感变量的进程,先判断是否是clk的高电平脉冲,若不是则什么也不执行,若是高电平脉冲,则执行以下程序。
P加1,用case语句根椐p的值,给number赋予当前要扫描的数码管的值,用case语句根椐number的值编译成对应的七段显示管的值并赋给seg,当进程结束时把seg的值赋给segout,把sel的值赋给selout,然后由这两个端口输出。
(3)分频模块:
分频器源程序:
entityfryis
hz512:
outstd_logic;
hz256:
hz64:
hz4:
hz1:
outstd_logic
endfry;
architecturefoffryis
signalq:
std_logic_vector(9downto0);
begin
process(clk)
ifclk'
then
q<
endprocess;
hz512<
=q(0);
hz256<
=q
(1);
hz64<
=q(3);
hz4<
=q(7);
hz1<
=q(9);
endf;
(4)报时模块:
报时器源程序:
entityalertis
port(m1,m0,s1,s0:
sig500,sig1k:
outstd_logic);
endalert;
architectureaofalertis
std_logic_vector(15downto0);
signals500,s1k:
std_logic;
q(15downto12)<
=m1;
q(11downto8)<
=m0;
q(7downto4)<
=s1;
q(3downto0)<
=s0;
hring:
block
s500<
whenq="
0101100101010000"
'
0101100101010010"
0101100101010100"
0101100101010110"
0101100101011000"
s1k<
0000000000000000"
endblockhring;
sig500<
=s500;
sig1k<
=s1k;
闹钟报时系统:
模块说明:
由于clk的频率为1024hz,所以可以定义一个std_logic_vector(9downto0),使它不停地从0000000000加到1111111111然后又返回0000000000,由于最低位在clk脉冲到来时从0变为1,然后又在下一个脉冲变回0,因此最低位的时钟周期为clk的时钟周期的两倍,它的频率就为clk频率的确1/2即512hz。
同理,次高位的频率就为clk频率的1/2*1/2=1/4,用这种方法就可以得到各种能整除1024的频率,从而实现分频。
(5)二路选择器
源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux21IS
PORT(a,b,s:
INSTD_LOGIC;
y:
OUTSTD_LOGIC);
ENDENTITYmux21;
ARCHITECTUREoneOFmux21IS
BEGIN
PROCESS(a,b,s)
IFs='
THEN
y<
=a;
ELSE
=b;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREone;
五.课程设计感想: