机械仪表]基于vhdl的万年历设计内容摘要:

断信号 panduan 可从月计数器的判断信号的输 出 pan 引入。 日计数器的源程序如下: LIBRARY IEEE。 USE。 USE。 ENTITY day IS PORT(panduan:IN STD_LOGIC_VECTOR(1 DOWNTO 0)。 clk :IN STD_LOGIC。 q1 :OUT STD_LOGIC_VECTOR (3 DOWNTO 0)。 q2 :OUT STD_LOGIC_VECTOR (3 DOWNTO 0)。 c :OUT STD_LOGIC)。 END ENTITY day。 ARCHITECTURE rt_1 OF day IS SIGNAL q3,q4:STD_LOGIC_VECTOR(3 DOWNTO 0)。 SIGNAL pan:STD_LOGIC_VECTOR(1 DOWNTO 0)。 BEGIN PROCESS(clk,panduan) BEGIN IF clk39。 EVENT AND clk=39。 139。 THEN q3=q3+39。 139。 IF q3=9 THEN q4=q4+39。 139。 q3=0000。 END IF。 13 pan=panduan。 CASE pan IS WHEN 00=IF q3=0001 AND q4=0011 THEN q3=0001。 q4=0000。 c=39。 139。 ELSE c=39。 039。 END IF。 WHEN 01=IF q3=0000 AND q4=0011THEN q3=0001。 q4=0000。 c=39。 139。 ELSE c=39。 039。 END IF。 WHEN 10=IF q3=1000 AND q4=0010THEN q3=0001。 q4=0000。 c=39。 139。 ELSE c=39。 039。 END IF。 WHEN 11=IF q3=1001 AND q4=0010THEN q3=0001。 q4=0000。 c=39。 139。 ELSE c=39。 039。 END IF。 WHEN OTHERS=NULL。 END CASE。 END IF。 q1=q3。 q2=q4。 END PROCESS。 END ARCHITECTURE rt_1。 日计数器的 波形 仿真如图 至图 所示: 1)当 判断 信号 panduan 为 00 时,日计数器的 波形 仿真如图 所示: 14 图 判断信号 panduan 为 00 时日计数器的仿真图 如图 所示,当输入 信号 panduan 为 00 时,日计数器计数至 31 时,等待 至 clk 信号下一个 脉冲上升沿到来时,进位输出 c 产生一个输出脉冲,同时日计数器再次从 1 开始计数,故设计正确。 2)当输入信号 panduan 为 01 时 ,日计数器的波形仿真如图 所示: 图 判断信号 panduan 为 01 时日计数器的仿真图 如图 所示,当输入的 panduan 为 01 时,日计数器计数至 30 时,等待至 clk 信号下一个脉冲上升沿到来时,进位输出 c 产生一个输出脉冲,同时日计数器再次从 1 开始计数,故设计正确。 3)当输入信号 panduan 为 10 时,日计数器的波形仿真如图 所示: 15 图 判断信号 panduan 为 10 时日计数器的仿真图 如图 所示,当输入的 panduan 为 10 时,日 计数器计数至 28 时,等待至 clk 信号下一个脉冲上升沿到来时,进位输出 c 产生一个输出脉冲,同时日计数器再次从 1 开始计数,故设计正确。 4)当输入信号 panduan 为 11 时,日计数器的波形仿真如图 所示: 图 判断信号 panduan 为 11 时日计数器的仿真图 如图 所示,当输入的 panduan 为 11 时,日计数器计数至 29 时,等待至 clk 信号下一个脉冲上升沿到来时,进位输出 c 产生一个输出脉冲,同时日计数器再次从 1 开始计 16 数,故设计正确。 月计数器模块 月计数 器为 12 进制计数器,但需要为日计数器的进制提供判断信号,所以该模块需要有判断信号的输出。 此外,由于闰年的 2 月和平年的 2 月,判断信号输出不同,所以该模块需要从年计数模块引入闰年的判断信号。 最终,其必须达到如下设计要求: 若月份是大月,则该信号 pan 输出 00,若月份是小月,则该信号 pan 输出 01,若月份是平年的 2月,则该信号 pan 输出 10,若月份是闰年的 2 月,则该信号 pan 输出 11。 月计数器的源程序如下: LIBRARY IEEE。 USE。 USE。 ENTITY t_12 IS port(clk :IN STD_LOGIC。 run :IN STD_LOGIC。 c:OUT STD_LOGIC。 pan :OUT STD_LOGIC_VECTOR(1 DOWNTO 0)。 q1,q2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0))。 END ENTITY t_12。 ARCHITECTURE rt_1 OF t_12 IS SIGNAL qq1,qq2: STD_LOGIC_VECTOR (3 DOWNTO 0)。 SIGNAL q3: STD_LOGIC_VECTOR (7 DOWNTO 0)。 BEGIN PROCESS(clk) BEGIN IF clk39。 EVENT AND clk=39。 139。 THEN qq1=qq1+39。 139。 IF qq1=9 THEN qq2=qq2+1。 qq1=0000。 END IF。 IF qq2=1 AND qq1=2 THEN qq1=0001。 qq2=0000。 c=39。 139。 17 ELSE c=39。 039。 END IF。 END IF。 q3=qq2amp。 qq1。 CASE q3 IS WHEN 00000001=pan=00。 january WHEN 00000010=IF run=39。 139。 THEN pan=11。 ELSE pan=10。 END IF。 february WHEN 00000011=pan=00。 march WHEN 00000100=pan=01。 april WHEN 00000101=pan=00。 may WHEN 00000110=pan=01。 june WHEN 00000111=pan=00。 july WHEN 00001000=pan=00。 august WHEN 00001001=pan=01。 september WHEN 00010000=pan=00。 october WHEN 00010001=pan=01。 november WHEN 00010010=pan=00。 december WHEN others=NULL。 END CASE。 q1=qq1。 q2=qq2。 END PROCESS。 END ARCHITECTURE rt_1。 月计数器的波形仿真如图 至图 所示: 1)当输入信号 run 为 1 时,即表示该年份为闰年,月计数器的波形仿真如图 所示: 18 图 闰年时月计数器的仿真图 如图 所示,当输入信号 run 为高电平,即表示闰年时,在 2 月份,输出判断信号pan 为 11;在大月,输出判断信号 pan 为 00;在小月,输出判断信号 pan 为 01;与日计数器的进制判断要求一致,故设计正确。 2)当输入信号 run 为 0 时,即表示该年份为平年,月计数器的波形仿真如图 所示: 图 平年时月计数器的仿真图 19 如图 所示,当输入信号 run 为低电平,即表示平年时,在 2 月份,输出判断信号pan 为 10;在大月,输出判断信号 pan 为 00;在小月,输出判断信号 pan 为 01;与日计数器的进制判断要求一致,故设计正确。 年计数器模块 1) 年低位计数器 年低位计数器为 100 进制计数器,同时在年低位计数器中需要判断该年是否为闰年。 除此,低位计数器不仅要有触发输入,也要有进位输出,作为年高位计数器的触发输入。 年低位计数器源程序如下: LIBRARY IEEE。 USE。 USE。 ENTITY year_1 IS PORT(clk:IN STD_LOGIC。 y1,y2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 run,c:OUT STD_LOGIC)。 END ENTITY year_1。 ARCHITECTURE rt_1 OF year_1 IS SIGNAL q1,q2,q3:STD_LOGIC_VECTOR(3 DOWNTO 0)。 BEGIN PROCESS(clk) BEGIN IF clk39。 EVENT AND clk=39。 139。 THEN q1=q1+39。 139。 IF q1=9 THEN q1=0000。 q2=q2+39。 139。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。