北郵數電綜合實驗報告迷宮

2021-04-20 15:27:08 字數 4997 閱讀 5632

班級:學號:班內序號:

姓名:2014/11/7

目錄設計課題 3

系統設計 4

設計思路 4

總體框圖 4

分塊介紹 7

**波形 9

源程式 11

功能說明 29

資源利用情況 29

故障及問題分析 30

總結和結論 30

簡易迷宮設計

設計並實現乙個簡易迷宮遊戲機。

基本要求:

1、用 8×8 點陣進行遊戲顯示。

2、迷宮遊戲如圖 1 所示,採用雙色點陣顯示,其中紅色led 為迷宮牆壁,綠色led

表示人物。通過btn0~btn3 四個按鍵控制迷宮中的人物進行上下左右移動,使人

物從起始點出發,走到迷宮的出口,遊戲結束。

3、普通計時模式:通過按鍵btn7 啟動遊戲,必須在30 秒內找到出口,否則遊戲失敗,

用兩個數碼管進行倒計時顯示。遊戲勝利或者失敗均要在8×8 點陣上有相應的畫面

出現。4、迷宮中的人物在行走過程中,如果碰到牆壁,保持原地不動。

提高要求:

1、多種迷宮地圖可以選擇。

2、在計時的基礎上增加計步的功能,每按一次控制按鍵步數加1,碰壁不計算步數,

計步結果用數碼管顯示。

3、為遊戲增加提示**,在不同時間段採用不同頻率的訊號控制蜂鳴器發聲報警。

4、增加其他遊戲模式。

5、自擬其它功能。

§1.設計思路

程式採用分模組設計的思路,將具體任務分解成為不同的功能模組,利用component編寫,再通過主程式通過port map語句呼叫連線。主程式中包括各個子元件的定義及連線語句,子程式分別為分頻器模組、防抖模組、點陣顯示模組、迷宮人物座標控制模組、倒計時控制模組、數碼管選擇模組和數碼管顯示模組。

§2.總體框圖

(1)頂層框圖

(2)對外介面

clk_in

start

reset

round

(3)邏輯劃分框圖

seg7

catrowred,green sech,secl count

out_state

clk_out1(點陣掃瞄)

start clk_out3(1hz)

reset k_l,r,u,dclk_out2(控制)

