




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 Hefei University在系統編程課程設計課題名稱4位十進制頻率計的設計姓 名 鐘文俊學 號1105012012院 系電子信息與電氣工程系專 業電子信息工程指導教師黃慧 2013年 12月28日4位十進制頻率計的設計一 、設計目的 1、學習掌握頻率計的設計方法。2、掌握動態掃描輸出電路的實現方法。3、學習較復雜的數字系統設計方法。二、設計的主要內容和要求 4位十進制頻率計外部接口設計,頂層文件設計,包含4個模塊,Tctl,Reg16,scan_led和一個x4cnt10(4個十進制計數器)。三、整體設計方案1、設計方案根據頻率計的定義和頻率測量的基本原理:頻率計即是指單位時間1秒內輸
2、入脈沖個數并顯示出來的電路。因為要顯示被測信號的,只要限制計數器的計數過程為一秒則計數器的結果即為被測信號的頻率。頻率值為:Fx=N,N為一秒內計數器所計脈沖個數。因為是4位十進制頻率計計數器是模為9999的十進制加法計數器,可以由4個模為10的十進制計數器級聯而成,所以可以顯示的頻率范圍是1-9999HZ。因此,頻率計的功能分割成四個模塊:計數器,測頻控制信號發生器和輸出鎖存器,。各個模塊均用VHDL語言描述 。待測信號的轉速必須有一個脈寬為1秒的輸入信號脈沖計數允許的信號;1秒計數結束后,計數值鎖入鎖存器的鎖存信號,并有為下一測頻計數周期作準備的計數器清零信號。這三個信號可以由一
3、個測頻控制信號發生器產生。當系統正常工作時,標準信號提供頻率為1 Hz的輸入信號,經過測頻控制信號發生器進行信號變換,產生計數信號,將被測信號當做脈沖信號送入計數器模塊,計數模塊對輸入的脈沖個數進行計數數結束后,將計數結果送入鎖存器中,保證系統可以穩定顯示數據,計數結果能夠顯示在七段數碼顯示管上。根據系統設計要求,要實現一個4位十進制數字頻率計,則要設計測頻控制信號發生器模塊tct1、四位十進制加法計數器模塊x4cnt10、reg16鎖存器模塊, 七段譯碼顯示模塊scan_led其原理框圖如下圖所示。測 頻控制信號發生器鎖存器 七 段譯碼顯示器計數器 圖3.1 主控制流程圖2、四位十進制頻率計
4、頂層文件原理圖如下: 圖3.2 頂層文件生成4位十進制頻率計外部接口圖3、本設計中重要端口說明:Clk_1hz: 給Tctl模塊提供1hz的頻率輸入。Fin;被測頻率輸入。 scan_led:給scan_led模塊提供掃描輸入頻率輸入。bt1.0:片選信號輸出。Sg6.0:譯碼信號輸出。Cout:進位輸出四、各個模塊的設計說明及設計步驟1、頂層文件原理圖設計: 圖 4.1 頂層文件原理圖2、x4Cnt10 模塊說明x4Cnt10為含異步清零和同步時鐘使能的十進制計數器,采用級聯的方法進行計數,計數范圍與所用x4cnt10級聯個數有關,本次設計采用的是4個cnt10的級聯,所有測頻范圍是0999
5、9hz。仿真時序圖如下: 圖 4.2 x4Cnt10仿真波形圖3、 Tctl 模塊說明根據頻率的定義和測量的基本原理,測定信號的頻率必須有一個脈寬為1秒的對輸入信號脈沖計數允許的信號;1秒計數結束后,計數值鎖入鎖存器信號和為下一測頻計數周期做準備的計數器清零信號。這三個信號可以由一個測頻控制信號發生器Tctl產生,其設計要求是Tctl的計數使能信號en能產生一個一秒脈寬的周期信號,并且對頻率計的每一計數器cnt10的en使能進行同步控制,當en高定平時,允許繼續:低電平時停止計數,并保持其所計數的脈沖數,在停止計數期間,首先需要一個鎖存信號load的上升沿將計數器前一秒鐘的計數值鎖存進各鎖存器
6、reg16中,并由外部的譯碼器譯出并顯示計數值,鎖存信號之后,必須有一個清零信號rst對計數器進行清零,為下一秒的計數操作做準備。控制模塊Tctl時序仿真: 圖4.3 頻率計測頻控制器Tctl側可控時序圖圖中clk的頻率為1hz,en的高電平程序時間為1秒,此時計數器開始工作,當en低電平時停止計數,并將計數值經過load鎖存的reg16中最后通過scan_led譯碼器顯示輸入,en的計時長度為一秒,即en的周期為2秒,計數器在en高電平計數完成即en從高電平跳躍到低電平時將計數結果鎖存在reg16中,rst在滿足clk和en均為低電平的時候對已鎖存入鎖存器的計數信號進行清零工作,為下一個計數
7、周期作準備。4、鎖存器reg16模塊的說明設置鎖存器的目的是使顯示的數據穩定,不會由于周期性的清零信號而不斷閃爍,每次顯示數據位上一計數周期鎖存的計數值。 Reg16鎖存器時序仿真圖: 圖4.4 reg16鎖存器仿真波形圖5、scan_led 模塊說明動態顯示是把所有的led管的輸入信號連在一起,每次向LED寫數據時,通過片選信號選通其中一個Led管并把數據寫入,因此每一個時刻只有一個Led是亮的。為了能夠程序看到led上面的顯示內容,必須對led管進行掃描,即一次循環點亮各個led管,利用人眼的視覺暫留,加上發光器件的余暉效益,在一定的掃描頻率下,人眼就會看到多個led管一起點亮。掃描的大小
8、必須合適才能達到很好的效果。如果掃描頻率太低,就會產生閃爍;而掃描頻率太高會造成Led的頻率開啟和關斷,增加led的功耗。通常掃描頻率選擇50Hz比較合適。本次設計為4為led動態掃描輸出,clkwie掃描時鐘,考慮到cnt8的分頻作用,此時設計采用的頻率為200hz:sg6.0為當前正在顯示的led地址的已譯碼數據;bt1.0為輸出的片選信號,決定某led在某時某刻顯示數據:din15.0為4為一組的bcd碼,共4位供顯示輸出的數據輸入,scan_led的內部以下三個進程:計數模塊掃描時鐘發生器,多路選通器模塊和譯碼模塊。led動態掃描輸出scan_led時序仿真圖; 圖4.5 動態掃描仿真
9、波形圖Clk_1hz輸入周期為1hz;Fin為測量頻率,頻率范圍是100-9999hz,此次波形仿真設計時間為1khz;Clk為掃描時鐘,周期為200hz;Sg為輸出led七段顯示譯碼結果,bt為輸出片選信號,由波形仿真圖可以看出片選0(00)時led顯示為0,片選1(01)時led顯示為0,片選2(10)時led顯示為0,片選3(11)時led顯示為1;即此時頻率計計數頻率為1000hz,與實際輸入頻率相同。Clk_1hz的1hz輸入頻率通過DE2內部clock_50的50M晶振分頻來實現。輸入頻率信號和掃描頻率也由50M晶振分頻得到,又由于仿真設計中采用的是一個led現實動態數據,所以下載
10、到DE2板上是還要進行動態顯示電路的設計。6、分頻器:(可以通過改變不同的cout值來進行不同的分頻)分頻器時序仿真圖:圖4.6 分頻仿真波形圖7、動態顯示時序仿真圖 圖4.7 動態顯示仿真波形8、調用各子模塊編譯仿真,時序仿真圖如下 圖4.8 調用各子模塊時序仿真圖9、編譯仿真完成后,定義管腳,如下圖所示: 圖4.9 引腳定義10、定義完引腳后,開始下載設計文件,在試驗箱進行硬件測試并完善設計。11、預測結果:試驗箱選擇模式6,1HZ測頻控制信號由clock0輸入控制,待測信號由clock5輸入,可選擇相應的頻率值,在數碼管顯示器上顯示相應的頻率值。五、總結通過這次的eda設計使我更加的了解
11、了vhdl語言的應用,由于書上設計的是由數碼管進行動態顯示,但是這種情況下不利于讀取數據,所以我們后來設計成由四個七段數碼管靜態輸出結果的方式,但書上沒有源程序可以參考,所以只能通過自己在網上查找資料并嘗試,在這其過程中出現了很多錯誤,我們一步步更改,要求我們修改編寫程序時要細心,謹防出現細小的錯誤。尤其是實用語句的時候要考慮全面,不能前面寫過忘記結尾,例如在使用if語句時要注意end if的個數與前相對應,不能少也不能多。在設計時還要考慮到設計引腳是否能夠在試驗箱上找到。最后在老師的指導下我們總算是順利地完成了這次的課程設計。參考文獻1 潘松,黃繼業.EDA技術實用教程(第二版).科學出版社
12、,1998。2 宋萬杰,羅豐,吳順軍.CPLD技術及其應用.西安:西安電子科技大學出版社,1999。3 徐志軍 王金明.EDA技術與PLD設計.人民郵電出版社。4 康華光.電子技術基礎(數字部分).高等教育出版社。5百度文科4位十進制頻率計設計。附錄:四位十進制頻率計頂層文件源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dc isport(fin,clk_1hz:in std_logic;ledout:out std_logic_vector(27 downto 0);
13、end dc;architecture one of dc iscomponent Tct1 -Tct1元件聲明 port( clk: in std_logic; en,rst,load :out std_logic);end component;component x4cnt10 -x4cnt10元件聲明port(clk,rst,en: in std_logic; q0,q1,q2,q3 :out std_logic_vector(3 downto 0); cout:out std_logic);end component;component reg16 -reg16元件聲明 port(lo
14、ad: in std_logic; di : in std_logic_vector(15 downto 0); dout : out std_logic_vector(15 downto 0) );end component;component scan_led -scan_led元件聲明port(din: in std_logic_vector(15 downto 0); sg :out std_logic_vector(6 downto 0); bt: out std_logic_vector(1 downto 0);end component;signal x,z,f:std_logi
15、c;signal h:std_logic_vector(3 downto 0);signal g0,g1,g2,g3:std_logic_vector(3 downto 0);signal h0,h1,h2,h3:std_logic_vector(3 downto 0);signal leds:std_logic_vector(27 downto 0);begin -元件例化產生電路,完成設計u1: Tct1 port map(clk=>clk_1hz, en=>x,rst=>z,load=>f);u2: x4cnt10 port map(clk=>fin,rst
16、=>z,en=>x,q0=>g0,q1=>g1,q2=>g2,q3=>g3);u3:reg16 port map(load=>f,di(3 downto 0)=>g0,di(7 downto 4)=>g1,di(11 downto 8)=>g2,di(15 downto 12)=>g3,dout(3 downto 0)=>h0,dout(7 downto 4)=>h1,dout(11 downto 8)=>h2,dout(15 downto 12)=>h3);u4: scan_led port map(d
17、in(3 downto 0)=>h0(3 downto 0),sg(6 downto 0)=>leds(6 downto 0);u5: scan_led port map(din(7 downto 4)=>h1(3 downto 0),sg(6 downto 0)=>leds(13 downto 7);u6: scan_led port map(din(11 downto 8)=>h2(3 downto 0),sg(6 downto 0)=>leds(20 downto 14);u7: scan_led port map(din(15 downto 12)=
18、>h3(3 downto 0),sg(6 downto 0)=>leds(27 downto 21);ledout<=leds; end;計數模塊x4cnt10的源代碼程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity x4cnt10 isport(clk,rst,ena: in std_logic; -端口定義 q0,q1,q2,q3 : buffer std_logic_vector(3 downto 0); -分別定義四個計 cout:out std_log
19、ic); 數端口,用于4 end x4cnt10; 個cnt10的設計 architecture three of x4cnt10 issignal en1,en2,en3 : std_logic; -使能信號聲明beginprocess(clk,rst,ena,q0) -控制q0端的十進制計數beginif rst='1' then q0 <= "0000" elsif clk'event and clk='1' then if ena='1' then if q0="1001" then
20、q0<="0000"else q0<=q0+1;end if; end if; end if; if q0="1001" then en1 <='1' else en1 <='0'end if; end process;process(clk,rst,en1,q1) -控制q1端的十進制計數 begin if rst='1' then q1 <= "0000" elsif clk'event and clk='1' then if e
21、n1='1' then if q1="1001" then q1<="0000"else q1<=q1+1;end if; end if; end if; if q1="1001" then en2 <='1' else en2 <='0'end if; end process;process(clk,rst,en2,q2) -控制q2端的十進制計數 begin if rst='1' then q2 <= "0000" e
22、lsif clk'event and clk='1' then if en2='1' and en1='1'then if q2="1001" then q2<="0000"else q2<=q2+1;end if; end if; end if; if q2="1001" then en3 <='1' else en3 <='0'end if; end process;process(clk,rst,en3,q3) -控制
23、q3端的十進制計數 begin if rst='1' then q3 <= "0000" elsif clk'event and clk='1' then if en3='1' and en2='1' and en1='1'then if q3="1001" then q3<="0000"else q3<=q3+1;end if; end if; end if; if q3="1001" then cout&l
24、t;='1' else cout<='0'end if; end process;end three;library ieee; -將設計元x4cnt10的聲明裝入my_pkg程序包中use ieee.std_logic_1164.all;package my_pkg1 iscomponent x4cnt10port(clk,rst,ena: in std_logic; q0,q1,q2,q3 : buffer std_logic_vector(3 downto 0); cout:out std_logic); end component; end;控制模
25、塊Tctl源代碼程序;Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity Tct1 is Port(clk:in std_logic; -端口定義 ena,rst,load:out std_logic); End Tct1;Architecture one of Tct1 is Signal divclk :std_logic; -divclk信號聲明BeginProcess(clk)Beginif clk'event and clk='1' then divcl
26、k<=not divclk; -clk上升沿時,divclk取反end if ;End process;Process(clk,divclk)BeginIf clk='0' and divclk='0' then -clk和divclk同時為0時,rst置1,否則rst清0rst<='1'Else rst<='0'End if;End process;Load<=not divclk; -將divclk取反賦值到load端,將divclk的值賦給enaena<=divclk;end one;Reg16
27、鎖存器源代碼程序:Library ieee;Use ieee.std_logic_1164.all;Entity reg16 is Port(load:in std_logic; -端口定義 din:in std_logic_vector(15 downto 0); dout:out std_logic_vector(15 downto 0);End reg16;Architecture one of reg16 is BeginProcess(load,din)Beginif(load'event and load='1') then -load為上升沿時,把din值
28、鎖存到dout中dout<=din;end if;end process;End one; led動態掃描輸出scan_led源代碼程序;Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity scan_led is Port(clk:in std_logic; -端口定義 din:in std_logic_vector(15 downto 0); -16位的輸入端口 sg:out std_logic_vector(6 downto 0 ); -7位的輸出端口(譯碼地址) bt:out
29、 std_logic_vector(1 downto 0); - 2位的輸出端口(片選信號) end;Architecture one of scan_led is Signal cnt8 :std_logic_vector(1 downto 0); -信號聲明Signal q:std_logic_vector(3 downto 0);Beginp1: Process(cnt8) -多路選通模塊 begin case cnt8 is -通過cnt8的值來選擇片選信號bt when "00" =>bt<="00"q<=din(3 down
30、to 0); 決定某led在某時某刻的when "01" =>bt<="01"q<=din(7 downto 4); 顯示數據when "10" =>bt<="10"q<=din(11 downto 8);when "11" =>bt<="11"q<=din(15 downto 12);when others =>null;end case;end process p1;p2: process(clk) -計數模塊掃
31、描時鐘發生器begin -時鐘信號clk有效上升沿時,cnt8開始計數if clk'event and clk='1' then cnt8<=cnt8+1;end if;end process p2;p3: process(q) -譯碼模塊begincase q(3 downto 0) is -通過q的值來選擇sg的 led地址的已譯碼數據when "0000" =>sg<="0111111"when "0001" =>sg<="0000110"when &qu
32、ot;0010" =>sg<="1011011"when "0011" =>sg<="1001111"when "0100" =>sg<="1100110"when "0101" =>sg<="1101101"when "0110" =>sg<="1111101"when "0111" =>sg<="0000111"when "1000" =>sg<="1111111"when "1001" =>sg<="1101111"when others =>null;end case;end process p3;end one; 分頻的主要源程序:Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity count is Port(clk50:in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年福建省事業單位招聘考試綜合類專業能力測試試卷(建筑類)試題
- 2025年電子商務師(中級)電子商務法律法規與政策案例分析試卷
- 2025年統計學專業期末考試:抽樣調查方法與統計推斷綜合案例分析試題
- 2025年鋼筋工(高級)考試試卷:鋼筋工程施工質量事故分析及預防
- 2025年南京市事業單位招聘考試教師招聘化學學科專業知識試題(初中)
- 2025年非心源性胸痛診療試題
- 2025年建筑行業農民工權益保障與用工模式變革下的行業風險管理與創新實踐案例報告
- 2025年國際化教育中跨文化交流能力培養的師資培訓策略報告
- 化工工藝安全操作與管理要點測試題
- 綠色建筑材料市場推廣政策與綠色建筑市場需求匹配度分析報告
- 【高考模擬】山東省春季高考研究聯合體2024-2025學年高三上學期第一次聯合考試數學試題(含解析)
- 2024年河北唐山國控港口管理有限公司招聘筆試真題
- 2025新七年級語文下冊期末字音字形專題復習課件
- 妊娠合并貧血護理課件
- 左美馬嗪行業深度研究分析報告(2024-2030版)
- 荊州中學2024-2025學年高二下學期6月月考語文試題(定)
- 腦機接口硬件優化-洞察及研究
- 預算與績效管理制度
- 理論聯系實際談一談如何傳承發展中華優-秀傳統文化?參考答案
- T/SFABA 2-2016食品安全團體標準食品配料焙烤食品預拌粉
- T/CI 307-2024用于疾病治療的間充質干細胞質量要求
評論
0/150
提交評論