EDA 技术及应用 实验报告.docx

上传人:b****6 文档编号:7405304 上传时间:2023-05-11 格式:DOCX 页数:16 大小:778.97KB
下载 相关 举报
EDA 技术及应用 实验报告.docx_第1页
第1页 / 共16页
EDA 技术及应用 实验报告.docx_第2页
第2页 / 共16页
EDA 技术及应用 实验报告.docx_第3页
第3页 / 共16页
EDA 技术及应用 实验报告.docx_第4页
第4页 / 共16页
EDA 技术及应用 实验报告.docx_第5页
第5页 / 共16页
EDA 技术及应用 实验报告.docx_第6页
第6页 / 共16页
EDA 技术及应用 实验报告.docx_第7页
第7页 / 共16页
EDA 技术及应用 实验报告.docx_第8页
第8页 / 共16页
EDA 技术及应用 实验报告.docx_第9页
第9页 / 共16页
EDA 技术及应用 实验报告.docx_第10页
第10页 / 共16页
EDA 技术及应用 实验报告.docx_第11页
第11页 / 共16页
EDA 技术及应用 实验报告.docx_第12页
第12页 / 共16页
EDA 技术及应用 实验报告.docx_第13页
第13页 / 共16页
EDA 技术及应用 实验报告.docx_第14页
第14页 / 共16页
EDA 技术及应用 实验报告.docx_第15页
第15页 / 共16页
EDA 技术及应用 实验报告.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EDA 技术及应用 实验报告.docx

《EDA 技术及应用 实验报告.docx》由会员分享,可在线阅读,更多相关《EDA 技术及应用 实验报告.docx(16页珍藏版)》请在冰点文库上搜索。

EDA 技术及应用 实验报告.docx

EDA技术及应用实验报告

一、任务:

基于CPLD实现数字钟的实验

要求:

(一)接通5V电源可实现数字钟的基本功能

(二)可通过按键调整分钟和时钟位的数值

二、设计框图(框图说明)

整个数字时钟的大体分为CPLD模块、数码管模块、时钟模块、按键电源模块等四个模块。

CPLD在时钟信号、电源、按键的作用下控制数码管的输出显示。

三、CPLD内部原理图

CPLD内部原理图由控制秒钟的CNT10、CNT6,控制分钟的CNT10M、CNT6,控制时钟的CNT10H,译码器DEC6G,D触发器,1000分频的F1000等模块组成。

其中ENA端为清零重置端,D1、D2端通过D触发器控制分别控制分钟位和时钟位的增加调整。

1M为时钟的输入。

Sel[7..0]控制数码管的功能端,led7s[7..0]控制数码管的码段显示。

四、CPLD内部原理图各模块相应的程序代码

--F1000的逻辑描述

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYf1000IS

PORT(CLK:

INSTD_LOGIC;

q1000:

OUTSTD_LOGIC);

ENDf1000;

ARCHITECTUREoneOFf1000IS

SIGNALX:

STD_LOGIC;

BEGIN

PROCESS(CLK)

variableCNT:

INTEGERRANGE0TO499;

BEGIN

IFCLK'EVENTANDCLK='1'then

IFCNT<499THEN

CNT:

=CNT+1;

ELSE

CNT:

=0;

X<=NOTX;

ENDIF;

ENDIF;

q1000<=X;

ENDPROCESS;

ENDONE;

--秒钟的十进制的逻辑描述

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt10is

port(clk:

instd_logic;

ena:

instd_logic;

cq:

outstd_logic_vector(3downto0);

carry_out:

outstd_logic);

endentitycnt10;

architectureoneofcnt10is

signalcqi:

std_logic_vector(3downto0);

begin

process(clk,ena)is

begin

ifena='1'thencqi<="0000";

elsifclk'eventandclk='1'then

ifcqi="1001"thencqi<="0000";

elsecqi<=cqi+'1';endif;

endif;

endprocess;

process(cqi)is

begin

ifcqi="0000"thencarry_out<='1';

elsecarry_out<='0';

endif;

endprocess;

cq<=cqi;

endarchitectureone;

--秒钟、分钟的六进制的逻辑描述

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt6is

port(clk:

instd_logic;

ena:

instd_logic;

cq:

outstd_logic_vector(3downto0);

carry_out:

outstd_logic);

endentitycnt6;

architectureoneofcnt6is

signalcqi:

std_logic_vector(3downto0);

begin

process(clk,ena)is

begin

ifena='1'thencqi<="0000";

elsifclk'eventandclk='1'then

ifcqi="0101"thencqi<="0000";

elsecqi<=cqi+'1';endif;

endif;

endprocess;

process(cqi)is

begin

ifcqi="0000"thencarry_out<='1';

elsecarry_out<='0';

endif;

endprocess;

cq<=cqi;

endarchitectureone;

--分钟的十进制逻辑描述

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt10Mis

