VHDL實驗報告_第1頁
VHDL實驗報告_第2頁
VHDL實驗報告_第3頁
VHDL實驗報告_第4頁
VHDL實驗報告_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、西安電子科技大學實驗報告課程名稱硬件描述語言與可編程邏輯器件成績實驗學時16評語: 指導教師: 年 月 日班 級: 學 號: 姓 名: 地 點: E-505 批 次: 第二批 時 間:星期五下午、晚上 實驗一 3-8譯碼器電路設計實驗(一)實驗名稱:3-8譯碼器電路設計(二)實驗目的:1)掌握ISE開發(fā)工具的使用,掌握FPGA開發(fā)的基本步驟;2)掌握組合邏輯電路設計的一般方法;3)掌握程序下載方法,了解UCF文件的格式;4)初步了解開發(fā)板資源,掌握開發(fā)板使用方法。重點了解滑動開關和LED顯示燈的使用方法。5)理解并掌握VHDL程序的結構,掌握輸入輸出端口的含義;(三)實驗內容:(1)用VHDL

2、實現(xiàn)3-8譯碼器模塊譯碼器電路如圖3-1所示。其功能如表3-1所示。試用VHDL完成該譯碼器的設計,并在開發(fā)板上進行檢驗。3-8譯碼器ABCG2BY0Y1Y2Y3Y4Y5Y6Y7圖3-1 74x138 3-8譯碼器G2AG1 表3-1 譯碼器功能表輸入輸出G1G2AG2BCBAY7Y6Y5Y4Y3Y2Y1Y00XXXXX00000000X1XXXX00000000XX1XXX000000001000000000000110000100000010100010000001001000110000100010010000010000100101001000001001100100000010011

3、110000000(2)將程序下載到FPGA并進行檢驗l 資源使用要求:n 用滑動開關SW0SW4作為輸入A,B,C,G1;n 滑動開關BTN_EAST,BTN_WEST作為控制端G2A,G2B;n 8個LED燈表示8個輸出。l 檢驗方法:當SW0處于OFF(G1=1)或者SW1處于ON(G2A=1)或者SW2處于ON(G2B=1)位置時,所 有LED燈滅;當SW0處于ON(G1=1),且BTN_EAST,BTN_WEST均處于OFF狀態(tài)時,反映當前輸入的譯碼輸出在LED燈上顯示,即當輸入為000(滑動開關SW0-SW2處于OFF狀態(tài)),LED0亮,其它燈滅,等等。(四)實驗步驟:1)啟動IS

4、E,新建工程文件,編寫3-8譯碼器的VHDL模塊;2)新建UCF文件,輸入位置約束;3)完成綜合、實現(xiàn),生成下載文件;4)連接開發(fā)板USB下載線,開啟開發(fā)板電源;5)下載到FPGA;6)撥動開關,驗證結果是否正確。(五)實驗代碼: entity decode38 is Port ( A : in STD_LOGIC; B : in STD_LOGIC; C : in STD_LOGIC; G1 : in STD_LOGIC; G2A : in STD_LOGIC; G2B : in STD_LOGIC; Y : out STD_LOGIC_VECTOR (7 downto 0);end dec

5、ode38;architecture Behavioral of decode38 issignal din: std_logic_vector(2 downto 0);begindin <= C&B&A;PROCESS(din,G1,G2A,G2B)beginif (G1='1' AND G2A='0' AND G2B='0') THENcase din iswhen "000" => Y<="00000001"when "001" => Y&l

6、t;="00000010"when "010" => Y<="00000100"when "011" => Y<="00001000"when "100" => Y<="00010000"when "101" => Y<="00100000"when "110" => Y<="01000000"when "1

7、11" => Y<="10000000"when others => Y<="00000000"end case;elsif(G1='0' OR G2A='1' OR G2B='1')THEN Y <= "00000000"else null;end if;end process;end Behavioral;約束性文件NET "A" LOC = "L13" | IOSTANDARD = LVTTL | PU

8、LLUP;NET "B" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP;NET "C" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP;NET "G1" LOC = "N17" | IOSTANDARD = LVTTL | PULLUP;NET "Y<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW |

9、 DRIVE = 8;NET "Y<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<5>" LOC = "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NE

10、T "Y<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<

11、;0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "G2A" LOC = "H13" | IOSTANDARD = LVTTL | PULLdown;NET "G2B" LOC = "D18" | IOSTANDARD = LVTTL | PULLdown; 實驗二 可逆計數(shù)器設計實驗 (一)實驗名稱:八位可逆計數(shù)器電路設計(二)實驗目的:1)進一步熟練ISE開發(fā)工具,鞏固FPGA開發(fā)的基本步驟

