EDA设计.docx

上传人:b****7 文档编号:24949023 上传时间:2023-06-03 格式:DOCX 页数:19 大小:230.28KB
下载 相关 举报
EDA设计.docx_第1页
第1页 / 共19页
EDA设计.docx_第2页
第2页 / 共19页
EDA设计.docx_第3页
第3页 / 共19页
EDA设计.docx_第4页
第4页 / 共19页
EDA设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

EDA设计.docx

《EDA设计.docx》由会员分享,可在线阅读,更多相关《EDA设计.docx(19页珍藏版)》请在冰豆网上搜索。

EDA设计.docx

EDA设计

第一章前言

1.1EDA技术简介

电子系统设计自动化(EDA:

ElectronicDesignAutomation)已成为不可逆转的潮流,它是包含CAD、CAE、CAM等与计算机辅助设计或设计自动化等相关技术的总称。

随着信息时代的到来,信息电子产品已不断地向系统高度集成化和高度微型化发展,使得传统的手工设计和生产技术无法满足信息产品的社会和市场需要,因此,人们开始借助于EDA技术进行产品的设计和开发。

目前EDA技术主要是以计算机软件工具形式表现出来的,对于现代复杂的电子产品设计和开发来说,一般需要考虑“自上而下”三个不同层次内容的设计(即:

系统结构级设计,PCB板级设计和IC集成芯片级设计)。

ProtelDXP软件系统是一套建立在IBM兼容PC环境下的CAD电路集成设计系统,它是世界上第一套EDA环境引入到Windows环境的EDA开发工具,具有高度的集成性和可扩展性。

本设计就是利用ProtelDXP进行原理图设计、PCB布局布线、进行电路仿真测试。

通过本设计充分了解到ProtelDXP的特点并且充分掌握了ProtelDXP的设计系统的基础知识。

 

1.2EDA的发展前景

随着微电子技术和计算机技术的不断发展,在涉及通信、国防、航天、工业自动化、仪器仪表等领域工作中,EDA技术的含量以惊人的速度上升,从而使它成为当今电子技术发展的前言之一。

由于在电子系统设计领域中的明显优势,基于大规模可编程器件解决方案的EDA技术及其应用在近年中有了巨大的发展,将电子发展技术再次推向了又一崭新的历史阶段。

这些新的发展大致包含了这样6个方面:

1.新器件;2.新工具软件;3.嵌入式系统设计;4.DSP系统设计;5.计算机处理器设计;6.与ASIC市场的竞争技术。

 

第二章设计内容及要求

2.1设计内容

1.设计并制作一块专用ASIC电子钟芯片;

2.以数字形式显示时,分,秒的功能,小时计时“24翻1”,分,秒计时“60翻1”;

3.报时方式仿电台整点报时,一短四长;

4.能对时和分进行校准;

5.功能扩展(显示星期并能校准);

 

2.2设计要求

1.设计思路清晰,整体设计给出框图,提供顶层电路图;

2.应用vhdl完成各次级模块设计,绘出具体设计程序;

3.完成设计仿真和程序下载;

4.写出实验报告

 

第三章设计原理及框图

3.1设计框图

FPGA

基准时钟

时钟

 

显示

动态

显示

译码

计数器

复位

校时按键

 

整点报时

 

3.2设计原理

电子钟的功能为:

数字钟、调整时间、整点报时。

整个电子钟可以分成如下几个模块:

1.数字钟和调时模块:

调时功能为改变数字钟的时和分以及星期,可根据输入的信号按键SM1,SM2,SM3,SM4进行调节,并且当此四个信号无效时可作为数字钟正常运行。

2.报时模块:

报时模块控制在整点时,到时一个时钟信号送至实验仪的扬声器发声。

3.显示模块:

显示模块根据不同的功能号,将相应的功能输出至数码管上输出时分秒分别用8位显示,采用译码由7位数码管显示出来。

 

第四章模块程序设计及仿真

模块程序及仿真

4.1.分、秒模块程序及仿真

秒、分:

秒和分都是从0计数到59,可以用六十进制表示。

CNT60程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityCNT60is