port(clk:

instd_logic;

clr:

instd_logic;

add:

instd_logic;

cq:

outstd_logic_vector(3downto0);

carry_out:

outstd_logic);

endentitycnt10M;

architectureoneofcnt10Mis

signalcqi:

std_logic_vector(3downto0);

signalgclk:

std_logic;

begin

gclk<=clkoradd;

process(gclk,clr)is

begin

ifclr='1'thencqi<="0000";

elsifgclk'eventandgclk='1'then

ifcqi="1001"thencqi<="0000";

elsecqi<=cqi+'1';endif;

endif;

endprocess;

process(cqi)is

begin

ifcqi="0000"thencarry_out<='1';

elsecarry_out<='0';

endif;

endprocess;

cq<=cqi;

endarchitectureone;

--小时的逻辑描述

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt10his

port(clk:

instd_logic;

clr:

instd_logic;

add:

instd_logic;

cq3:

outstd_logic_vector(3downto0);

cq4:

outstd_logic_vector(3downto0));

endentitycnt10h;

architectureoneofcnt10his

signalsum:

integerrange0to11;

signalgclk:

std_logic;

signalcq1:

std_logic_vector(3downto0);

signalcq2:

std_logic_vector(3downto0);

begin

gclk<=clkoradd;

process(gclk,clr)is

begin

ifclr='1'thencq1<="0000";sum<=0;

elsifgclk'eventandgclk='1'then

ifsum=11thensum<=0;

elsesum<=sum+1;endif;

endif;

casesumis

when0=>cq1<="0000";cq2<="0000";

when1=>cq1<="0001";cq2<="0000";

when2=>cq1<="0010";cq2<="0000";

when3=>cq1<="0011";cq2<="0000";

when4=>cq1<="0100";cq2<="0000";

when5=>cq1<="0101";cq2<="0000";

when6=>cq1<="0110";cq2<="0000";

when7=>cq1<="0111";cq2<="0000";

when8=>cq1<="1000";cq2<="0000";

when9=>cq1<="1001";cq2<="0000";

when10=>cq1<="0000";cq2<="0001";

when11=>cq1<="0001";cq2<="0001";

endcase;

endprocess;

cq3<=cq1;cq4<=cq2;

endarchitectureone;

--DEC6G的逻辑描述

libraryieee;

useieee.std_logic_1164.all;

entitydec6gis

port(a:

inbit_vector(3downto0);

b:

inbit_vector(3downto0);

c:

inbit_vector(3downto0);

d:

inbit_vector(3downto0);

e:

inbit_vector(3downto0);

f:

inbit_vector(3downto0);

clk:

instd_logic;

sel:

outbit_vector(7downto0);

led7s:

outbit_vector(7downto0));

endentitydec6g;

architectureoneofdec6gis

signalsum:

integerrange0to7;

signalm:

bit_vector(3downto0);

begin

process(clk)

begin