12、;2)掌握設計仿真方法;3)掌握時序邏輯電路設計的一般方法,掌握時鐘分頻程序設計方法;4)理解VHDL的層次結構設計,掌握原理圖輸入方法;5)鞏固程序下載方法;6)了解開發(fā)板時鐘資源,以及時鐘分頻方法。(三)實驗內容:本實驗分多個模塊實現(xiàn),采用原理圖輸入方法完成設計輸入。(1)實現(xiàn)如下八位可逆計數(shù)器可逆計數(shù)器電路圖及功能表如圖4-1和表4-1所示。用VHDL完成該電路模塊的設計,并生成原理圖。clrenclkY0Y1Y2Y3Y4Y5Y6Y7Up/Dn圖4-1 可逆計數(shù)器原理圖 表4-1 可逆計數(shù)器功能表輸入輸出clrenUp/Dnclk Y7 Y01XXX0000000000XX停止計數(shù)011

13、計數(shù)器+1操作010計數(shù)器-1操作(2)資源使用要求及實現(xiàn)方法:1)用LED0LED7作為計數(shù)器輸出顯示,LED7為高位,LED0為低位;2)SW0為計數(shù)方向up/dn控制;3)SW1為計數(shù)允許EN控制端;4)BTN_EAST為clr按鈕;5)計數(shù)時鐘頻率為1Hz,通過對50Mhz系統(tǒng)時鐘分頻得到,分頻電路獨立編寫一個模塊,如圖4-2所示。完成模塊設計,并生成原理圖;50M clock1Hz clock1/5000000圖4-2 1/5000000分頻器6)計數(shù)器擴展:可以對按鍵次數(shù)進行計數(shù)(按鍵為BTN_SOUTH),即通過SW2選擇計數(shù)源。即當S='1'時,輸出In1,當S

14、='0'時,輸出In2。二選一電路如圖4-3所示。In1DoutIn2S2選1電路圖4-3 二選一電路7)將圖4-1圖4-3三個模塊連接起來,構成一個完整計數(shù)器。如圖4-4所示。En(SW1)clkY0(LED0)Y3(LED3)Y4(LED4)Y5(LED5)Y6(LED6)Y7(LED7)Up/Dn(SW0)2選1SW2clr(BTN_EAST)BTN_SOUTH1/5000000圖4-4 完整的可逆計數(shù)器(四) 實驗步驟:1)建立工程文件,頂層文件為原理圖;2)編寫分頻模塊程序:輸入50MHz系統(tǒng)時鐘,輸出為1Hz計數(shù)時鐘;3)編寫2選1模塊,輸入為按鍵、1Hz時鐘和開關

