江苏大学09级数字逻辑课程设计报告Word文档格式.docx

上传人:b****3 文档编号:16371238 上传时间:2022-11-23 格式:DOCX 页数:14 大小:105.56KB
下载 相关 举报
江苏大学09级数字逻辑课程设计报告Word文档格式.docx_第1页
第1页 / 共14页
江苏大学09级数字逻辑课程设计报告Word文档格式.docx_第2页
第2页 / 共14页
江苏大学09级数字逻辑课程设计报告Word文档格式.docx_第3页
第3页 / 共14页
江苏大学09级数字逻辑课程设计报告Word文档格式.docx_第4页
第4页 / 共14页
江苏大学09级数字逻辑课程设计报告Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

江苏大学09级数字逻辑课程设计报告Word文档格式.docx

《江苏大学09级数字逻辑课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《江苏大学09级数字逻辑课程设计报告Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

江苏大学09级数字逻辑课程设计报告Word文档格式.docx

但不向高位进位。

(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;

五.课程设计感想:

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

当前位置:首页 > 经管营销 > 经济市场

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

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