由于二月的判断讯号输出要遭受平年和闰月的影响,平年时分析信号是10,闰年时分析信号为11,所以它要有接收来之年系统的判断闰年闰月的输出讯号(run=0时表平年,run=1时表闰年)。源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MONTH ISport(clk:IN STD_LOGIC;run:IN STD_LOGIC;cout :OUT STD_LOGIC;pan:OUT STD_LOGIC_VECTOR(1 DOWNTO );cq1,cq2 :OUT STD_LOGIC_VECTOR(3 DOWNTO ));END ;ARCHITECTURE behav OF MONTH ISsignal cq3,cq4: STD_LOGIC_VECTOR (3 DOWNTO );signalcq5: STD_LOGIC_VECTOR (7 DOWNTO );BEGINPROCESS(clk)BEGINIF clk'EVENT and clk='1' THENcq3<=cq3+1;IF cq3=9 THEN cq4<=cq4+1;cq3<="0000"; END IF;IF cq3=2 and cq4=1 THEN cq3<="0001";cq4<="0000";cout<='1';ELSE cout<='';END IF;END IF;--十二进制计数器cq5<=cq4&cq3; --逻辑位相连接CASE cq5 ISWHEN "00000001"=>pan<="00";--一月WHEN "00000010"=>if run='1' then pan<="11";else pan<="10";end if; --—二月WHEN "00000011"=>pan<="00";--三月WHEN "00000100"=>pan<="01";--四月WHEN "00000101"=>pan<="00";--五月WHEN "00000110"=>pan<="01";--六月WHEN "00000111"=>pan<="00";--七月WHEN "00001000"=>pan<="00";--八月WHEN "00001001"=>pan<="01";--七月WHEN "00001010"=>pan<="00";--十月WHEN "00001011"=>pan<="01";--十一月WHEN "00001100"=>pan<="00";--十二月WHEN others=>NULL;END CASE; cq1<=cq3; cq2<=cq4;END PROCESS;END;仿真结果:图12 平年(run=)时月系统仿真图图13 闰年(run=1)时月系统仿真图如图12、13所示月系统为12进制计数器,并且1、3、5、7、8、10、12月(大月)判断讯号为00,4、6、9平年(run=)2月的判断输出讯号为、11月(小月)判断讯号为01,平年(run=)2月的判断输出讯号为10,闰年(run=1)2月的判断输出讯号为11,与天模块的判断输入讯号相一致,符合设计要求,模块的设计正确。