15、SW2,輸出為計數(shù)源;4)編寫計數(shù)器模塊主程序模塊;5)在原理圖中,將各個模塊連接,使用pinhead分配引腳資源;6)對程序進行功能仿真;7)下載程序,進行驗證。(五)實驗代碼:計數(shù)器COUNTER:entity COUNTER is Port ( clr : in STD_LOGIC; en : in STD_LOGIC; updown : in STD_LOGIC; clk : in STD_LOGIC; y : out STD_LOGIC_VECTOR (7 downto 0);end COUNTER;architecture Behavioral of COUNTER issigna

16、l sum:STD_LOGIC_VECTOR (7 downto 0):="00000000"begin process(sum,clr,en,updown,clk) beginif(clk'event and clk ='1')then if(clr='1')then sum<="00000000" y<="00000000" elsif(en='0')then y<=sum; elsif(updown='1')then sum<=sum

17、+1; y<=sum; else sum<=sum-1; y<=sum; end if;end if; end process;end Behavioral;分頻器FREQ:entity FREQ is Port ( clk50M : in STD_LOGIC; clk1hz : out STD_LOGIC);end FREQ;architecture Behavioral of FREQ isbegin process(clk50M) variable num:INTEGER range 0 to 50000002:=0; begin if(clk50M'event

18、 and clk50M ='1')thennum:=num+1;if(num<25000000)thenclk1hz<='1'elseclk1hz<='0' if (num>50000000)thennum:=0;end if;end if;end if; end process; end Behavioral;2選1數(shù)據(jù)選擇器SEL:entity SEL is Port ( in1 : in STD_LOGIC; in2 : in STD_LOGIC; S : in STD_LOGIC; Dout : out STD_L

19、OGIC);end SEL;architecture Behavioral of SEL isbegin process(in1,in2,S) begin if(S = '0')then Dout <= in1; else Dout <= in2; end if; end process;end Behavioral;頂層文件TOP:entity TOP is Port ( BTN_EAST : in STD_LOGIC; SW1 : in STD_LOGIC; SW0 : in STD_LOGIC; CLK : in STD_LOGIC; BTN_SOUTH :

20、in STD_LOGIC; SW2 : in STD_LOGIC; Y : out STD_LOGIC_VECTOR (7 downto 0);end TOP;architecture Behavioral of TOP isCOMPONENT FREQPORT(clk50M : IN std_logic; clk1hz : OUT std_logic);END COMPONENT;COMPONENT SELPORT(in1 : IN std_logic;in2 : IN std_logic;S : IN std_logic; Dout : OUT std_logic);END COMPONE

21、NT;COMPONENT COUNTERPORT(clr : IN std_logic;en : IN std_logic;updown : IN std_logic;clk : IN std_logic; y : OUT std_logic_vector(7 downto 0);END COMPONENT;signal CLKOUT:STD_LOGIC;signal JIX:STD_LOGIC;beginInst_FREQ: FREQ PORT MAP(clk50M =>CLK ,clk1hz =>CLKOUT);Inst_SEL: SEL PORT MAP(in1 =>C

22、LKOUT,in2 =>BTN_SOUTH,S =>SW2,Dout =>JIX);Inst_COUNTER: COUNTER PORT MAP(clr =>BTN_EAST,en =>SW1,updown =>SW0,clk =>JIX,y =>Y );約束性文件NET "clr" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP;NET "en" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP;

23、NET "updown" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP;NET "Y<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<5>" LOC = &q

24、uot;D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<2>" LOC = "E11"

25、; | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "clk" LOC = "C9" | IOSTANDARD = LVC

26、MOS33 ;NET "clk" PERIOD = 20.0ns HIGH 40%;NET "SW2" LOC = "V4" | IOSTANDARD = LVTTL | PULLdown; 實驗三 按鍵抖動消除及驗證電路設計(一)實驗名稱:按鍵抖動消除及驗證電路設計(二)實驗目的:1)進一步熟練ISE開發(fā)工具,鞏固FPGA開發(fā)的基本步驟,掌握功能仿真方法;2)了解按鍵抖動的原因,抖動消除方法;3)掌握狀態(tài)機的設計方法;4)掌握消除抖動的狀態(tài)機設計方法;5)鞏固程序下載方法。(三)實驗內容:(1) 原理簡介按鍵動作發(fā)生時,按鍵的輸出會

27、出現(xiàn)不穩(wěn)定的邏輯0和邏輯1的跳變。該信號直接輸入到計數(shù)器之類電路,會發(fā)生計數(shù)錯誤。如圖5-1所示。去抖的目的是根據(jù)抖動信號產生如圖5-2所示的信號。圖5-1 信號抖動(pushbtn) 圖5-2 去抖后的信號(key_out)(2) 提示:狀態(tài)機設計思路設置六個狀態(tài):S0,S1,S2,S3,S4,S5。電路啟動時,進入復位狀態(tài)S0,在S0狀態(tài)下,去抖輸出信號key_out為0,時鐘信號divclk(頻率為2.5Mhz,通過50Mhz系統(tǒng)時鐘20分頻得到)以一定頻率采樣按鍵輸入信號pushbtn,如果采樣到pushbtn = 0,則停留在S0狀態(tài),并繼續(xù)采樣,一旦采樣到pushbtn=1,則轉入

28、S1延時狀態(tài),進行消抖延時(延時可以用計數(shù)器來完成,比如50個divclk周期),當延時結束時,Delay_end=1,則轉入S2狀態(tài),在此狀態(tài)下,時鐘信號divclk以一定頻率采樣按鍵輸入pushbtn,如果pushbtn = 0則轉入S0,否則轉入S3;狀態(tài)S3,S4的轉換過程和條件與S2相同,在狀態(tài)S4下,如果pushbtn=1,則轉入S5狀態(tài),當進入S5時,表示經過S2,S3,S4三個連續(xù)狀態(tài)檢測按鍵輸入pushbtn都為1,則認為按鍵處于穩(wěn)定狀態(tài),在S5輸出按鍵確認信號key_out =1。同時在狀態(tài)S5下,時鐘信號divclk檢測按鍵輸入pushbtn,如果pushbtn = 1,

