EDA设计.docx
《EDA设计.docx》由会员分享,可在线阅读,更多相关《EDA设计.docx(19页珍藏版)》请在冰豆网上搜索。
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
附录:
引脚分配图
顶层原理图