clk_out4(200hzclk_in

(4)asm圖 reset=1

stuck=0 and

m_l/r/u/d=1

start=1/reset=1

win=1

reset=1

stuck=0 and

m_l/r/u/d=1 stuck=1

stuck=1 or time_up=1

m_l/r/u/d=0

reset=1

time_up=1

stuck=1/

m_l/r/u/d=0

reset=1

(5)控制器邏輯流程圖

nyyynnynyn y

nyn n

n n

y y

§3.分塊介紹

(1)分頻器

component fenpin --divide the frequency to the wanted

port(clk_in:in std_logic;

clk_out1:out std_logic;

clk_out2:out std_logic;

clk_out3:out std_logic;

clk_out4:out std_logic);

end component;

輸入時鐘為50mhz,通過分頻輸出10khz(用於點陣掃瞄),10hz(用於點陣控制),1hz(用來計數),200hz(用於防抖設計)。

(2)迷宮控制器

component control --logically control the labyrinthine

port(round:in std_logic;

clk_1:in std_logic;

p_rst:in std_logic;

p_start:in std_logic;

m_left,m_right,m_up,m_down:in std_logic;

out_state:out std_logic;

out_y_g:out std_logic_vector(3 downto 0);

out_x_g:out std_logic_vector(3 downto 0));

end component;

通過按鍵輸入的高低電平來控制迷宮點陣。

當選關撥碼開關為低電平時,執行迷宮地圖1,復位按鍵重置初始座標,當各個方向按鍵為高電平時,判斷那些座標的下一位置是牆壁,通過if語句是座標點位於當前位置不移動,反之則向規定方向移動一步。當座標位於出口時,勝利輸出狀態為1。

當選關撥碼開關為高電平時,執行迷宮地圖2,其他基本同上。

(3)點陣顯示控制器

component show_control --control the sweep of rectangle

port(

clk_2:in std_logic;

s_start:in std_logic;

round:in std_logic;

s_reset:in std_logic;

time_up:in std_logic;

win:in std_logic;

x_g:in std_logic_vector(3 downto 0);

y_g:in std_logic_vector(3 downto 0);

row:out std_logic_vector(7 downto 0);

red:out std_logic_vector(7 downto 0);

green:out std_logic_vector(7 downto 0));

end component;

當開始撥碼開關為低電平時,點陣顯示遊戲初始介面go;為高電平時,根據選關開關狀態,顯示迷宮1或2。

當time_up=1時,遊戲失敗,顯示破碎的心;當time_up=0時,遊戲正常進行。(由計時器提供)

當狀態win=1時,顯示完整的心;當win=0時,遊戲正常進行。(由迷宮控制器提供)

為保證點陣亮度一致,選擇行掃瞄,通過向量row中某路選通(即電平為1),顯示該行點陣,並由高頻時鐘訊號掃瞄,產生視覺停留效果,得到點陣顯示。

(4)計時器

component led_control --control the countdown

port(res:in std_logic;

start:in std_logic;

win:in std_logic;

clk_in:in std_logic;

state_out:out std_logic;

sec_outl:out std_logic_vector(3 downto 0);

sec_outh:out std_logic_vector(3 downto 0));

end component;

由乙個從0到30的變數計數,初始值為30,每當遇到1hz的時鐘上公升沿時,計數器減一,直到計數器減為0,使失敗狀態為1,或到輸入勝利狀態為1,停止計時。

由sec_outl,sec_outh將時間的高低位分開,以便與分別控制兩個數碼管,顯示倒計時。

(5)數碼管選擇器

component led_select --select data in digital blinking

port(sech,secl:in std_logic_vector(3 downto 0);

clk_select:in std_logic;

q:out std_logic_vector(5 downto 0);

dataout:out std_logic_vector(3 downto 0));

end component;

30s計時的高低位分別對應不同的cat管腳,使相鄰的兩個數碼管顯示對應數字,並將計數值提供給數碼管顯示器。

(6)數碼管控制器

component led --segment decoder

port(count:in std_logic_vector(3 downto 0);

seg7:out std_logic_vector(6 downto 0));

end component;

不同的計數值對應不同數碼管管腳的高低電平,是數碼管顯示正確的數字。

(7)防抖

component shake_prv is --shake prevention

port(

clk : in std_logic;

btn_in : in std_logic;

btn_out : out std_logic

);end component;

通過低頻時鐘訊號(200hz)將判斷按鍵按下的時間延長以達到防抖的效果。

**波形

開始介面(go)start=1,依次行掃瞄row,點陣紅色顯示go。

失敗介面(破碎的心)time_up=1,依次行掃瞄row,點陣紅色顯示broken heart。

成功介面(完整的心)win=1,依次行掃瞄row,點陣紅色顯示heart。

行走受阻:下行遇障,stuck為高電平。

源**主程式:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity moon_maze is

port(clk_in:in std_logic;

start:in std_logic;

reset:in std_logic;

round:in std_logic;

北郵數電綜合實驗報告

目錄任務要求 3 系統設計 4 設計思路 4 設計框圖 4 分塊介紹 6 波形 6 vhdl源程式 10 功能說明 25 元器件清單 25 故障及問題分析 26 實驗總結 26 題目六 點陣賽車遊戲 基本要求 1 用8 8點陣進行5秒倒計時顯示,如下圖所示。2 當5秒倒計時結束後,點陣顯示下圖所示的...

北郵模電綜合實驗報告修復的

電子電路綜合實驗設計 實驗名稱 階梯波發生器的設計與實現 學院 班級 學號 姓名 班內序號 實驗6 階梯波發生器的設計與實現 一.摘要 階梯波是一種特殊波形,在一些電子裝置及儀表中用處極大。本實驗電路是由窄脈衝 鋸齒波發生器構成。通過將運算放大器的幾個典型電路 方波發生器 積分器和遲滯電壓比較器,加...

北郵通訊原理實驗報告

北京郵電大學 學院 資訊與通訊工程學院 班級 姓名 姓名 1 了解dsb sc am訊號的產生以及相干解調的原理和實現方法。2 了解dsb sc am訊號波形以及振幅頻譜特點,並掌握其測量方法。3 了解在傳送dsb sc am訊號加導頻分量的條件下,收端用鎖相環提取載波的原理及其實現方法。4 掌握鎖...