4.1.5年模块年的高两位和低两位都为一百进制计数器,功能基本相近,不同的是低两位模块有闰月判断输出讯号,要传送给月份系统,计满四次就造成一个闰年输出讯号,因为平年数值是4的整倍数。源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY YEAR ISPORT(CLK:IN STD_LOGIC;Y1,Y2:OUT STD_LOGIC_VECTOR(3 DOWNTO );RUN,COUT:OUT STD_LOGIC);END YEAR;ARCHITECTURE ONE OF YEAR ISSIGNAL Q1,Q2,Q3:STD_LOGIC_VECTOR(3 DOWNTO );BEGINPROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THEN Q1<=Q1+1;IF Q1=9 THEN Q1<=(OTHERS=>'');Q2<=Q2+1;END IF;IF Q2=9 AND Q1=9 THENQ2<="0000";Q1<="0000";COUT<='1';ELSE COUT<='';END IF;END IF;END PROCESS;PROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THEN Q3<=Q3+1;IF Q3=3 THEN Q3<=(OTHERS=>'');RUN<='1';ELSE RUN <='';END IF;END IF;Y1<=Q1;Y2<=Q2;END PROCESS;END;仿真结果:图14 低两位年系统仿真图如图14所示,低两位年系统为100进制计数器当T2、T1表示的数为4的小数倍时,判断闰年输出讯号就为高阻值,与月系统的判断闰年输入讯号相一致。
符合设计的要求,设计正确。4.1.6校时系统如原理图的说明部分所述,校时系统进行工作模式的选择,输入端设有控制阻尼K1,K2。K1进行模式的选择,K2的系统就象手动时钟脉冲,进行调时增设。源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JIAODUI ISPORT(K1,K2 :IN STD_LOGIC;MI,FI,SI,TI,YI:IN STD_LOGIC;FO,SO,TL,YO,NO :OUT STD_LOGIC;L1,L2,L3,L4,L5 :OUT STD_LOGIC);END;ARCHITECTURE BEHAV OF JIAODUI ISSIGNAL A: STD_LOGIC_VECTOR (3 DOWNTO );BEGINPROCESS(K1,K2)BEGINIF K1'EVENT AND K1='1' THEN A<=A+1;IF A=5 THEN A<="0000"; END IF;END IF;CASE A ISWHEN "0000"=>FO<=MI;SO<=FI;TL<=SI;YO<=TI;NO<=YI;-- 模式正常及时 L1<='';L2<='';L3<='';L4<='';L5<='';WHEN "0001"=>FO<=K2;SO<='';TL<='';YO<='';NO<=''; --选通分模块,调分 L1<='1';L2<='';L3<='';L4<='';L5<='';WHEN "0010"=>FO<='';SO<=K2;TL<='';YO<='';NO<=''; --选通时模块,调时 L1<='';L2<='1';L3<='';L4<='';L5<='';WHEN "0011"=>FO<='';SO<='';TL<=K2;YO<='';NO<=''; -- 选通日系统,调日 L1<='';L2<='';L3<='1';L4<='';L5<='';WHEN "0100"=>FO<='';SO<='';TL<='';YO<=K2;NO<=''; -- 选通月系统,调月 L1<='';L2<='';L3<='';L4<='1';L5<='';WHEN "0101"=>FO<='';SO<='';TL<='';YO<='';NO<=K2; --选通年系统,调年 L1<='';L2<='';L3<='';L4<='';L5<='1';WHEN OTHERS=>NULL;END CASE;END PROCESS;END;仿真结果:图15 校时系统仿真图图16 校时系统仿真图如图15、16,按键K1,K2能够完成万年历工作模式的选择与调时校对的系统,满足功能的设计要求,设计正确。
4.1.7显示模式切换系统显示模式切换系统完成显示年月日和表明时分秒的相互转换,设置一个按键K3对其进行控制,通过取样按键的上升沿,对显示模式进行轮流切换。源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CONTROL ISPORT(SL,SH,FL,FH,HL,HH,DL,DH,ML,MH,YL,YH,Y1L,Y1H:IN STD_LOGIC_VECTOR(3 DOWNTO );K1:IN STD_LOGIC;led:OUT STD_LOGIC;Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8:OUT STD_LOGIC_VECTOR(3 DOWNTO ));END CONTROL;ARCHITECTURE ONE OF CONTROL ISSIGNAL W:STD_LOGIC_VECTOR(1 DOWNTO );BEGINPROCESS(K1)BEGINIF K1'EVENT AND K1='1' THEN W<=W+1;IF W=2 THEN W<="00";--二进制计数控制信号END IF;END IF;CASE W ISWHEN"00"=>Q8<=Y1H;Q7<=Y1L;Q6<=YH;Q5<=YL;Q4<=MH;Q3<=ML;Q2<=DH;Q1<=DL;led<='';--00时显示年月日,指示灯不亮WHEN"01"=>Q8<="0000";Q7<="0000";Q6<=HH;Q5<=HL;Q4<=FH;Q3<=FL;Q2<=SH;Q1<=SL;led<='1';--01时显示时分秒,指示灯亮 WHEN OTHERS=>NULL;END CASE;END PROCESS;END;仿真结果:如图16所示,当摇杆K1没有按下时Q1到Q6显示的是年月日部分,此时的指示灯LED为零(不亮),当按键K1按下一次,检测到一次上升沿,Q1到Q6显示的是时分秒部分,此时的指示灯LED为1(亮),当K1键随后按下时,上升沿一到,显示年月日,这样通过中控K1可以实现显示模式的转换。

设计合乎系统的要求,设计正确。图17 显示系统仿真图4.2顶层设计与仿真顶层设计采样原理图输入办法,用以下的各系统的VHDL源程序分别生成元器件,在此基础上用“导线”对元器件进行连接,搭建原理图,完成功能的上层设计,而不是利用部件例化程序去设计。对于较为复杂的功能而言,采用原理图输入的设计原理思路特别模糊,设计特别直观。顶层原理图的设计框架如图4所示,有年、月、日、时、分、秒计时系统,调时校对系统,显示模式切换系统,并且由以下讨论知万年历一共有六种工作模式。仿真结果:如图18所示,此时万年历工作于模式,属于正常的计时状态,当行情计满时向低位进1,通过键K3,可以对显示模式进行转换,从表明时分秒转换到表明年月日,正确的实现了功能的计时系统。图18 万年历仿真图图19 万年历仿真图图20 万年历仿真图如图19、20所示,通过按键K1可以进行工作模式的选择,按键K2进行差值的校对设定,按键K3进行显示模式的转换,与设计的要求相符合。综上所述,整个功能设计正确,万年历能够正确的实现系统。4.3下载验证4.3.1电路结构选择流程、原理图仿真正确后,下一步通过把上层原理图输入的设计流程下载到试验箱中的实际芯片中,完成算法电路的设计构建并验证其系统。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-119425-2.html
一周不重样
烊烊小王子
吃南方公司的食品的人都知道南方食品包装的很好