可编程时钟控制器报告Word文件下载.docx

上传人:b****5 文档编号:16342917 上传时间:2022-11-23 格式:DOCX 页数:32 大小:633.69KB
下载 相关 举报
可编程时钟控制器报告Word文件下载.docx_第1页
第1页 / 共32页
可编程时钟控制器报告Word文件下载.docx_第2页
第2页 / 共32页
可编程时钟控制器报告Word文件下载.docx_第3页
第3页 / 共32页
可编程时钟控制器报告Word文件下载.docx_第4页
第4页 / 共32页
可编程时钟控制器报告Word文件下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

可编程时钟控制器报告Word文件下载.docx

《可编程时钟控制器报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《可编程时钟控制器报告Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。

可编程时钟控制器报告Word文件下载.docx

Abcdefg

1

2

9

15

H

×

1000

0001

0010

1001

1111

1111111

0110000

1101101

1110011

0000001

BI

L

×

0000

0000000

3)计数电路

秒脉冲信号经过6个计数器,分别得到“秒”个位、十位,“分”个位、十位和“时”个位、十位。

“秒”“分”为六十进制,小时为二十四进制。

此部分可使用74LS90或74LS163等实现。

(1)60进制计数器

是由一级10进制计数器,和一级6进制计数器连接构成。

采用两片集成电路74LS90串接成“秒”“分”计数器。

第一级7490的QA和B相连,即组成了十进制计数器。

将第一级的QD作为十进制的进位信号,当第十个脉冲到来时QD由“1”变为“0”送出一个负跳变脉冲,十位计数一次。

第二级的QBQC相与后送至两级计数的清零端R0

(1)或R0

(2),当十位计数到6个位计数到10即计数到60时,计数器清零,完成六十进制计数。

(2)24进制计数器

24进制的个位与十位之间的进位与六十进制一样,将第一级QD接至第二级的CP输入端即可。

将第一级的QC和第二级的QB相与后接至计数器的清零端R0

(1)或R0

(2)。

这样当第一级计数器计到4(0100),第二级计数器计到2(0010),计数器清零,完成24进制计数。

(4)报时控制电路

用不同频率的脉冲实现了51秒,53秒,55秒,57秒和59秒时打铃的响声不同。

74LS148的输入端从

分别接

,输出端接一些与非门和与门,最后接一蜂鸣器。

电路图如总的电路图中。

5)效时控制电路

效时电路实现对“十”“分”的效准。

通过开关设有正常计数和效时位置。

效时方法是将秒脉冲分别接到“分”输入和“时”输入,这样可以快速校准。

6)定点报时

用到了RAM62256存储器,它是32K随机存储器有15个地址线,8个数据线作为数据写入和读出,

控制读写信号,当S合上时,

有效,数据写入存储器RAM,写入的内容由S01到S71决定。

当S打开,读信号

有效,数据输出,S0-S7接输出,将选中的单元数据输出,若数据中某位为“1”,则相应的二极管发光,若数据中某位为“0”,则相应的发光二极管不亮。

五总的电路图

2、利用EDA的方法实现:

由于电路十分复杂,采用中规模集成电路的话将十分繁琐。

而如果采用可编程器件,我们可以将走时电路模块、数码管显示驱动模块、校时模块、语音报时控制模块、工业控制模块都集成在一块可编程逻辑器件上,通过使用硬件描述语言VHDL编程。

实现方案框图如下:

以上框图采用“自上而下”的设计方法,将电路分为四大模块(时间设置、走时、响铃、显示)

这种设计数字逻辑电路的方法,使得我们脱离了具体电路的实现方法,而变成通过编程的方法实现所要的电路。

综合上面两种方案,我们选择了使用可编成器件,有以下两点原因:

1、如果采用中规模电路,要使用大量芯片,焊接和连接的工作量过大,并且加大了调试电路的难度,从而使得电路的可靠性大大降低;

而如果次采用可编程器件,连线和焊接量大大减少;

2、可编成器件可以通过编写程序,实现许多拓展功能;

而用中规模集成电路设计拓展功能时,则增加大量的门电路、导线、开关,同样也会影响电路的可靠性。

当然采用集成芯片需要编写VHDL程序,并用MAX-PLUS开发。

四、芯片介绍:

1、ALTERAMAX7000S:

EPM7128有4个直接输入(INPUT)2、1、84、83和64个I\O引脚,他们即可作为输入,又可作为输出。

TMS、TDI、TDO和TCK是系统编程引脚

以下是EMP7128的器件结构图器件结构如下

它由8个相似的逻辑阵列块、一个可编程内连阵列、和多个输入、输出控制块构成

EMP7128S具有以下特点:

1)高集成密度