port(CLK:

instd_logic;

cq1,cq2:

outstd_logic_vector(3downto0);

cout:

outstd_logic);

endentity;

architectureoneofCNT60is

signalq1,q2:

std_logic_vector(3downto0);

begin

process(CLK)

begin

ifCLK'eventandCLK='1'then––检测时钟上升沿

q2<=q2+1;––q2开始计数

ifq2=9thenq1<=q1+1;

q2<="0000";

endif;

ifq2=9andq1=5then

q1<="0000";q2<="0000";

cout<='1';––q2=9,q1=5时,q1,q2清零并输出进位信号

elsecout<='0';

 

endif;

endprocess;

cq1<=q1;cq2<=q2;

end;

CNT60波形仿真如图:

CNT60模块如图:

4.2时模块程序及仿真

时是从0计数到23,可以用二十四进制表示。

CNT24程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityCNT24is

port(CLK:

instd_logic;

cq1,cq2:

outstd_logic_vector(3downto0);

cout:

outstd_logic);

endentity;

architectureoneofCNT24is

 

signalq1,q2:

std_logic_vector(3downto0);

begin

process(CLK)

begin

ifCLK'eventandCLK='1'then––检测时钟上升沿

q2<=q2+1;––q2开始计数

ifq2=9thenq1<=q1+1;

q2<="0000";

endif;––q2=9时,q1开始计数且q2清零

ifq2=3andq1=2thenq1<="0000";

q2<="0000";

cout<='1';––q2=3,q1=2时,q1,q2清零并输出进位信

elsecout<='0';

endif;

endif;

endprocess;

cq1<=q1;cq2<=q2;

end;

CNT24波形仿真如图:

CNT24模块如图:

4.3星期模块程序及仿真

星期计数是从1到7,可以用八进制表示

 

程序如下

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt7is

port(clk:

instd_logic;

q1,q2:

outstd_logic_vector(3downto0));

endcnt7;

architectureoneofcnt7is

signalq11,q22:

std_logic_vector(3downto0);

begin

process(clk)

begin

ifclk'eventandclk='1'then

q11<=q11+1;

ifq11=7then

q11<="0001";

endif;

endif;

q22<="0000";

endprocess;

q1<=q11;q2<=q22;

end;

 

仿真图如下:

 

星期模块图:

4.4显示模块程序及仿真

数码管上输出星期、时、分、秒分别用8位显示,采用译码由7位数码管显示出来。

程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSCAN_LEDIS

