




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2FPGA與CPLD實(shí)驗(yàn)報(bào)告159030004 楊文忠實(shí)驗(yàn)一、正弦波的產(chǎn)生一、實(shí)驗(yàn)?zāi)康模? 學(xué)習(xí)Quartus II的使用;2 掌握宏單元模塊定制ROM;3 掌握VHDL語言中的元件例化;4 掌握VHDL語言中的計(jì)數(shù)器的設(shè)計(jì);5. 掌握SignalTap II的使用。二、實(shí)驗(yàn)條件:1. 裝有Quartus II 13.0的電腦一臺(tái);2. EP4CE15F17C8實(shí)驗(yàn)開發(fā)板一套。三、實(shí)驗(yàn)原理:1.使用查表的方式計(jì)算正弦值,使用MATLAB產(chǎn)生ROM所需的正弦波mif文件;2.程序中根據(jù)計(jì)數(shù)器的值進(jìn)行查表輸出,并用modelsim和SignalTap II觀察輸出的結(jié)果。3.使用MATLAB產(chǎn)生m
2、if文件的程序如下:WIDTH=8;DEPTH=1024;ADDRESS_RADIX=DEC;DATA_RADIX=DEC;CONTENT BEGIN0:128;1:129;2:130;(數(shù)據(jù)略去)1021:126;1022:126;1023:127;End;保存為mif格式文件,或者直接使用Mif_Maker2010產(chǎn)生mif文件。四、實(shí)驗(yàn)內(nèi)容:1. 使用宏單元模塊定制ROM,操作步驟如下:Tools - MegaWizars Plug-In Managerpage 1 - Create a new custom megafunction variation - Next - MegaWiz
3、ars Plug-In Managerpage 2a - Installed Plug-In - I/O - Memory Complier - ROM:1-PORT 設(shè)置好參數(shù)后,將定制的Files添加到工程中,調(diào)用Modelsim觀察正選波形,觀察之前需設(shè)計(jì)相應(yīng)參數(shù),時(shí)鐘設(shè)置為100ns。2.使用SignalTap II邏輯分析儀分析FPGA產(chǎn)生的正弦波信號(hào), SignalTap II的使用步驟如下:Tools - SignalTap II Logic Analyzer - 設(shè)置好之后,直接點(diǎn)擊運(yùn)行即可。五、實(shí)驗(yàn)總結(jié):通過本次實(shí)驗(yàn)學(xué)會(huì)了怎么使用使用宏單元模塊定制ROM,并學(xué)會(huì)了如何使Sig
4、nalTap II。8六、實(shí)驗(yàn)代碼:library ieee; -正弦信號(hào)發(fā)生器源文件use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sinwave is port (clk:in std_logic; -信號(hào)源時(shí)鐘 dout:out std_logic_vector(7 downto 0);-8位波形數(shù)據(jù)輸出end;architecture dacc of sinwave iscomponent data_rom PORT(address: IN STD_LOGIC_VECTOR (9 DOWNTO 0);
5、-10位地址信號(hào)clock: IN STD_LOGIC := 1;q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);end component;signal q1:std_logic_vector(9 downto 0):=0000000000;-設(shè)定內(nèi)部節(jié)點(diǎn)作為地址計(jì)算器beginprocess(clk)beginif clkevent and clk =1 then q1q1,q=dout,clock=clk);-例化end;實(shí)驗(yàn)二、數(shù)字鐘的設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康模? 熟練掌握Quartus II的使用;2 掌握宏單元模塊定制ROM;3 掌握VHDL語言中的元件例化;4
6、 掌握VHDL語言中的數(shù)字鐘的設(shè)計(jì);5. 練習(xí)使用VHDL寫狀態(tài)機(jī)程序。二、實(shí)驗(yàn)條件:1. 裝有Quartus II 13.0的電腦一臺(tái);2. EP4CE15F17C8實(shí)驗(yàn)開發(fā)板一套。三、實(shí)驗(yàn)原理:1.EP4CE15F17C8開發(fā)板的系統(tǒng)時(shí)鐘是50MHz,通過分頻方式產(chǎn)生1Hz的標(biāo)準(zhǔn)秒脈沖,通過把三個(gè)計(jì)數(shù)器級(jí)聯(lián),分別對(duì)電子鐘的秒分時(shí)進(jìn)行計(jì)數(shù),計(jì)數(shù)器的模分別為60,60,24;2.對(duì)計(jì)數(shù)結(jié)果進(jìn)行二進(jìn)制到8421BCD碼的轉(zhuǎn)換,通過譯碼器把BCD碼轉(zhuǎn)換成七段碼,顯示是通過位碼控制來進(jìn)行動(dòng)態(tài)顯示的;3.本開發(fā)板使用的按鍵是獨(dú)立式按鍵,總共有六個(gè)按鍵,上下鍵完成狀態(tài)間的切換,左右鍵完成數(shù)字的加減,中間
7、鍵為確認(rèn)鍵,還有一個(gè)單獨(dú)的復(fù)位鍵;5.通過按鍵來完成當(dāng)前時(shí)間和鬧鐘的時(shí)間調(diào)整。四、實(shí)驗(yàn)內(nèi)容:1.計(jì)數(shù)器的設(shè)計(jì)在本次實(shí)驗(yàn)中使用了較多的計(jì)數(shù)器,通過編寫通用計(jì)數(shù)器,再在主程序中多次例化,以達(dá)到精簡代碼的目的。本計(jì)數(shù)器定義了置數(shù)使能和置數(shù)值輸入口來完成當(dāng)前時(shí)鐘時(shí)間的調(diào)節(jié)。時(shí)鐘的位數(shù)和模值可通過具體的例化原件來進(jìn)行初始化。entity counter isgeneric (bitwidth:integer:=4;moda:integer:=12);port (clk,en,en_set:in std_logic;d :in std_logic_vector(bitwidth-1 downto 0);
8、cout:out std_logic; counterout :out std_logic_vector(bitwidth-1 downto 0);end entity;計(jì)數(shù)器的cout是計(jì)數(shù)進(jìn)位端,作為下一級(jí)計(jì)數(shù)器的計(jì)數(shù)使能端,此處需要注意本級(jí)的進(jìn)位端不能作為下一級(jí)的時(shí)鐘信號(hào)使,因?yàn)檫M(jìn)位端的毛刺會(huì)使計(jì)數(shù)結(jié)果出現(xiàn)錯(cuò)誤。2.按鍵去抖程序的設(shè)計(jì)實(shí)驗(yàn)中需要對(duì)按鍵進(jìn)行消抖處理,消抖的程序是直接采用計(jì)數(shù)器計(jì)數(shù)的形式,等計(jì)數(shù)器達(dá)到一定的值時(shí),將相應(yīng)的按鍵使能信號(hào)置為有效位。設(shè)置計(jì)數(shù)器的最大計(jì)數(shù)值為5000000,當(dāng)按鍵按下時(shí)間到100ms時(shí),將按鍵使能信號(hào)置位。調(diào)節(jié)時(shí)間和鬧鐘時(shí)間的程序采用狀態(tài)機(jī)的方法設(shè)計(jì)
9、。狀態(tài)轉(zhuǎn)換如下現(xiàn)態(tài)key_rst_enkey_ok_enkey_up_enkey_down_enkey_left_enkey_right_enS0S5S1S0S0S0S0S1S5S5S4S2S1S1S2S5S5S1S3S2S2S3S5S5S2S4S3S3S4S5S5S3S1S4S4S5S0S0是空閑狀態(tài),在沒有按鍵按下時(shí)在此狀態(tài),S1是分鐘調(diào)節(jié)狀態(tài),S2是小時(shí)調(diào)節(jié)狀態(tài),S3是鬧鐘分鐘調(diào)節(jié)狀態(tài),S4是鬧鐘小時(shí)調(diào)節(jié)狀態(tài),S5是置數(shù)使能端使能狀態(tài),此狀態(tài)停留一個(gè)系統(tǒng)時(shí)鐘后自動(dòng)返回S0狀態(tài)。3. 譯碼器的設(shè)計(jì) 本設(shè)計(jì)的譯碼器包括兩類譯碼器:(1)將二進(jìn)制數(shù)轉(zhuǎn)換成8421BCD碼;(2)將BCD碼轉(zhuǎn)換成
10、七段碼。4.在調(diào)節(jié)時(shí)間的時(shí)候?yàn)榱孙@示現(xiàn)在正在調(diào)節(jié)的時(shí)間,在程序中加入顯示控制端,顯示控制端共四位,說明如下:調(diào)節(jié)內(nèi)容disply_ctrl分鐘調(diào)節(jié)1010小時(shí)調(diào)節(jié)1011鬧鈴分鐘調(diào)節(jié)1110鬧鈴小時(shí)調(diào)節(jié)1111當(dāng)正在調(diào)節(jié)時(shí)間時(shí),讓秒顯示00,當(dāng)調(diào)節(jié)鬧鈴時(shí)間時(shí),讓秒顯示55,在主程序中顯示控制程序如下:if disply_ctrl(3 downto 2)=10 then-有鍵按下hour_display=hour_set;minute_display=minute_set;second_display=000000;elsif disply_ctrl(3 downto 2)=11 thenhou
11、r_display=hour_alarm;minute_display=minute_alarm;second_display=110111;elsehour_display=hour;minute_display=minute;second_display if disply_ctrl(1 downto 0)=11 thenbt = 111110 or (11111 & clk_0_5s_duty_50 ); elsebt = 111110;end if;a if disply_ctrl(1 downto 0)=11 thenbt = 111101 or (1111 & clk_0_5s_d
12、uty_50 & 1 ); elsebt = 111101;end if;a if disply_ctrl(1 downto 0)=10 thenbt = 111011 or (111 & clk_0_5s_duty_50 & 11 ); elsebt = 111011;end if;a if disply_ctrl(1 downto 0)=10 thenbt = 110111 or (11 & clk_0_5s_duty_50 & 111 ); elsebt = 110111;end if;a bt = 101111; a bt = 011111; a bt = 000000; a=15;-
13、null;end case;6.鬧鈴?fù)ㄟ^對(duì)比當(dāng)前時(shí)間和設(shè)定的鬧鈴的時(shí)間,當(dāng)相同時(shí),啟動(dòng)蜂鳴器,主要程序如下:if hour=hour_alarm and minute=minute_alarm thenbuzzer = 1;elsebuzzer = 0;end if;五、實(shí)驗(yàn)總結(jié):35通過動(dòng)手完成了本實(shí)驗(yàn)的主要任務(wù),顯示時(shí)間,調(diào)節(jié)時(shí)間,鬧鈴功能。6、 實(shí)驗(yàn)代碼計(jì)數(shù)器程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isgeneric (bitwidth:integ
14、er:=4;moda:integer:=12);port (clk,en,en_set:in std_logic;d :in std_logic_vector(bitwidth-1 downto 0); cout:out std_logic; counterout :out std_logic_vector(bitwidth-1 downto 0);end entity;architecture one of counter isbeginprocess(clk)variable temp:std_logic_vector(bitwidth-1 downto 0);beginif clkeve
15、nt and clk=1 thencout=0;if en_set=0 then temp := d;cout=0;elsif en=1 thenif temp 0);cout=1;end if;end if;end if;counterout=temp;end process;end;按鍵消抖程序:library ieee;use ieee.std_logic_1164.all;entity key_detect isgeneric (N:integer:=5);port (clk : in std_logic;key_rst : in std_logic;key_ok : in std_l
16、ogic;key_up : in std_logic;key_down : in std_logic;key_left : in std_logic;key_right : in std_logic;key_rst_en : out std_logic;key_ok_en : out std_logic;key_up_en : out std_logic;key_down_en : out std_logic;key_left_en : out std_logic;key_right_en : out std_logic);end entity key_detect;architecture
17、one of key_detect issignal key_all : std_logic_vector (5 downto 0);-將輸入輸出并行操作signal key_all_en : std_logic_vector (5 downto 0);signal key_and : std_logic;-輸入相與beginprocess(clk)variable count : integer range 0 to 500000;beginkey_all = key_rst & key_ok & key_up & key_down & key_left & key_right;key_an
18、d = key_rst and key_ok and key_up and key_down and key_left and key_right;if clkevent and clk=1 thenif key_and=0 thenif count=N then count:=count;else count:=count+1;end if;if count=N-1 then key_all_en=key_all;else key_all_en=111111;end if;else count:=0;key_all_en=111111;end if;end if;key_rst_en = k
19、ey_all_en(5);key_ok_en = key_all_en(4);key_up_en = key_all_en(3);key_down_en = key_all_en(2);key_left_en = key_all_en(1);key_right_en en_set = 1;-復(fù)位低電平有效if key_rst_en=0 then -有復(fù)位鍵按下minute_set_temp := 000000;-對(duì)時(shí)間進(jìn)行復(fù)位hour_set_temp := 00000;minute_a_set_temp:= 000000;hour_a_set_temp := 00000;-en_set =
20、0;-復(fù)位低電平有效state := s5;elsif key_ok_en=0 then -有設(shè)置鍵按下minute_set_temp := minute;-讀取當(dāng)前的時(shí)間hour_set_temp := hour;disply_ctrl en_set = 1;-復(fù)位低電平有效if key_rst_en=0 then -有復(fù)位鍵按下minute_set_temp := 000000;-對(duì)時(shí)間進(jìn)行復(fù)位hour_set_temp := 00000;minute_a_set_temp:= 000000;hour_a_set_temp := 00000;-en_set = 0;-復(fù)位低電平有效stat
21、e := s5;elsif key_ok_en=0 then-退出設(shè)置minute_set = minute_set_temp;hour_set = hour_set_temp;minute_alarm = minute_a_set_temp;hour_alarm = hour_a_set_temp;-en_set = 0;-復(fù)位低電平有效disply_ctrl = 0000;state := s5;elsif key_up_en=0 then-跳至鬧鐘小時(shí)設(shè)置disply_ctrl = 1111;-顯示控制state := s4;elsif key_down_en=0 then-跳至小時(shí)設(shè)置
22、disply_ctrl 000000 thenminute_set_temp:= minute_set_temp-1;elseminute_set_temp:= 000000;end if;elsif key_right_en=0 then-分鐘加1if minute_set_temp en_set = 1;-復(fù)位低電平有效if key_rst_en=0 then -有復(fù)位鍵按下minute_set_temp := 000000;-對(duì)時(shí)間進(jìn)行復(fù)位hour_set_temp := 00000;minute_a_set_temp:= 000000;hour_a_set_temp := 00000;
23、-en_set = 0;-復(fù)位低電平有效state := s5;elsif key_ok_en=0 then-退出設(shè)置minute_set = minute_set_temp;hour_set = hour_set_temp;minute_alarm = minute_a_set_temp;hour_alarm = hour_a_set_temp;-en_set = 0;-復(fù)位低電平有效disply_ctrl = 0000;state := s5;elsif key_up_en=0 then-跳至分鐘設(shè)置disply_ctrl = 1010;-顯示控制state := s1;elsif key
24、_down_en=0 then-跳至鬧鈴分鐘設(shè)置disply_ctrl 00000 thenhour_set_temp:= hour_set_temp-1;elsehour_set_temp:= 00000;end if;elsif key_right_en=0 then-小時(shí)加1if hour_set_temp en_set = 1;-復(fù)位低電平有效if key_rst_en=0 then -有復(fù)位鍵按下minute_set_temp := 000000;-對(duì)時(shí)間進(jìn)行復(fù)位hour_set_temp := 00000;minute_a_set_temp:= 000000;hour_a_set_
25、temp := 00000;-en_set = 0;-復(fù)位低電平有效state := s5;elsif key_ok_en=0 then-退出設(shè)置minute_set = minute_set_temp;hour_set = hour_set_temp;minute_alarm = minute_a_set_temp;hour_alarm = hour_a_set_temp;-en_set = 0;-復(fù)位低電平有效disply_ctrl = 0000;state := s5;elsif key_up_en=0 then-跳至小時(shí)設(shè)置disply_ctrl = 1011;-顯示控制state :
26、= s2;elsif key_down_en=0 then-跳至鬧鈴小時(shí)設(shè)置disply_ctrl 000000 thenminute_a_set_temp:= minute_a_set_temp-1;elseminute_a_set_temp:= 000000;end if;elsif key_right_en=0 then-鬧鈴分鐘加1if minute_a_set_temp en_set = 1;-復(fù)位低電平有效if key_rst_en=0 then -有復(fù)位鍵按下minute_set_temp := 000000;-對(duì)時(shí)間進(jìn)行復(fù)位hour_set_temp := 00000;minu
27、te_a_set_temp:= 000000;hour_a_set_temp := 00000;-en_set = 0;-復(fù)位低電平有效state := s5;elsif key_ok_en=0 then-退出設(shè)置minute_set = minute_set_temp;hour_set = hour_set_temp;minute_alarm = minute_a_set_temp;hour_alarm = hour_a_set_temp;-en_set = 0;-復(fù)位低電平有效disply_ctrl = 0000;state := s5;elsif key_up_en=0 then-跳至鬧
28、鐘分鐘設(shè)置disply_ctrl = 1110;-顯示控制state := s3;elsif key_down_en=0 then-跳至分鐘設(shè)置disply_ctrl 00000 thenhour_a_set_temp:= hour_a_set_temp-1;elsehour_a_set_temp:= 00000;end if;elsif key_right_en=0 then-鬧鈴小時(shí)加1if hour_a_set_tempstate := s0;en_set state := s0;en_set = 1;minute_set = minute_set_temp;hour_set = hou
29、r_set_temp;minute_alarm = minute_a_set_temp;hour_alarm = hour_a_set_temp;end case;minute_set = minute_set_temp;hour_set = hour_set_temp;minute_alarm = minute_a_set_temp;hour_alarm led1=0;led0 led1=0;led0 led1=0;led0 led1=0;led0 led1=0;led0 led1=0;led0 led1=0;led0 led1=0;led0 led1=0;led0 led1=0;led0
30、led1=1;led0 led1=1;led0 led1=1;led0 led1=1;led0 led1=1;led0 led1=1;led0 led1=1;led0 led1=1;led0 led1=1;led0 led1=1;led0 led1=2;led0 led1=2;led0 led1=2;led0 led1=2;led0 led1=2;led0 led1=2;led0 led1=2;led0 led1=2;led0 led1=2;led0 led1=2;led0 led1=3;led0 led1=3;led0 led1=3;led0 led1=3;led0 led1=3;led0
31、led1=3;led0 led1=3;led0 led1=3;led0 led1=3;led0 led1=3;led0 led1=4;led0 led1=4;led0 led1=4;led0 led1=4;led0 led1=4;led0 led1=4;led0 led1=4;led0 led1=4;led0 led1=4;led0 led1=4;led0 led1=5;led0 led1=5;led0 led1=5;led0 led1=5;led0 led1=5;led0 led1=5;led0 led1=5;led0 led1=5;led0 led1=5;led0 led1=5;led0
32、led1=15;led0 sg sg sg sg sg sg sg sg sg sg sg sg sg sg sg sg null;end case; end process;end;architecture two of decode isbeginWITH a SELECT sg = 1000000 WHEN 0, 1111001 WHEN 1, 0100100 WHEN 2, 0110000 WHEN 3, 0011001 WHEN 4, 0010010 WHEN 5, 0000010 WHEN 6, 1111000 WHEN 7, 0000000 WHEN 8, 0010000 WHEN 9, 0001000 WHEN 10, 0000011 WHEN 11, 1000110 WHEN 12, 0100001 WHEN 13, 0000110 WHEN 14, 0001110 WHEN 15, 1111111 WHEN OTHERS ;end;configuration aa of decode i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度美容院美容美發(fā)服務(wù)入股協(xié)議
- 2025年度電線電纜綠色包裝與供貨合同
- 股權(quán)代持協(xié)議書標(biāo)準(zhǔn)模板:2025年度股權(quán)收購執(zhí)行范本
- 二零二五年度交通事故車輛損失保險(xiǎn)理賠協(xié)議
- 二零二五年度汽車展覽會(huì)參展商環(huán)保責(zé)任合同
- Unit 1 Going to Beijing 單元基礎(chǔ)知識(shí)復(fù)習(xí)(含答案)
- 2025年度溫室大棚承包與農(nóng)業(yè)科技成果轉(zhuǎn)化合作協(xié)議
- 二零二五年度手車過戶買賣與車輛上牌服務(wù)協(xié)議
- 兒童國畫入門課堂
- 中級(jí)消防設(shè)施操作員速記口訣
- 項(xiàng)目式學(xué)習(xí)在小學(xué)數(shù)學(xué)教學(xué)中的應(yīng)用
- 2025年中遠(yuǎn)海運(yùn)物流有限公司招聘筆試參考題庫含答案解析
- 2024年3月-6月-9月-12月青少年軟件編程Python等級(jí)考試二級(jí)真題試卷(全4套 含答案)
- 2025中智集團(tuán)下屬單位公開招聘41人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 中醫(yī)理療館路演
- 設(shè)備維修的基本技能培訓(xùn)
- 產(chǎn)后腹直肌分離治療
- 2025年中國郵政招聘筆試參考題庫含答案解析
- 人教版(2024)七年級(jí)英語上冊新教材的變化及教學(xué)建議課件
- 2025年新聞部工作計(jì)劃
- 合同 水電押金條款
評(píng)論
0/150
提交評(píng)論