高密度可编程逻辑器件是高性能的CMOSE2PROM器件,其规模比较大,能够将许多PAL、GAL集成在一片HDPLD内

2)速度高、低功耗、抗噪声容限大

3)在系统编程能力

EMP7128S通过4根编程线,把可编成逻辑芯片置入系统进行编成避免了用编程器来回插拔造成的物理损失

4)可测试性能力

5)线或功能

6)异步时钟、异步清零功能

7)乘积项共享功能

8)输出缓冲器多种使能的能力

9)单片多系统能力

10)很强的加密能力

对于可编成器件,还需将程序下载到芯片上,现在普遍用JTAG

JTAG(JointTestActionGroup)联合测试行动小组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。

现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。

标准的JTAG接口是4线:

TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。

JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(TestAccessPort&

#0;

测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。

JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。

现在,JTAG接口还常用于实现ISP(In-Systemrogrammable&

在线编程),对FLASH等器件进行编程。

JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。

JTAG接口可对PSD芯片内部的所有部件进行编程

通常所说的JTAG大致分两类:

一类用于测试芯片的电气特性,检测芯片是否有问题;

另一类用于Debug;

一般支持JTAG的CPU内都包含了这两个模块。

一个含有JTAGDebug接口模块的CPU,只要时钟正常,就可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)内置模块的寄存器,象UART,Timers,GPIO等等的寄存器。

管脚标号如下:

引脚定义如下

引脚序号

信号名

描述

TCK

时钟

GND

信号地

3

TDO

器件输出数据

4

Vcc

由PCB板提供的电源4.75-5,25V

5

TMS

JTAG状态控制机

6

------

7

8

-------

TDI

发送到器件的数据

10

2.动态数码管的扫描显示

实验中一共需要6个数码管,如果按照传统的数码管驱动方式,则需要引出7

6=42根线驱动数码管的每一段,这样大大加大了连线的复杂性。

所以我们选用了现在最常见的数码管驱动

电路为动态扫描显示。

数码扫描显示的工作原理如下:

6个数码管在同一时间进行显示可用两种不同的方式获得:

第一就是传统的方式;

第二即利用人眼的视觉暂留效应,把六个数码管按一定顺序(从左至右或从右至左)进行点亮,当点亮的频率(即扫描频率)不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,还是全部同时显示(点亮),传统方式得到的结果完全一样。

因此我们只要给数码管这样一个扫描频率,那么就可以实现6个(或更多)数码管同时点亮。

而这个频率我们可以通过晶振分频来产生,只要计数频率足够大,就可以实现我们的要求。

由于市场上没有6个一起的数码管,因此我们用两连和四连的各一个实现:

两连的:

四连的:

3、CD4060、CD4013

CD4060是14级二进制串行计数/分频器

可以作为控制计数器、分频器、时间延迟器

它的管脚图如下:

CD4013是双主从D型触发器

管脚图如下:

五、时基信号发生器:

方案一:

由555构成多谐振荡器

电路图如下:

方案二:

由晶体构成晶体振荡器:

晶振振荡频率通常在MHz以上,要经过适当的分频电路才能得到我们所需的频率

石英晶体振荡器具有极高的稳定性,用它作为谐振元件构成的晶体振荡器的频率稳定度高可优于10-9。

所以我们采用了后者,再用CD4013,CMOS的把2Hz二分频分成我们实验所需要的1Hz本次实验用晶振、4060,4013构成分频器,输出为1Hz将4060输出的2Hz的信号作为CD4013的时钟信号,并将CD4013的

与S,

与R相连接,这样CD4013就构成一个主从计数触发器,每当时钟信号来临时就反转一次,从而实现对2Hz信号的二分频。

六、问题分析与调试:

我们在第一次焊接完成之后,电路有些问题,数码管不能正常显示,于是我们对电路进行了检查,发现有些虚焊点和错误。

进行了纠正之后,电路可以显示,但是秒钟不能正常工作。

在检查了时基信号发生部分之后,发现晶振不能够正常地起振,于是我们更换了其他晶振后仍没有好转。

当我们用1Hz的信号直接接入是,秒钟工作正常。

这说明我们的时基发生电路有问题。

由于以没有时间再去购买元件修改成施密特电路,所以此部分无法修正了。

七、实验总结:

这次是我们第一次用EDA来实现一个大规模的电路。

由于经验的不足,我们在其中走了很多的弯路,但从中我们也汲取了很多的教训和经验。

可编程器件对我们设计数字系统有很多其它手段所不能及的,有着很多优点。

首先,它对我们布线提供了更大的自由度。

一般的中规模芯片的管脚都是固定的,而PLD管脚是我们分配的,这样,我们可以灵活地根据实际电路的情况分配管脚,使我们布线更美观、布线的数量可以减小;