PORT(CLK:

INSTD_LOGIC;

d0,d1,d2,d3,d4,d5,d6,d7:

inSTD_LOGIC_VECTOR(3DOWNTO0);

SG:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

BT:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

END;

ARCHITECTUREoneOFSCAN_LEDIS

SIGNALCNT8:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALA:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

P1:

PROCESS(CNT8)

BEGIN

CASECNT8IS

WHEN"000"=>BT<="00000001";A<=d0;

WHEN"001"=>BT<="00000010";A<=d1;

WHEN"010"=>BT<="00000100";A<=d2;

WHEN"011"=>BT<="00001000";A<=d3;

WHEN"100"=>BT<="00010000";A<=d4;

WHEN"101"=>BT<="00100000";A<=d5;

WHEN"110"=>BT<="01000000";A<=d6;

WHEN"111"=>BT<="10000000";A<=d7;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP1;

P2:

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'

THENCNT8<=CNT8+1;

ENDIF;

ENDPROCESSP2;

P3:

PROCESS(A)

BEGIN

CASEAIS

WHEN"0000"=>SG<="0111111";WHEN"0001"=>SG<="0000110";

WHEN"0010"=>SG<="1011011";WHEN"0011"=>SG<="1001111";

WHEN"0100"=>SG<="1100110";WHEN"0101"=>SG<="1101101";

WHEN"0110"=>SG<="1111101";WHEN"0111"=>SG<="0000111";

WHEN"1000"=>SG<="1111111";WHEN"1001"=>SG<="1101111";

WHEN"1010"=>SG<="1110111";WHEN"1011"=>SG<="1111100";

WHEN"1100"=>SG<="0111001";WHEN"1101"=>SG<="1011110";

WHEN"1110"=>SG<="1111001";WHEN"1111"=>SG<="1110001";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP3;

END;

 

仿真图如下:

 

显示模块:

 

4.5校准模块程序

校准只需调星期、时、分这5个量,故tiaoshi程序就是一个三选一程序。

程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitytiaoshiis

port(k1,k2:

instd_logic;

m1,m2,m3:

instd_logic;

n1,n2,n3:

outstd_logic);

endentity;

architectureoneoftiaoshiis

signalq:

std_logic_vector(3downto0);

begin

process(k1)

begin

ifk1'eventandk1='1'thenq<=q+1;

ifq=3thenq<="0000";

endif;

endif;

caseqis

when"0000"=>n1<=m1;n2<=m2;n3<=m3;when"0001"=>n1<=k2;n2<='0';n3<='0';

 

when"0010"=>n1<='0';n2<=k2;n3<='0';

when"0011"=>n1<='0';n2<='0';n3<=k2;--when"0100"=>n1<='0';n2<='0';n3<='0';n4<=k2;

--when"0101"=>n1<='0';n2<='0';n3<='0';n4<='0';

whenothers=>NULL;

endcase;

endprocess;

end;

调试模块:

4.6报时模块程序

程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityalarmis

port(clk:

instd_logic;

m1,m2,F1,F2,S1,S2:

instd_logic_vector(3downto0);

alarm:

outstd_logic);

endalarm;

architectureoneofalarmis

signalq11:

std_logic_vector(23downto0);

 

begin

process(F1,F2,S1,S2)

 

begin

q11<=S2&S1&F2&F1&m1&m2;

caseq11is

when"000000000000000000000000"=>alarm<=clk;

when"000000010000000000000000"=>alarm<=clk;

when"000000100000000000000000"=>alarm<=clk;

when"000000110000000000000000"=>alarm<=clk;

when"000001000000000000000000"=>alarm<=clk;

when"000001010000000000000000"=>alarm<=clk;

when"000001100000000000000000"=>alarm<=clk;

when"000001110000000000000000"=>alarm<=clk;

when"000010000000000000000000"=>alarm<=clk;

when"000010010000000000000000"=>alarm<=clk;

when"000100000000000000000000"=>alarm<=clk;

when"000100010000000000000000"=>alarm<=clk;

when"000100100000000000000000"=>alarm<=clk;

when"000100110000000000000000"=>alarm<=clk;

when"000101000000000000000000"=>alarm<=clk;

when"000101010000000000000000"=>alarm<=clk;

when"000101100000000000000000"=>alarm<=clk;

when"000101110000000000000000"=>alarm<=clk;

when"000110000000000000000000"=>alarm<=clk;

when"000110010000000000000000"=>alarm<=clk;

when"001000000000000000000000"=>alarm<=clk;

when"001000010000000000000000"=>alarm<=clk;

when"001000100000000000000000"=>alarm<=clk;

when"001000110000000000000000"=>alarm<=clk;

whenothers=>null;

endcase;

endprocess;

endone;

报时模块:

 

第五章心得总结

 

这次EDA课程设计历时两个星期,在整整两个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。

特别是当每一个子模块编写调试成功时,心里特别的开心。

但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。

在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示:

在设定输入的时钟信号后,数字秒表开始计数,但是始终看不到秒和小时的循环计数。

后来,在数十次的调试之后,才发现是因为输入的时钟信号对于器件的延迟时间来说太短了。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

总的来说,这次设计的数字秒表还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。

最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

 

参考文献:

[1]黄正瑾.在系统编程技术及其应用.南京:

东南大学出版社,1997

[2]彭介华.电子技术课程设计指导.北京:

高等教育出版社,1997

[3]李国丽,朱维勇.电子技术实验指导书.合肥:

中国科技大学出版社,2000

[4]潘松,黄继业.EDA技术实用教程.北京:

科学出版社,2002

[5]郑家龙,王小海,章安元.集成电子技术基础教程.北京:

高等教育出版社,2002

 

附录:

引脚分配图

 

顶层原理图

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

当前位置:首页 > PPT模板 > 商务科技

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

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