【正文】
r 10 ps。END。閘門選擇器: 在這個(gè)模塊中我們有四個(gè)輸出端和六個(gè)輸入端,其中四個(gè)輸出端中有一個(gè)是頻率輸出端,是通過三個(gè)閘門選擇開關(guān)輸入和三個(gè)輸入頻率決定的,另外三個(gè)輸出端則是用來后面的小數(shù)點(diǎn)控制的,而六個(gè)輸入端中的三個(gè)是上面分頻器的三個(gè)輸出1HZ,10HZ和100HZ,另外三個(gè)是電路板上的撥動(dòng)開關(guān),用來選擇閘門,控制輸出。use 。use 。 SE10 : in STD_LOGIC。 F1HZ : IN STD_LOGIC。 F100HZ :IN STD_LOGIC。 DP1 : out STD_LOGIC。 DP3 : out STD_LOGIC)。architecture Behavioral of SELE isbeginPROCESS(SE1,SE10,SE100) IS BEGIN IF SE1=39。 AND SE10=39。 AND SE100=39。 THEN FREF=F1HZ。039。139。139。 IF SE1=39。 AND SE10=39。 AND SE100=39。 THEN FREF=F10HZ。139。039。139。 IF SE1=39。 AND SE10=39。 AND SE100=39。 THEN FREF=F100HZ。139。139。039。 END PROCESS。源代碼編寫完成后保存并生成圖形文件符號(hào)如圖:仿真文件編寫如下:LIBRARY ieee。USE 。ENTITY TTB_vhd ISEND TTB_vhd。 SE10 : IN std_logic。 F1HZ : IN std_logic。 F100HZ : IN std_logic。 DP1 : OUT std_logic。 DP3 : OUT std_logic)。 SIGNAL SE1 : std_logic := 39。 SIGNAL SE10 : std_logic := 39。 SIGNAL SE100 : std_logic := 39。 SIGNAL F1HZ : std_logic := 39。 SIGNAL F10HZ : std_logic := 39。 SIGNAL F100HZ : std_logic := 39。 SIGNAL FREF : std_logic。 SIGNAL DP2 : std_logic。BEGIN uut: SELE PORT MAP( SE1 = SE1, SE10 = SE10, SE100 = SE100, F1HZ = F1HZ, F10HZ = F10HZ, F100HZ = F100HZ, FREF = FREF, DP1 = DP1, DP2 = DP2, DP3 = DP3)。039。039。 F1HZ=39。FREF=39。 WAIT FOR 100 NS。END。 門控信號(hào):在此模塊中有一個(gè)輸入端和兩個(gè)輸出端,輸入端為上面的閘門選擇器輸出的頻率,兩個(gè)輸出端分別為計(jì)數(shù)器是能控制信號(hào)(鎖存器控制信號(hào)),和計(jì)數(shù)器清零信號(hào)。use 。use 。 GAT : out STD_LOGIC。end CONTROLS。039。EVENT AND FREF=39。 THEN G1=NOT G1。 END PROCESS。039。039。139。039。 END PROCESS。 將G1賦給gat輸出端,它是計(jì)數(shù)器的使能信號(hào)同時(shí)也是鎖存器的鎖存信號(hào)end Behavioral。USE 。USE 。ARCHITECTURE behavior OF TBCON_vhd IS COMPONENT CONTROLS PORT(FREF : IN std_logic。 CLR : OUT std_logic)。 SIGNAL FREF : std_logic := 39。 SIGNAL GAT : std_logic。BEGIN uut: CONTROLS PORT MAP( FREF = FREF, GAT = GAT, CLR = CLR)。039。 FREF=39。 WAIT FOR 100 NS。END。同時(shí)我們也可以看出來該模塊對(duì)分頻器的時(shí)鐘輸出的穩(wěn)定性依賴十分嚴(yán)重,一旦分頻器輸出時(shí)鐘有毛刺,該控制信號(hào)將會(huì)完全的無效,這也是為什么我知道上面的分頻器設(shè)計(jì)不是最優(yōu)的方案,卻還是采用了上述方法的原因。使用上面的門控信號(hào)產(chǎn)生的gat信號(hào)控制計(jì)數(shù)器的使能端,以實(shí)現(xiàn)計(jì)數(shù)器的定時(shí)計(jì)數(shù)。use 。use 。 CLR : in STD_LOGIC。 CQ : out STD_LOGIC_VECTOR (3 downto 0)。end CNT10。 定義中間信號(hào)CQI,用于數(shù)據(jù)輸出的循環(huán)計(jì)數(shù)beginPROCESS(CLK,CLR) IS BEGIN IF CLR=39。 THEN CQI=0000。EVENT AND CLK=39。 THEN 對(duì)時(shí)鐘進(jìn)行計(jì)數(shù) IF ENA=39。 THEN 判斷使能信號(hào),有效則進(jìn)行計(jì)數(shù),否則不作處理 IF CQI=1001 THEN CQI=0000。139。 END IF。 END PROCESS。139。139。039。 當(dāng)且僅當(dāng)使能有效且計(jì)數(shù)為9時(shí)產(chǎn)生進(jìn)位信號(hào),進(jìn)位信號(hào)1有效,同步并聯(lián)時(shí)連高位的使能端end Behavioral。USE 。USE 。ARCHITECTURE behavior OF TBCNT10_vhd IS COMPONENT CNT10 PORT(CLK : IN std_logic。 ENA : IN std_logic。 CO : OUT std_logic)。 SIGNAL CLK : std_logic := 39。 SIGNAL CLR : std_logic := 39。 SIGNAL ENA : std_logic := 39。 SIGNAL CQ : std_logic_vector(3 downto 0)。BEGIN uut: CNT10 PORT MAP( CLK = CLK, CLR = CLR, ENA = ENA, CQ = CQ, CO = CO)。039。 CLK=39。 WAIT FOR 100 NS。END。鎖存器: 由于前面的計(jì)數(shù)器的輸出為六組四位二進(jìn)制數(shù)和一個(gè)溢出信號(hào),所以我們使用的鎖存器也使用六個(gè)四位鎖存器和一個(gè)一位鎖存器。四位鎖存器的原代碼如下:library IEEE。use 。entity LATCH4 is Port ( CLK : in STD_LOGIC。 QOU : out STD_LOGIC_VECTOR (3 downto 0))。architecture Behavioral of LATCH4 isbegin PROCESS(CLK,DIN) IS BEGIN IF CLK39。039。 END IF。end Behavioral。use 。use 。 DIN : in STD_LOGIC_VECTOR。end LATCH1。EVENT AND CLK=39。 THEN 當(dāng)時(shí)鐘信號(hào)下降沿時(shí),實(shí)現(xiàn)鎖存 QOU=DIN。 END PROCESS。文件編寫完成后保存編譯生成圖形文件符號(hào),如圖:鎖存完成后有六組四位二進(jìn)制數(shù)和一個(gè)一位二進(jìn)制數(shù),所以我們隊(duì)總線進(jìn)行了合并,即將六組四位數(shù)合并成一個(gè)二十四位數(shù),合并程序如下:library IEEE。use 。 entity ADVOCATES is Port ( S0 : in