29、表示按鍵未釋放,繼續(xù)停留在S5,檢測輸入信號,如果檢測到pushbtn= 0,表示按鍵已經釋放,輸出key_out= 0, 返回到狀態(tài)S0,等待下一次按鍵操作。S0S5S4S1S2S3(3)完成驗證電路設計設計一個按鍵計數(shù)器,通過選擇開關,對未去抖的信號和去抖后的信號分別進行計數(shù)。驗證設計的正確性。完整的原理圖如圖5-3所示。提示,去抖電路的采樣時鐘最好通過50Mhz進行分頻后產生。去抖狀態(tài)機模塊2選1模塊按鍵選擇計數(shù)器核心進程Y0(LED0)Y3(LED3)Y4(LED4)Y5(LED5)Y6(LED6)Y7(LED7)Y1(LED1)Y2(LED2)up/dn2.5Mhz分頻clr圖5-3

30、 完整電路實際設計電路如下圖所示:資源使用要求:1)用LED0LED7作為計數(shù)輸出。資源約束為:NET "y<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<5>" LOC = "D11" | IOSTANDAR

31、D = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<2>" LOC = "E11" | IOSTANDARD = LVTTL

32、 | SLEW = SLOW | DRIVE = 8 ;NET "y<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;NET "y<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;2)BTN_SOUTH作為待計數(shù)的按鍵。資源約束為:NET "pushbtn" LOC = "K17" | IOST

33、ANDARD = LVTTL | PULLDOWN; #BTN_SOUTH3)對去抖信號還是直接按鍵計數(shù)選擇用SW1開關控制。即當SW1處于1狀態(tài),對去抖后的信號計數(shù),否則直接對按鍵btn_south計數(shù)。資源約束為:NET "jitteren" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP ; #SW14)SW0用來控制加1計數(shù)還是減1計數(shù),當up/dn = '1'時,加1計數(shù)。資源約束為:NET "updown" LOC = "L13" | IOSTANDA

34、RD = LVTTL | PULLUP ; #SW05)BTN_EAST作為計數(shù)器清0控制,當按下時,對計數(shù)器清0,資源為:NET "clr" LOC = "H13" | IOSTANDARD = LVTTL | PULLDOWN ; #BTN_EAST6)系統(tǒng)時鐘為50Mhz,資源為:NET "clk55Mhz" LOC = "C9" | IOSTANDARD = LVCMOS33 ;注:狀態(tài)機使用對系統(tǒng)時鐘進行分頻后的時鐘信號。(四)實驗步驟:1)畫出電路的狀態(tài)轉換圖;2)編寫完整的VHDL程序;3)下載程序,

35、進行驗證(五)實驗代碼: 器件之間的連接圖:消抖電路的設計entity xiaoxiao is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; keyin : in STD_LOGIC; keyout : out STD_LOGIC);end xiaoxiao;architecture Behavioral of xiaoxiao is TYPE states IS (S0,S1,S2,S3,S4,S5); SIGNAL next_state: states;BEGINPROCESS (clk,rst,keyin)variable count:in

36、teger:= 1000; beginIF (rst = '1') THEN next_state <= s0; ELSIF (clk'EVENT AND clk = '1')THEN CASE next_state IS when s0 =>if (keyin = '1')thennext_state <= s1;else null;end if; when s1=>count := count -1;if (count = 0) thencount := 1000;next_state <= s2;els

37、e null;end if;when s2=>if (keyin='0') then next_state <= s0;else next_state <= s3;end if; when s3=>if (keyin='0') then next_state <= s0;else next_state <= s4;end if; when s4=>if (keyin='0') then next_state <= s0;else next_state <= s5; keyout <= &

38、#39;1'end if; when s5=>if (keyin='0') then keyout <= '0' next_state <= s0;end if; end case; end if; End process;end Behavioral;約束性文件NET "clr" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP;NET "updn" LOC = "L14" | IOSTANDARD = LVTTL | P

39、ULLUP;NET "sel" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP;NET "Y<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<5>" LOC =

40、 "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<2>" LOC = "E11&q

41、uot; | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "Y<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;NET "divclk" LOC = "C9" | IOSTANDARD

42、 = LVCMOS33 ;NET "divclk" PERIOD = 20.0ns HIGH 40%;NET "but" LOC = "V4" | IOSTANDARD = LVTTL | PULLdown; 實驗四 兩人乒乓球游戲(一)實驗名稱:兩人乒乓球游戲(二)實驗目的:1)進一步熟練ISE開發(fā)工具,鞏固FPGA開發(fā)的基本步驟,掌握功能仿真方法;2)鞏固狀態(tài)機的設計方法;3)鞏固按鍵消抖電路設計方法;4)掌握多進程程序設計方法;5)鞏固程序下載方法;6)了解開發(fā)板時鐘資源,以及時鐘分頻方法。(三)實驗內容:(1) 原理簡介兩人乒

