【正文】
1 數(shù)字系統(tǒng)設(shè)計與硬件描述語言 期末考試 作業(yè) 題目: 多功能電子秒表設(shè)計 學院: 電子信息工程學院 專業(yè): 電子信息工程 學號: 3009204308 姓名: 張嘉男 20210531 2 一、 選題 設(shè)計描述 1. 功能介紹 本系統(tǒng)能夠精確計時,具有復(fù)位、計時功能,可顯示計時時間的分、秒和 秒等度量,最長計時為 10分鐘。 2. 算法簡介 本系統(tǒng)以 50Mhz時鐘信號, rst 復(fù)位信號 , startstop 開始 /暫停信號為輸入,以四位 7段數(shù)碼管顯示為輸出,實現(xiàn)了上述功能,系統(tǒng)原理圖符號如下所示: 系統(tǒng) RTL 級框圖如下所示: 3 本系統(tǒng)的實現(xiàn)共分為以下幾個模塊: 模塊一、分頻器 該模塊又分為 1/5000 分頻器 divf1, 1/1000 分頻器 divf2 兩部分,實現(xiàn)對 50MHz系統(tǒng)時鐘的兩次分頻,最終將系統(tǒng)時鐘分頻到 10Hz,作為最低位( 秒位)的輸入時鐘。 divf1 模塊輸入信號為 50MHz時鐘信號,復(fù)位信號,輸出信號為 10kHz 時鐘 信號; divf2 模塊輸入信號為 10KHz時鐘(實現(xiàn) 上不嚴格是,見后面 T 觸發(fā)器模塊解釋)信號,輸出 ,復(fù)位信號,輸出信號為 10Hz時鐘信號。 模塊二、計數(shù)器 該模塊 又分為十進制計數(shù)器 counter10,和六進制計數(shù)器 counter6,分別 實現(xiàn)對 輸入時鐘信號的十進制、六進制計數(shù),十進制計數(shù)器在系統(tǒng)中用于對 秒位,秒個位,分位的輸入時鐘計數(shù) (1s=10*),六進制計數(shù)器在系統(tǒng)中用于對秒十位的輸入時鐘計數(shù)( 1min=60s)。 模塊三、 T 觸發(fā)器 Ttrigger 該模塊 實現(xiàn)系統(tǒng)復(fù)位,開始 /暫停功能,以 startstop 信號作為觸發(fā)器的時鐘輸入,復(fù)位信號作為 T 信號,觸發(fā)器輸出與分位進位信號和復(fù)位信號相與,其輸出在作為 10Hz時鐘信號輸入給 位十進制計數(shù)器。 模塊四、 47 譯碼器 bcdsev 該模塊實現(xiàn)將各計數(shù)器的計數(shù)輸出顯示到數(shù)碼管上,輸入信號為計數(shù)器 4 位計數(shù)輸出,輸出信號為相應(yīng)數(shù)碼管 7 段,當相應(yīng)段為低電平( ’0’)時亮起。 系統(tǒng)整體運行流程為: 50MHz時鐘信號輸入到 1/5000 分頻器中, 分為 10kHz的時鐘,再經(jīng)過一個用來控制系統(tǒng)復(fù)位、啟停的與門電路后,輸入到 1/1000 的分頻器中,分為 10Hz 的時鐘,此時鐘信號輸入到一個十進制計數(shù)器內(nèi),十進制計數(shù) 器輸出 4 位計數(shù)信號給 47 譯碼器,同時輸出 1 位進位信號給另一個十進制計數(shù)器內(nèi), 47 譯碼器輸出 7 位段選信號給 顯示位數(shù)碼管,顯示此時 位數(shù)值,而另三個計數(shù)器與此計數(shù)器進行相同的工作,唯一不同的是用于 10s 位計時的計數(shù)器用的是六進制計數(shù)器。 與此同時,當復(fù)位信號被觸發(fā)(置低)時,第二個分頻器 divf2 輸入時鐘為零(與門控制),同時 4 位數(shù)碼管輸出為 0 00 0,實現(xiàn)系統(tǒng)復(fù)位,當復(fù)位信號取消(置高), startstop信號每觸發(fā)一個上升沿,秒表開始 /暫停一次。 當秒表運行到 10 分鐘后,進位信號使數(shù)碼管 輸出歸零,系統(tǒng)實現(xiàn)復(fù)位。 二、 程序源代碼及說明 模塊名稱: 模塊功能:實現(xiàn)對 50MHz時鐘信號的第一次分頻 端口 信號說明: clk1: 待分頻時鐘信號 rst1: 分頻器復(fù)位信號 q1:分頻后的輸出信號 LIBRARY IEEE。 USE 。 USE 。 ENTITY divf1 IS 4 PORT(clk1: IN STD_LOGIC。 rst1: in std_logic。 q1 : OUT STD_LOGIC)。 END divf1。 ARCHITECTURE behav OF divf1 IS signal qn1:std_logic_vector(13 downto 0)。 BEGIN PROCESS (clk1,rst1) BEGIN if rst1=39。039。 then qn1= 00000000000000。 elsif clk139。event and clk1=39。139。 then if qn110000 then qn1=qn1+1。 else qn1= (OTHERS =39。039。)。 end if。 end if。 END PROCESS。 q1=qn1(13)。 分頻輸出 END behav。 模塊名稱: 模塊功能:實現(xiàn)對 50MHz時鐘信號的第二次分頻 端口 信號說明: clk2: 待分頻時鐘信號 rst2: 分頻器復(fù)位信號 q2:分頻后的輸出信號 LIBRARY IEEE。 USE 。 USE 。 ENTITY divf2 IS PORT(clk2: IN STD_LOGIC。 rst2: in std_logic。 q2 : OUT STD_LOGIC)。 END divf2。 ARCHITECTURE behav OF divf2 IS signal qn2:std_logic_vector(9 downto 0)。 BEGIN PROCESS (clk2,rst2) BEGIN if rst2=39。039。 then qn2= 0000000000。 elsif clk239。event and clk2=39。139。 then if qn21000 then qn2=qn2+1。 5 else qn2= (OTHERS =39。039。)。 end if。 end if。 END PROCESS。 q2=qn2(9)。 分頻輸出 END behav。 模塊名稱: 模塊功能:十進制計數(shù)器 端口 信號說明: CLK10:計數(shù)器時鐘信號 RST10:計數(shù)器復(fù)位信號 CQ10 : 計數(shù)器 4 位計數(shù)輸出 COUT10 :計數(shù)器進位輸出 LIBRARY IEEE。 USE 。 USE 。 ENTITY counter10 IS PORT (CLK10,RST10: IN STD_LOGIC。 CQ10 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 COUT10 : OUT STD_LOGIC )。 END counter10。 ARCHITECTURE behav OF counter10 IS BEGIN PROCESS(CLK10, RST10) VARIABLE CQI10 : STD_LOGIC_VECTOR(3 DOWNTO 0)。 BEGIN IF RST10 = 39。039。 THEN CQI10 := (OTHERS =39。039。) 。 計數(shù)器復(fù)位 ELSIF CLK1039。EVENT AND CLK10=39。139。 THEN 檢測時鐘上升沿 IF CQI10 1001 THEN CQI10 := CQI10 + 1。 COUT10 = 39。039。允許計數(shù) ELSE CQI10 :=0000。 COUT10 = 39。139。 大于 9,計數(shù)值清零 END IF。 END IF。 IF CQI10=1001 THEN COUT10 = 39。139。 計數(shù)大于 9,輸出進位信號 ELSE COUT10 = 39。039。 END IF。 CQ10 = CQI10。 將計數(shù)值向端口輸出 END PROCESS。 END behav。 6 模塊名稱: 模塊功能:十進制計數(shù)器 端口 信號說明: CLK6:計數(shù)器時鐘信號 RST6:計數(shù)器復(fù)位信號 CQ6 : 計數(shù)器 4 位計數(shù)輸出 COUT6 :計數(shù)器進位輸出 LIBRARY IEEE。 USE 。 USE 。 ENTITY counter6 IS PORT (CLK6,RST6: IN STD_LOGIC。 CQ6 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 COUT6 : OUT STD_LOGIC )。 END counter6。 ARCHITECTURE behav OF counter6 IS BEGIN PROCESS(CLK6, RST6) VARIABLE CQI6 : STD_LOGIC_VECTOR(3 DOWNTO 0)。 BEGIN IF RST6 = 39。039。 THEN CQI6 := (OTHERS =39。039。) 。 計數(shù)器復(fù)位 ELSIF CLK639。EVENT AND CLK6=39。139。 THEN 檢測時鐘上升沿 IF CQI6 0101 THEN CQI6 := CQI6 + 1。 COUT6=39。039。允許計數(shù) ELSE CQI6 := 0000。 COUT6 = 39。139。 clear when it39。s bigger than 5 END IF。 END IF。 IF CQI6=0101 THEN COUT6 = 39。139。 ELSE COUT6 = 39。039。 END IF。 CQ6 = CQI6。 將計數(shù)值向端口輸出 END PROCESS。 END behav。 模塊名稱: 模塊功能 : 47 譯碼器 端口 信號說明: a: 4 位輸入 rstsev:復(fù)位信號 q: 7 段輸出 LIBRARY IEEE。 USE 。 7 ENTITY bcdsev IS PORT(a: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 rstsev:in std_logic。 q: OUT STD_LOGIC_VECTOR(0 TO 6) )。 7 段輸出 END bcdsev。 ARCHITECTURE behav OF bcdsev IS BEGIN PROCESS (a) BEGIN if rstsev = 39。039。 then q=0000001。 else case a(3 downto 0) is BCD 7 段譯碼表 when 0000 = q=0000001。 when 0001 = q=1001111。 when 0010 = q=0010010。 when 0011 = q=0000110。 when 0100 = q=1001100。 when 0101 = q=0100100。 when 0110 = q=0100000。 when 0111 = q=0001111。 when 1000 = q=0000000。 when 1001 = q=0000100。 when others = q=1111111。 END case。 end if。 END PROCESS。 END behav。 模塊名稱: 模塊功能: T 觸發(fā)器 端口 信號說明: t: t 信號 clk:時鐘信號 q: 輸出信號 LIBRARY IEEE。 USE 。 EN