欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    EDA课程设计万历.doc

    • 资源ID:4146496       资源大小:4.11MB        全文页数:23页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    EDA课程设计万历.doc

    目录一、设计任务和要求1二、总体框图1三、选择器件2四、功能模块341日模块34.2月模块54.3年模块74.4星期模块84.5扫描模块94.6数码管模块114.7三八译码器124.8分频器模块14五总体电路设计图和硬件实现145.1程序仿真电路145.2硬件实现18六设计中存在的问题21七、深入研究21八、心得体会21简易万年历的设计一、设计任务和要求1.用七个七段数码管显示年的低两位,月,日和星期,并具有闰年判断功能;2.可以手动调整年,月,日,星期;3.在Quartus II 6.0中编写VHDL程序实现年,月,日星期各模块的功能;4.编写顶层程序将各模块连接起来实现万年历调时功能。二、总体框图图1 总体框图上图为总体设计框图,主要有计数模块、年月日模块、分频模块和扫描译码显示模块组成。分频模块在外部时钟信号的作用下实现分频后将其分频信号分别输出给计数模块和扫描模块。在分频信号(日脉冲)作用下计数模块实现计数功能实现年月日计数功能,但其计数功能是在以BCD码形式所记录的。这就需要扫描电路去扫描计数模块所输出的时间在500HZ脉冲下经过译码器将其译成共阴数码管所对应的二进制数进行显示,最终显示的为年月日。外部时间控制信号可控制时间的校验。三、选择器件1、PC机一台。2、CPLD/FPGA适配器板:标准配置EPF10K10LC84-4接口板,下载接口是数字芯片的下载接口(DIGITAL JTAG),主要用于CPLD/FPGA芯片的数据下载。3、实验箱:装有七段数码管及蜂鸣器等,七段数码管真值表及字型如下表1 七段数码管真值表输入输出字型DCBA00001111110000101100000010110110100111111001010001100110101101101101101011111011111100001000111111110011111011七段数码管字形如下:图2 数码管字型图四、功能模块41日模块1.模块图图3 日模块图2.仿真图 图4 日模块仿真图clk:输入脉冲;pan:输入月的判断信号,0表示大月为31天,1表示小月30天,2表示平月为28天,3表示闰月为29天;T1:日的个位;T2:日的十位;cout:进位信号,当pan=0的时候T2T1=31时产生进位,cout=1,当pan=1的时候T2T1=30时产生进位信号,cout=1,当pan=2的时候T2T1=28时产生进位,cout=1,当pan=3的时候T2T1=29时产生进位,cout=1。3.程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TIAN IS PORT(CLK:IN STD_LOGIC; pan: in std_logic_vector(1 downto 0); T1,T2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT:OUT STD_LOGIC); END;ARCHITECTURE ONE OF TIAN ISSIGNAL Q1,Q2:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL AB:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN PROCESS (CLK,pan) BEGIN IF (CLK'EVENT AND CLK='1' )THEN 检测时钟上升沿 Q1<=Q1+1; Q1开始计数 IF (Q1=9 )THEN Q1<="0000" Q2<=Q2+1; Q1=9时,Q2开始计数且Q1清零 END IF; -AB<=A&B; CASE pan IS WHEN "00"=>IF (Q2=3 )AND Q1=1 THEN Q2<="0000"Q1<="0000"COUT<='1' 当pan=00时,如果Q2=3,Q1=1,Q2清零,Q1从1开始计数并输出进位信号ELSE COUT<='0'END IF;WHEN "01"=>IF Q2=3 AND Q1=0 THEN Q2<="0000"Q1<="0001"COUT<='1' 当pan=01时,如果Q2=3,Q1=0,Q2清零,Q1从1开始计数并输出进位信号ELSE COUT<='0'END IF;WHEN "10"=>IF Q2=2 AND Q1=8 THEN Q2<="0000"Q1<="0001"COUT<='1' 当pan=10时,如果Q2=2,Q1=9,Q2清零,Q1从1开始计数并输出进位信号ELSIF Q2=2 AND Q1=9 THEN Q2<="0000"Q1<="0001"COUT<='1' 当pan=11时,如果Q2=2,Q1=8,Q2清零,Q1从1开始计数并输出进位信号ELSE COUT<='0'END IF;WHEN OTHERS=>NULL;END CASE;END IF;END PROCESS;T1<=Q1;T2<=Q2;END ONE;4.2月模块1.模块图图5 月模块图2.仿真图图6 月模块仿真图clk:输入脉冲;pan:输出月的判断信号,1、3、5、7、8、10、12为大月输出pan=00,4、6、9、11为小月输出pan=01,闰年时2月为闰月输出pan=11,否则输出pan=10;Y1:月的个位;Y2:月的十位;cout:进位信号,当Y2Y1等于12时输出cout=1;run:输入闰年信号,run=1时表示闰年,run=0时表示不是闰年。3.程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY yue IS PORT(CLK,run:IN STD_LOGIC; COUT:OUT STD_LOGIC; pan: out std_logic_vector(1 downto 0); y1,y2: out std_logic_vector(3 downto 0); END;ARCHITECTURE ONE OF yue ISSIGNAL Q1,Q2:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL q3:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS (CLK,run) BEGIN IF (CLK'EVENT AND CLK='1' )THEN 检测时钟上升沿 Q1<=Q1+1; Q1开始计数 IF (Q1=9 )THEN Q1<="0000" Q2<=Q2+1; Q1=9时,Q2开始计数且Q1清零 END IF; if q1=2 and q2=1 then q1<="0001"q2<="0000"cout<='1' q1=2,q2=1时,q2清零,q1从1开始计数并输出进位信号 else cout<='0' end if; end if; q3<=q2&q1; CASE q3 IS WHEN "00000001"=>pan<="00" 当q3为1月时pan=00可知1月为31天 when "00000010"=>if run='1' then pan<="11"else pan<="10" end if; 当q3为2月时若输入信号run=1为闰年,则pan=11即2月是29天,否则2月为28天 when "00000011"=>pan<="00" 当q3为3月时pan=00可知3月为31天 when "00000100"=>pan<="01" 当q3为4月时pan=01可知4月为30天 when "00000101"=>pan<="00" 当q3为5月时pan=00可知5月为31天 when "00000110"=>pan<="01" 当q3为6月时pan=01可知6月为30天 when "00000111"=>pan<="00" 当q3为7月时pan=00可知7月为31天 when "00001000"=>pan<="00" 当q3为8月时pan=00可知8月为31天 when "00001001"=>pan<="01" 当q3为9月时pan=01可知9月为30天 when "00010000"=>pan<="00" 当q3为10月时pan=00可知10月为31天 when "00010001"=>pan<="01" 当q3为11月时pan=01可知11月为30天 when "00010010"=>pan<="00" 当q3为12月时pan=00可知12月为31天when others=>pan<="00"END CASE;END PROCESS;y1<=Q1;y2<=Q2;END ONE;4.3年模块1.模块图图7 年模块图2.仿真图图8 年模块仿真图clk:输入脉冲;N1:年的个位;N2:年的十位;run:闰年信号输出,run=1时表示闰年,run=0时表示不是闰年,从N2N1=00开始,每4年输出一个闰年信号run=1。3.程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY NIAN IS PORT(CLK:IN STD_LOGIC; n1,n2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); run:OUT STD_LOGIC); END;ARCHITECTURE ONE OF NIAN ISSIGNAL Q1,Q2,Q3:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS (CLK,q1,q2) BEGIN IF (CLK'EVENT AND CLK='1' )THEN 检测时钟上升沿 Q1<=Q1+1; q3<=q3+1; IF (Q1=9 )THEN Q1<="0000" Q2<=Q2+1; Q1=9时,Q2开始计数且Q1清零 END IF; if q3=3 then q3<="0000" run<='1' else run<='0' end if; if q2=9 and q1=9 then q1<="0000" q2<="0000" end if;end if; END PROCESS;n1<=Q1;n2<=Q2;END ONE;4.4星期模块1模块图图9 星期模块图2仿真图图10 星期模块仿真图clk:输入脉冲;q1:从1到7变化;3程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xingqi is port(clk:in std_logic; q1:out std_logic_vector(3 downto 0);end xingqi;architecture one of xingqi is signal cq1:std_logic_vector(3 downto 0);beginprocess(clk) begin if clk'event and clk='1'then 检测时钟上升沿 cq1<=cq1+1; Q1开始计数 if cq1=7 then cq1<="0001" end if; end if;end process; q1<=cq1; end;4.5扫描模块1.模块图图11 扫描模块该模块的功能是对输入信号依次进行扫描显示,产生对数码管的选择信号。reset为复位信号低电平有效。时钟信号clk1为1ns脉冲信号,依次扫描星期年月日输出,但速度十分快,可以看作是同时输出。daout输出依次是星期年月日输出,每位输出都为BCD码,sel为BCD码。2.仿真图图12 扫描模块仿真图3.程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY seltime IS PORT( clk1,reset:IN STD_LOGIC; NIAN1,NIAN2,yue1,yue2,TIAN1,TIAN2:IN STD_LOGIC_VECTOR(3 downto 0); xingqi:IN STD_LOGIC_VECTOR(3 downto 0); daout:OUT STD_LOGIC_VECTOR(3 downto 0); sel:OUT STD_LOGIC_VECTOR(2 downto 0);END seltime;ARCHITECTURE fun OF seltime IS - SIGNAL count:STD_LOGIC_VECTOR(2 downto 0);SIGNAL count:STD_LOGIC_VECTOR(2 downto 0);BEGIN sel<=count; process(clk1,reset) begin if(reset='0')then 复位信号有效,输出为零 count<="000" elsif(clk1'event and clk1='1')then 检测时钟上升沿 if(count>="110")then count<="000" else count<=count+1; end if; end if; case count is when "000"=>daout<=TIAN1(3 downto 0); 分别存储年月日星期 when "001"=>daout<=TIAN2(3 downto 0); when "010"=>daout<=yue1(3 downto 0); when "011"=>daout<=yue2(3 downto 0); when "100"=>daout<=NIAN1(3 downto 0); when "101"=>daout<=NIAN2(3 downto 0); when others=>daout<=xingqi(3 downto 0); - daout(1 downto 0)<=xingqi(3 downto 0); end case; end process;end fun; 4.6数码管模块1.模块图图13 数码管模块该模块的功能是将输入BCD码数转换为七段数码管需要的数据。将num中的BCD码编译到共阴数码管,显示为具有年月日的简易万年历。表2 数码管真值表numled000011111100001011000000101101101001111110010100011001101011011011011010111110111111000010001111111100111110111010111011110110011111110010011101101011110111101001111111110001112.仿真图图14 数码管模块仿真图3.程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY deled IS PORT(num:IN std_logic_vector(3 downto 0); led:OUT std_logic_vector(6 downto 0);END deled;ARCHITECTURE fun OF deled ISBEGIN led<="1111110"when num="0000"else "0110000"when num="0001"else "1101101"when num="0010"else "1111001"when num="0011"else "0110011"when num="0100"else "1011011"when num="0101"else "1011111"when num="0110"else "1110000"when num="0111"else "1111111"when num="1000"else "1111011"when num="1001"else "1000111"when num="1111"END fun;4.7三八译码器1.模块图图15 三八译码器模块图该模块的功能是将输入BCD码数转换为七段数码管需要的数据,将seltime中的BCD码编译到共阴数码管,显示为具有年月日功能的简易万年历。2.仿真图 图16 三八译码器仿真图表3 三八译码器真值表sel q011111110111111101211111011311110111411101111511011111610111111others111111113.程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decode3_8 IS PORT(SEL:IN STD_LOGIC_VECTOR(2 downto 0); Q:OUT STD_LOGIC_VECTOR(7 downto 0) );END decode3_8;ARCHITECTURE a OF decode3_8 ISBEGIN Q<="11111110"when sel=0 else "11111101"when sel=1 else "11111011"when sel=2 else "11110111"when sel=3 else "11101111"when sel=4 else "11011111"when sel=5 else "10111111"when sel=6 else "11111111"END a;4.8分频器模块1.模块图图17 分频器模块图 该模块实现的功能是分频,clk_in 输入一个100MHZ的脉冲信号,经过分频器后得到一个1HZ的秒脉冲的脉冲信号。其中是为扫描模块提供时钟信号。2.程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY div_clk IS PORT(clk_in:IN STD_LOGIC; div_out:OUT STD_LOGIC);END div_clk;ARCHITECTURE a OF div_clk ISSIGNAL fre_N:integer range 0 to 10;SIGNAL clk_tmp:std_logic;BEGIN div_out<=clk_tmp; process(clk_in) begin if falling_edge(clk_in)then if fre_N>=9 then fre_N<=0; clk_tmp<=not clk_tmp; else fre_N<=fre_N+1; end if; end if; end process;END a;五总体电路设计图和硬件实现5.1程序仿真电路1.总电路图图18 总仿真电路图100MHZ脉冲作为天计数信号输入使天计数,通过pan判断大小月及制计数,满进制后进位,进位信号作为月信号时钟使月以十二进制计数,满十二后进位,进位信号作为年时钟使年计数。同时100MHZ脉冲还作为星期的计数信号,使星期以七进制循环。扫描电路有时间信号进来后在1000MHZ时钟下进行快速扫描,经过译码器和七段数码管显示时间。2.仿真图图19 总体仿真图在clk信号为10ns,clkdsp信号为1ns,reset高电平1无效时,出现正确的年月日循环,三八译码器可以正确编码。3.管脚分配图图20 管脚分配图4.总程序library ieee;use ieee.std_logic_1164.all;entity wannianli isport(clk:in std_logic;k1,k2:in std_logic;o1,o2,o3,o4,o5,o6,o7:out std_logic_vector(6 downto 0);d1,d2:out std_logic);end entity;architecture one of wannianli iscomponent tianport(clk:in std_logic;pan:in std_logic_vector(1 downto 0);T1,T2:out std_logic_vector(3 downto 0);cout:out std_logic);end component;component xingqi port(clk:in std_logic; q1:out std_logic_vector(3 downto 0);end component;component yueport(clk,run:in std_logic;cout:out std_logic;pan:out std_logic_vector(1 downto 0);Y1,Y2:out std_logic_vector(3 downto 0);end component;component nianport(clk:in std_logic;N1,N2:out std_logic_vector(3 downto 0);run:out std_logic);end component;component tiaoshiport(k1,k2:in std_logic;m1,m2:in std_logic;n1,n2:out std_logic;d1,d2:out std_logic);end component;component ledport(ledi:in std_logic_vector(3 downto 0);ledo:out std_logic_vector(6 downto 0);end component;signal y1,y2,y3,y4,y5,y6,y7: std_logic_vector(3 downto 0);signal p: std_logic_vector(1 downto 0);signal c1,c2: std_logic;signal r: std_logic;signal ck1,ck2: std_logic;beginu1:tian port map(clk,p,y1,y2,c1);u2:xingqi port map(clk,y7);u3: yue port map(ck1,r,c2,p,y3,y4);u4:nian port map(ck2,y5,y6,r);u5:tiaoshi port map(k1,k2,c1,c2,ck1,ck2,d1,d2);u6:led port map(y1,o1);u7:led port map(y2,o2);u8:led port map(y3,o3);u9:led port map(y4,o4);u10:led port map(y5,o5);u11:led port map(y6,o6);u12:led port map(y7,o7);end;5.2硬件实现 连线:用一根导线连clk与IO3。经硬件测试,启动电源,数码管有正确的数字显示,即年月日、星期在实验箱上按正确的进制计数。1.总电路图:图21 总电路图2.实物图图22 02年8月22日 周一图23 12年12月31日 周二六设计中存在的问题1.程序在编写过程中不够细心,出现errors,最终根据提示一一改正;2.各个模块在单独仿真时能出现正确结果,但在总的电路图中有一部分数值不能正确显示,通过改变程序中的一些细节和端口连接,最终问题得以解决;3.日模块在提供月的进位信号时,pan信号在判断各月的天数时不能正确显示结果。在合理使用if,case等语句后实现目标。七、深入研究1.把公历日期对应的农历日期能准确表示出来;2.固定的公历、农历节日用点阵字符显示,并有声音提醒;3农历日期能用点阵字符显示,同时公历日期用数码管显示;4.所有功能既可程序循环,又可手动调节。八、心得体会通过本次课程设计我对所学知识有了更加深刻的认识,对EDA和数字电子技术有了更加深入的理解,在课程设计过程中,我遇到了很多困难,无论是程序设计方面的,还是调试方面的问题,但通过不断的尝试和老师的指导,这些问题终于一一得到解决。其中,我认真的将原来不懂得程序编程问题向老师请教得已解决,同时也了解了在程序编写的时候容易出现的问题。在程序编写开始时分不清每个模块需要多大频率的脉冲,但在分析各个模块的功能及脉冲的作用后渐渐了解为什么扫描模块的频率为什么要选的比时钟信号大的多了。一些刚开始不知道如何编写的模块经过查阅资料渐渐有了思路。在试验箱上的多次试验让我对试验箱的管脚及各部分作用都有了更深的了解。虽然困难重重,但结果是喜人的,当我看到自己的设计结果时,内心的喜悦和成就感是无以名状的。通过课程设计全方位的培养和考察我们解决问题和处理问题的能力。在设计编程到最后实现功能的过程中,我们必须经过思考。从开始程序的编写到模块生成,再到最后功能的完全实现,这要求我们拥有自顶上向下的思维,以及自底向上的编辑能力。它除了要求我们必须在短期内锻炼迅速掌握一门语言的能力,同时也要求学会利用其他的资料与书籍。这次课程设计让我学到的不只是更多相关的知识,还让我了解到了努力、坚持的重要性。也许在坚持一点点成功就是属于你的。通过也让我了解到同学间团结协作,互帮互助的作用,或许是一个不经意的提点就会让你收益匪浅。由此可见,课程设计的意义是十分重大和深远的。不仅丰富了我们的知识锻炼了我们的动手能力,还给以我们生活的提点,展示自己的平台。今后,我会更加努力学习更多专业知识,不断提高自己的专业素质,把自己的综合水平提升一个高度,争取不断做出新而实用的设计,并将所学知识运用到实践中去。

    注意事项

    本文(EDA课程设计万历.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开