43、乓游戲機用8個發(fā)光二極管代表乒乓球臺,中間兩個發(fā)光二極管作為乒乓球網(wǎng),用點亮的發(fā)光二極管按照一定的方向移動來表示球的運動。在游戲機的兩側各設置發(fā)球和擊球開關,甲乙雙方按乒乓球比賽規(guī)則來操作開關。當甲方按動發(fā)球開關時,靠近甲方的第一個發(fā)光二極管亮,然后發(fā)光二極管由甲方向乙方依次點亮,代表乒乓球的移動,當球過網(wǎng)后,按照設計者規(guī)定的球位乙方就可以擊球。若乙方提前擊球或者未擊到球,則甲方得分。然后重新發(fā)球比賽,直到一方達到21分為止,記分清0,重新開始新一局比賽。(2) 提示:狀態(tài)機設計思路設置七個狀態(tài):“等待發(fā)球狀態(tài)”、“第一盞燈亮狀態(tài)”、“第八盞燈亮狀態(tài)”、“球向乙移動狀態(tài)” 、“球向甲移動狀態(tài)”

44、、“允許甲擊球狀態(tài)” 、“允許乙擊球狀態(tài)”。開始的時候處于“等待發(fā)球狀態(tài)”,若甲發(fā)球則狀態(tài)轉移到“第一盞燈亮狀態(tài)”,若乙發(fā)球則轉移到“第八盞燈亮狀態(tài)”。以甲發(fā)球為例:若發(fā)球后乙沒有提前擊球(規(guī)定球移動到對方第一個發(fā)光二極管時允許擊球),那么狀態(tài)機從“第一盞燈亮狀態(tài)”轉移到“球向乙移動狀態(tài)”,若此時乙依然沒有提前擊球,狀態(tài)就轉移到“允許乙擊球狀態(tài)”,在此狀態(tài)下,如果乙擊球了,那么狀態(tài)就轉移到“球向甲移動狀態(tài)”。在“第一盞燈亮狀態(tài)”、“球向乙移動狀態(tài)”中,如果乙擊球了,就算提前擊球,這樣甲得分,狀態(tài)轉移到“等待發(fā)球狀態(tài)”等待發(fā)球?!扒蛳蚣滓苿訝顟B(tài)”之后的過程和前面的過程只不過是甲乙角色的調換而已,

45、狀態(tài)轉移規(guī)則一樣。狀態(tài)轉換圖如圖5-1所示。圖6-1 乒乓球游戲狀態(tài)轉換圖(3)實體設計提示在輸入端口上:1)考慮一個異步置位端口reset,用于在系統(tǒng)不正常時回到初始常態(tài);2)兩個發(fā)球輸入端serve1和serve2,邏輯1分別標識甲方和乙方發(fā)球;3)兩個擊球輸入端hit1和hit2,邏輯1分別標識甲方和乙方擊球;4)一個開始游戲按鈕startbtn,處于邏輯1標識可以游戲;5)時鐘輸入端口clk;輸出端口:8個二極管,標識乒乓球臺。(4)資源使用要求1)用LED0LED7作為乒乓球臺,其中LED3,LED4作為球網(wǎng),總是點亮;2)BTN_EAST作為開始游戲按鈕,按下一次,重新開始游戲;3