if(clk'eventandclk='1')then

ifsum>=7thensum<=0;

elsesum<=sum+1;

endif;

endif;

casesumis

when0=>sel<="11111110";m<=a;

when1=>sel<="11111101";m<=b;

when2=>sel<="11111011";m<="1111";

when3=>sel<="11110111";m<=c;

when4=>sel<="11101111";m<=d;

when5=>sel<="11011111";m<="1111";

when6=>sel<="10111111";m<=e;

when7=>sel<="01111111";m<=f;

endcase;

endprocess;

process(m)

begin

casem(3downto0)is

when"0000"=>led7s<="00111111";

when"0001"=>led7s<="00000110";

when"0010"=>led7s<="01011011";

when"0011"=>led7s<="01001111";

when"0100"=>led7s<="01100110";

when"0101"=>led7s<="01101101";

when"0110"=>led7s<="01111101";

when"0111"=>led7s<="00000111";

when"1000"=>led7s<="01111111";

when"1001"=>led7s<="01101111";

when"1111"=>led7s<="01000000";

whenothers=>NULL;

endcase;

endprocess;

endone;

--D触发器的逻辑描述

libraryieee;

useieee.std_logic_1164.all;

entitydffis

port(d:

instd_logic;

clk:

instd_logic;

q:

outstd_logic);

endentitydff;

----------------------------------

architectureddofdffis

begin

tt:

process(clk)is

begin

if(clk'eventandclk='1')

thenq<=d;

endif;

endprocesstt;

endarchitecturedd;

五、CPLD内部结构各模块图与各自仿真图

1、为DEC6G模块图与之仿真图

Maxplus中设置:

ENDTIME=480ns,Gridsize=15ns;时钟周期为30ns;在时钟信号的控制下,a[3..0]、b[3..0]、c[3..0]、d[3..0]、e[3..0]、f[3..0]端使输入,相应SEL[7..0]控制相应的数码管,LED[7..0]在相应的数码管上产生相应的断码。

实现译码器的功能。

2、为小时模块与之仿真图

Maxplus设置:

ENDTIME=480ns;Gridsize=10ns;clk周期为20ns;clr低电平有效,在时钟信号的作用下,cq[33…30]产生脉冲,当cq[33…30]达到9时,cq[43…40]产生一个脉冲,add按键在按下时也达到了加速的目的,仿真图可见可以实现其功能。

3、为分钟十进制模块与之仿真图

Maxplus设置:

ENDTIME=480ns;Gridsize=15ns;clk周期为30ns;仿真图可知当clr=0时有效;add上升沿有效;当clk=0时,cq[3..0]有输出,carry_out=0,当cq[3..0]产生十个脉冲时,carry_out产生一个脉冲,add按键按下时时间延长,达到了设计的功能要求。

4、为秒位、分位六进制模块图与之仿真图

Maxplus设置:

ENDTIME=480ns,Gridsize=15ns,周期T=30ns,

仿真实现CNT6功能:

当ena=0,clk上升沿时cq[3..0]实现六进制cq[3..0]到6时carry_out产生一个脉冲;

5、为秒位十进制模块图与之仿真图

Maxpius设置:

ENDTIME=480ns,Gridsize=15ns,周期T=30ns,

仿真实现功能:

当ena=0andclk上升沿时cq[3..0]输出十进制当cq[3..0]到达9时carry_out产生一个脉冲;

6、为1000分频模块图与之仿真图

1000分频在maxplus中波形仿真中设置ENDTIME=20us,Gridsize=10ns;可见在CLK499个脉冲的时候,q1000产生一个脉冲,占空比=50%。

7、为D触发器模块图与之仿真图

Maxplus设置:

ENDTIME=480ns,Gridsize=10ns,clk周期T=20ns,d的周期Td=60ns,

仿真图实现功能当clk上升沿到来时q<=d;

六、实验设计结果

合理运用CPLD个端口的功能,下面图表为CPLD上各相应得端口连接

此程序所用芯片如下图所示为EPM7128SLC84-18

实验焊接成功正常工作正面图

实验焊接成功正常工作反面图

 

七、总结

在这整个数字钟的设计过程,不仅可以体现个人的细心度,而且还有对整个电路的了解,因为整个数字钟电路的设计不是说照着老师的直接焊接就行了,还得考虑电路是如何工作的,在理解的基础上,再去焊接就会达到事半功倍的效果,这也充分展示了个人的思维能力。

整个数字钟大体可以分为数码管模块、CPLD模块、晶振模块、电源模块等四个大的模块,数码管要理解它的工作原理,在理解的情况下再去焊接。

经过这次数字钟的设计,深刻体会到一个数字钟的实现不能光看CPLD里程序的设计,还得认真的理清思路,将模块先在草稿纸上规划一下,板子的焊接不光看它的实用性,还得考虑它的规划。

第一次设计时钟电路难免会出错。

板子如果焊的很有条理性,这对电路的排错检查是很有帮助的。

我花了一天的时间将板子完完全全的焊完,但是不能只追求时间的进度,这样难免出错,我没有检查一遍就直接去调试,结果很明了--失败,后来经过自己的排错、检查,居然检查出三个模块的错误,分别是晶振模块、下载端口模块、数码管模块,由于自己的疏忽之前没有检查出来,导致第一次下载调试不成功,然后自己只能逐一排查,首先是数码管的功能端没有核对好,这就会导致数码管的显示顺序出现问题,还好只需对CPLD中程序sel[7..0]的锁脚顺序改变一下就可以很好的解决这个问题了。

其次是晶振的接地端没有连对,这直接导致整个时钟电路没有时钟的支持,即使其他电路模块正确,电路也不会正常工作的,解决的方法很简单,这只需要将晶振的接地端认真核对再重新焊接,这样就把电路的两大问题解决了,装上芯片可以显示数字,当然用别人的芯片,芯片里面是别人的代码,由于锁脚不同,数码管显示乱码。

连接下载线,准备下载程序,结果没法下载,借用别人的板子下载我自己的程序,然后将芯片装入我的板子,时钟电路板子正常工作了,很显然我的板子还存在一个很大的问题在下载端口处,仔细检查了一遍我的下载端口的焊接,发现一个致命的错误—下载端口焊反了,这直接导致下载端口和下载线上的端口不对应,从而无法正常下载程序,没办法,只好重新焊接。

经过将下载端口的重新焊接,最后终于可以程序下载入芯片,这样就将整个时钟电路设计完毕。

时钟电路可以正常的工作了。

这次时钟电路的最终设计成功,让我深深的了解了时钟电路的工作原理,更学会了MAXPLUS软件的基本应用。

在成功的完成之后,也让我学到了很多,学会了自己动手设计,遇到问题自己排查,这充分的锻炼了我。

八、参考书(文章)

[1]谭会生张昌凡.EDA技术及应用[M].西安:

电子科技大学出版社,2004

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2