其次,它允许我们在焊接完毕后仍然可以修改程序,修改电路的逻辑功能。

这给我们调试提供了极大的方便;

最后,这种方法能够提高我们的逻辑思维能力,把更多的精力放在对原理的理解上,而不是捎带繁琐的焊接过程中。

可编程逻辑器件的设计应用是具有很多优点的现代化的电子电路实现方法了,借着这次试验我们从中学到了很多,这对以后的这方面应用有着巩固基础的作用。

附录一:

模块的VHDL实现:

源程序:

CONTROL模块:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitysettimeis--definingsetmodule

port(reset:

instd_logic;

start:

--enterandexitestupmode

adjust:

--changevalue

move:

--changebit

settime:

outstd_logic;

--outputindicator

hrhset:

outintegerrange0to2;

--highbitofhour

hrlset:

outintegerrange0to9;

--lowbitofhour

mnhset:

outintegerrange0to5;

--highbitofminute

mnlset:

--lowbitofminute

sehset:

--highbitofsecond

selset:

outintegerrange0to9--lowbitofsecond

);

endsettime;

architecturecontrolofsettimeis--timesettingunit

typestateis(hh,hl,mh,ml,sh,sl,ini);

--definespointbeingset,states

signaladjst:

state;

--pointerofpointbeingset

signalsetmark:

std_logic;

--statusofsetting

signalslo,mlo,hlo:

integerrange0to9;

--placetostoretimedata,variables

signalshi,mhi:

integerrange0to5;

--placetostoretimedata

signalhhi:

integerrange0to2;

BEGIN

hrhset<

=hhi;

hrlset<

=hlo;

mnhset<

=mhi;

mnlset<

=mlo;

sehset<

=shi;

selset<

=slo;

settime<

=setmark;

mark:

process(start)

begin

ifreset='

1'

then

setmark<

='

0'

;

elsifstart'

eventandstart='

ifsetmark='

elsesetmark<

endif;

endprocess;

--coreprogramforsettingtime

set_core:

process(move,reset)--changethebitbeingset

adjst<

=ini;

elsifmove='

andmove'

eventthen

caseadjstis

whenini=>

=hh;

whenhh=>

=hl;

whenhl=>

=mh;

whenmh=>

=ml;

whenml=>

=sh;

whensh=>

=sl;

whensl=>

endcase;

process(adjust)--changethenumberofthebit

then

hhi<

=0;

hlo<

mhi<

mlo<

shi<

slo<

elsifadjust='

andadjust'

ifhhi=2then

elsehhi<

=hhi+1;

ifhhi=2andhlo=3then

elsifhlo=9then

elsehlo<

=hlo+1;

if(mhi=5)then

elsemhi<

=mhi+1;

if(mlo=9)then

elsemlo<

=mlo+1;

if(shi=5)then

elseshi<

=shi+1;

if(slo=9)then

else

=slo+1;

NULL;

endcontrol;

走时模块:

entityruntimeis

port(clk:

--clocksignal,1Hz

--inputsignalfromcontrolmodule

--beginofinputtime

hhset:

inintegerrange0to2;

hlset:

inintegerrange0to9;

mhset:

inintegerrange0to5;

mlset:

shset:

slset:

--endofinputtime

--beginofoutputtimetodisplay

hhdis:

hldis:

mhdis:

mldis:

shdis:

sldis:

outintegerrange0to9);

--endofoutputtimetodisplay

endruntime;

architecturerunofruntimeis

signalsl,ml,hl:

signalsh,mh:

signalhh:

begin--initalizetimeoutput

run_time:

--mainclockprocess

process(clk,settime)

ifsettime='

sl<

=slset;

sh<

=shset;

ml<

=mlset;

mh<

=mhset;

hl<

=hlset;

hh<

=hhset;

else

ifclk='

andclk'

eventthen

ifsl=9thensl<

ifsh=5thensh<

ifml=9thenml<

ifmh=5thenmh<

ifhl=9thenhl<

=hh+1;

elsifhl=3andhh=2then

hl<

elsehl<

=hl+1;

mh<

=mh+1;

ml<

=ml+1;

sh<

=sh+1;

sl<

=sl+1;

hhdis<

hldis<

mhdis<

mldis<

shdis<

sldis<

endrun;

显示模块:

entitydisptimeis

port(sclk:

--scanclock,atabout1k

reset:

display:

outstd_logic_vector(7downto0);

--drivingsignalforLED

addr:

outstd_logic_vector(2downto0);

--ledbitselection

inintegerrange0to9);

procedureshow(number:

integerrange0to9)is--convertdatatoleddrivingsignal

casenumberis

when0=>

display<

="

00111111"

when1

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

当前位置:首页 > 小学教育 > 学科竞赛

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

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