46、)BTN_SOUTH,BTN_EAST分別作為甲乙發(fā)球按鈕;4)SW0作為甲擊球開關,SW3作為乙擊球開關。擊球的動作為ON-OFF。(四)實驗步驟:1)畫出游戲的狀態(tài)轉換圖;2)建立程序工程;3)編寫按鍵去抖進程4)編寫狀態(tài)機進程;5)下載程序,進行驗證。(五)實驗代碼:器件之間的連接圖:核心計數(shù)器件pingpang:entity pingping is Port ( reset : in STD_LOGIC; clk : in STD_LOGIC; hit1 : in STD_LOGIC; hit2 : in STD_LOGIC; sever : in STD_LOGIC_VECTOR (

47、1 downto 0); start : in STD_LOGIC; light : out STD_LOGIC_VECTOR (7 downto 0);end pingping;architecture Behavioral of pingping istype pingpong is(waitserve,light1on,ballmoveto8,allow2hit,light8on,ballmoveto1,allow1hit);signal state:pingpong;signal i:integer range 0 to 9;signal count1,count2:std_logic

48、_vector(1 to 4):="0000"signal count:std_logic_vector(1 to 8);beginmain:process(clk,reset)beginif (reset='1') then i<=0;count1<="0000"count2<="0000"elsif (clk'event and clk='1')then if(count1="0101"or count2="0101")then co

49、unt<=count1&count2; i<=9;-結束時顯示總比分-count1<="0000"count2<="0000" else case state is when waitserve=> -發(fā)球狀態(tài)if (start='1') then case serve iswhen "10"=> i<=1;state<=light1on;when "01"=> i<=8;state<=light8on;when "

50、11"=> i<=0;when others=> i<=0; end case;else count<=count1&count2;i<=9; -暫停時顯示當前比分end if; when light1on=> -第一盞燈亮狀態(tài) i<=2;if hit2='1' then i<=0; count1<=count1+1;state<=waitserve;else state<=ballmoveto8;end if; when light8on=> -第八盞燈亮狀態(tài) i<=7;if

51、 hit1='1' then i<=0; count2<=count2+1;state<=waitserve;else state<=ballmoveto1;end if; when ballmoveto1=> -球向甲方方向移動狀態(tài);if hit1='1' then i<=0; count2<=count2+1;state<=waitserve;elsif i=2 then i<=1; state<=allow1hit;else i<=i-1;end if; when ballmoveto8=&

52、gt; -球向乙方方向移動狀態(tài);if hit2='1'then i<=0; count1<=count1+1;state<=waitserve;elsif i=7 then i<=8; state<=allow2hit;else i<=i+1;end if; when allow1hit=> -允許甲方擊球狀態(tài)if hit1='1' then i<=2; state<=ballmoveto8; else count2<=count2+1;i<=0; state<=waitserve; end

53、 if; when allow2hit=> -允許乙方擊球狀態(tài)if hit2='1' then i<=7; state<=ballmoveto1;else count1<=count1+1;i<=0; state<=waitserve;end if; end case; end if; end if; end process main;led:process(clk)begin if(clk'event and clk='1')thenif(i=1) then light<="10011000"

54、; ;elsif(i=2) then light<="01011000" ;elsif(i=3) then light<="00111000" ;elsif(i=4) then light<="00011000" ;elsif(i=5) then light<="00011000" ;elsif(i=6) then light<="00011100" ;elsif(i=7) then light<="00011010" ;elsif(i=8

55、) then light<="00011001" ;elsif(i=9) then light<=count;elsif(i=0) then light<="00011000" ;else null;end if;end if;end process led;end Behavioral;2.5M分頻器件qwqw:entity qwqw is Port ( clk50m : in STD_LOGIC; clk : out STD_LOGIC);end qwqwarchitecture Behavioral of qwqw isbegin

56、process(clk50m)variable n : INTEGER RANGE 0 to 50000000;beginif (clk50m'event and clk50m='1') thenn:=n+1;if n<=25000000 thenclk<='0'elsif n=50000000 thenn:=0;elseclk<='1'end if;end if;end process;end Behavioral;1HZ分頻器件wwww:entity wwww is Port ( clk50m : in STD_LO

57、GIC; clk1 : out STD_LOGIC);end wwww;architecture Behavioral of wwww isbeginprocess(clk50m)variable n : INTEGER RANGE 0 to 20;beginif (clk50m'event and clk50m='1') thenn:=n+1;if n<=10 thenclk1<='0'elsif n=20 thenn:=0;elseclk1<='1'end if;end if;end process;end Beha

58、vioral;消抖器件xiaoxiao:entity xiaoxiao is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; keyin : in STD_LOGIC; keyout : out STD_LOGIC);end xiaoxiao;architecture Behavioral of xiaoxiao is TYPE states IS (S0,S1,S2,S3,S4,S5); SIGNAL next_state: states;BEGINPROCESS (clk,rst,keyin)variable count:integer:= 1000; beginIF (rst = '1') THEN next_state <= s0; ELSIF (clk'EVENT

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論