VHDL 實 習 報 告 四 資 工 二 指 導 教 授 : 徐 演 政 學 生 : 廖 雅 竹 B9515010 陳 緯 琪 B9515044
敗 LED 史 上 無 敵 超 級 賭 骰 子 模 擬 機 以 廖 雅 竹 陳 緯 琪 Project Title: 骰 硬 件 啟 動 後, 可 以 明 顯 的 觀 察 到 實 驗 板 上 方 的 兩 個 骰 子 器 高 速 地 跳 動 Participants: 的 玩 及 家 目 前 矩 所 陣 欲 則 賭 秀 的 出 點 色 數 彩, 繽 可 紛 以 的 使 跑 用 馬 指 燈 撥 開 七 關 段 決 顯 定 示 器 共 分 為 兩 個 部 份, 左 邊 為 Usage: 數 子 脈 波 的 按 點 鍵 數 合, 可, 以 若 使 任 骰 何 子 骰 器 子 改 尚 變 未 狀 停 態 止, 第 點 一 數 次 隨 以 著 及 骰 第 子 二,LED 8*8 (1 to 12), 高 次 速, 右 跳 分 邊 動 別 則 讓 為 按 兩 目 下 顆 前 右 骰 兩 下 子 個 示 停 YA, 下, 否 七 則 段 顯 示 中 器 文 顯 字 示 總 和,, 最 第 後 三 一 次 次 則 則 讓 機 器 判 定 其 吻 合 與 否, 是 則 矩 陣 方 亂 顯 Reset, 讓 骰 子 器 重 新 啟 動 藉 數 時 此 脈 則 由 器 項 是 時 值 目 抓 脈 為 取 更 亂 本 計 新 作 數 頻 品 器, 率 的 不 使 核 同 用 高 心 位 於, 置 骰 人 利 位 子 類 用 元 器 反 時 應 ;, 脈 時 矩 間 陣 為 控 特 制 點 更 動 以 新 的 及 頻 定 規 七 率 義 律 段 的 由, 顯 方 特 做 示 法 定 一 器 時 個 解 間 時 碼 所 脈 器 抓 計 輸 出 數 入 的 器 計 Techniques: 1. 容 用 彈 脈 易 就 跳 波 被 非 消 按 誤 常 除 鍵 判 重 內 為 要 的 超 鐵 過 片 一, 次 會 以 在 上 按 的 下 動 及 作 放 開, 的 所 瞬 以 間 使, 用 產 此 生 類 不 按 可 鍵 預 時 期, 的 除 跳 頻 動 電 雜 路 訊 的 利, 2. 為 跳 1, 0 以 器 上 為 為 零 我 時 們 所 取 使 值 用 正 消 不 相 除 會 關 雜 於 訊 人 的 類 邏 按 作 輯 按 反 圖 鍵 應 的, 其 速 即 度 可, 達 課 到 本 除 建 頻 如 議 右 約 需 : 求 在 計 時 True Table 這 的 裡 測 感 試 作 驗 品 完 全 完 達 成 到 之 我 日 們 讓 預 大 期 家 感 需 到 求 欣 慰 每 一 有 項 些 所 地 需 方 的 遇 輸 到 入 陌 生 的 輸 出 都 經 過 獨 立,Output 事 謝 實 上 學 長, 我 姊 們 的 仍 大 然 力 需 相 要 助 一 再, 次 接 這 的 再 的 作 厲 作 品 品, 將 才 繼 全 能 續 力 順 摸 投 利 索 入 地 高 此 如 難 類 期 度 硬 完 的 件 成 硬 的 件 設, Techniques, 計 如, 向 高 難 度 在 戰 挑 Clock 的 Review: 本 LCD 以 對 Input 及 Number Pad, 下 為 100Hz(10ms), Clock Input Output 0 X 0 1 0 0 1 1 1 :Buzzer
按 七 鈕 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; 指 段 撥 解 顯 示 ENTITY project is 點 開 碼 矩 關 器 陣 接 賭 接 到 幾 到 硬 點 硬 體 用 體 的 用 PORT( CLK : IN STD_LOGIC; Clock eletronic stream PS : IN STD_LOGIC; SEG : OUT STD_LOGIC_VECTOR(0 TO 7); COM0 : OUT STD_LOGIC_VECTOR(0 DOWNTO 1); LED'com( ) LED1,LED2 : OUT STD_LOGIC_VECTOR(0 TO 6); LED x 2 EDN0 : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); 3x8 ( ) SSW : IN STD_LOGIC_VECTOR(0 TO 11); ROW,CR,CG : OUT STD_LOGIC_VECTOR(1 TO 8) 8x8 LED 時 切 脈 ); 記 切 割 時 脈 用 END project; 消 割 錄 解 跑 按 碼 馬 幾 器 燈 次 內 內 時 的 部 部 脈 暫 暫 存 存 變 變 數 數 ARCHITECTURE a OF project IS SIGNAL QN :STD_LOGIC_VECTOR(26 DOWNTO 0); SIGNAL SET1,SET2 :STD_LOGIC_VECTOR(2 DOWNTO 0); LED 除 彈 跳 用 SIGNAL SET3 :STD_LOGIC_VECTOR(3 DOWNTO 0); 檢 查 點 輸 矩 贏 陣 暫 存 共 內 用 部 時 掃 暫 脈 描 存 掃 變 描 SIGNAL EDN :STD_LOGIC_VECTOR(2 DOWNTO 0); 3x8 ( ) SIGNAL COM :STD_LOGIC_VECTOR(1 DOWNTO 0); LED'com( ) SIGNAL PSS :STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL D0,D1,S,R,Q,NQ,X: STD_LOGIC; SIGNAL ROWW :STD_LOGIC_VECTOR(2 取 樣 除 頻 控 制 存 的 值 DOWNTO 0); 8x8 LED SIGNAL CRR,CGG :STD_LOGIC_VECTOR(1 TO 8); 8x8 LED( SIGNAL CCK :STD_LOGIC_VECTOR(2 DOWNTO 0); 8x8 LED'clo SIGNAL Y :STD_LOGIC; SIGNAL CHK1,CHK2 :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SET4,SET5 :STD_LOGIC_VECTOR(3 DOWNTO 0); SET1 SET2 消 除 彈 跳 用 -CLK PROCESS(CLK) IF CLK'event AND CLK='1'THEN QN <= QN + 1; END IF; END PROCESS; - X <= QN(17); PROCESS(X) IF X'event AND X='1' THEN D0 <= PS; D1 <= D0; END IF; END PROCESS; S <= D0 AND D1; R <= (NOT D0) AND (NOT D1); Q <= R NOR NQ; RSFF NQ<=S NOR Q; PROCESS(Q) IF Q'event AND Q='1' THEN PSS <= PSS+1; END IF; END PROCESS; 數 )
的 控 制 -LED COM0 <= "01" WHEN QN(9)='0' AND PSS=0 ELSE "10"; COM <= "01" WHEN QN(9)='0' AND PSS=0 ELSE "10"; SET1 <= QN(19 DOWNTO 17) WHEN PSS=0 ELSE SET1; SET2 <= QN(19 DOWNTO 17) WHEN PSS=1 OR PSS=0 ELSE SET2; SET3 <= QN(22 DOWNTO 19) WHEN PSS=1 OR PSS=0 ELSE SET3; LED1 <= "1000000" WHEN SET3=0 AND COM="01" ELSE "1100000" WHEN SET3=1 AND COM="01" ELSE "1110000" WHEN SET3=2 AND COM="01" ELSE "1111000" WHEN SET3=3 AND COM="01" ELSE "0111100" WHEN SET3=4 AND COM="01" ELSE "0011110" WHEN SET3=5 AND COM="01" ELSE "0001111" WHEN SET3=6 AND COM="01" ELSE "0000111" WHEN SET3=7 AND COM="01" ELSE "0000011" WHEN SET3=8 AND COM="01" ELSE "0000001" WHEN SET3=9 AND COM="01" ELSE "0000000" WHEN SET3=10 AND COM="01" ELSE "0000000" WHEN SET3=11 AND COM="01" ELSE "0000000" WHEN SET3=12 AND COM="01" ELSE "0000000" WHEN SET3=13 AND COM="01" ELSE "0000000" WHEN SET3=14 AND COM="01" ELSE "0000000" WHEN SET3=15 AND COM="01" ELSE "0001000" WHEN SET1=1 AND COM="10" ELSE "1000001" WHEN SET1=2 AND COM="10" ELSE "1001001" WHEN SET1=3 AND COM="10" ELSE "1010101" WHEN SET1=4 AND COM="10" ELSE "1011101" WHEN SET1=5 AND COM="10" ELSE "1110111" WHEN SET1=6 AND COM="10" ELSE "1110111"; LED2 <= "0000000" WHEN SET3=0 AND COM="01" ELSE "0000000" WHEN SET3=1 AND COM="01" ELSE "0000000" WHEN SET3=2 AND COM="01" ELSE "0000000" WHEN SET3=3 AND COM="01" ELSE "0000000" WHEN SET3=4 AND COM="01" ELSE "0000000" WHEN SET3=5 AND COM="01" ELSE "0000000" WHEN SET3=6 AND COM="01" ELSE "1000000" WHEN SET3=7 AND COM="01" ELSE "1100000" WHEN SET3=8 AND COM="01" ELSE "1110000" WHEN SET3=9 AND COM="01" ELSE "1111000" WHEN SET3=10 AND COM="01" ELSE "0111100" WHEN SET3=11 AND COM="01" ELSE "0011110" WHEN SET3=12 AND COM="01" ELSE "0001111" WHEN SET3=13 AND COM="01" ELSE "0000111" WHEN SET3=14 AND COM="01" ELSE "0000011" WHEN SET3=15 AND COM="01" ELSE "0001000" WHEN SET2=1 AND COM="10" ELSE "1000001" WHEN SET2=2 AND COM="10" ELSE "1001001" WHEN SET2=3 AND COM="10" ELSE "1010101" WHEN SET2=4 AND COM="10" ELSE "1011101" WHEN SET2=5 AND COM="10" ELSE "1110111" WHEN SET2=6 AND COM="10" ELSE "0001000";
七 段 顯 示 器 EDN <= QN(9 DOWNTO 7); EDN0 <= QN(9 DOWNTO 7); SEG <= "11111100" WHEN (SSW="000000000000" OR SSW="000000000100") AND EDN=2 ELSE 0 10 "01100000" WHEN (SSW="100000000000" OR SSW="000000000010") AND EDN=2 ELSE 1 11 "11011010" WHEN (SSW="010000000000" OR SSW="000000000001") 的 十 位 數 以 下 是 骰 子 AND 的 合 EDN=2 ELSE 2 "11110010" WHEN SSW="001000000000" AND EDN=2 ELSE 3 "01100110" WHEN SSW="000100000000" AND EDN=2 ELSE 4 "10110110" WHEN SSW="000010000000" AND EDN=2 ELSE 5 "00111110" WHEN SSW="000001000000" AND EDN=2 ELSE 6 "11100100" WHEN SSW="000000100000" AND EDN=2 ELSE 7 "11111110" WHEN SSW="000000010000" AND EDN=2 ELSE 8 "11100110" WHEN SSW="000000001000" AND EDN=2 ELSE 9 "01100000" WHEN (SSW="000000000100" OR SSW="000000000010" OR SSW="000000000001") AND EDN=1 ELSE 10 11 12 ( ) "11111100" WHEN ((SET1=4 AND SET2=6) OR (SET1=5 AND SET2=5) OR ((SET1=6 OR SET1=0 OR SET1=7) AND SET2=4)) AND EDN=5 ELSE 0 10 "01100000" WHEN (((SET1=6 OR SET1=0 OR SET1=7) AND SET2=5) OR (SET1=5 AND SET2=6)) AND EDN=5 ELSE 1 11 "11011010" WHEN (((SET1=6 OR SET1=0 OR SET1=7) AND SET2=6) OR (SET1=1 AND (SET2=1 OR SET2=0 OR SET2=7))) AND EDN=5 ELSE 2 "11110010" WHEN ((SET1=1 AND SET2=2) OR (SET1=2 AND (SET2=1 OR SET2=0 OR SET2=7))) AND EDN=5 ELSE 3 "01100110" WHEN ((SET1=1 AND SET2=3) OR (SET1=2 AND SET2=2) OR (SET1=3 AND (SET2=1 OR SET2=0 OR SET2=7)) )AND EDN=5 ELSE 4 "10110110" WHEN ((SET1=1 AND SET2=4) OR (SET1=2 AND SET2=3) OR (SET1=3 AND SET2=2) OR (SET1=4 AND (SET2=1 OR SET2=0 OR SET2=7)) )AND EDN=5 ELSE 5 "00111110" WHEN ((SET1=1 AND SET2=5) OR (SET1=2 AND SET2=4) OR (SET1=3 AND SET2=3) OR (SET1=4 AND SET2=2) OR (SET1=5 AND (SET2=1 OR SET2=0 OR SET2=7)) )AND EDN=5 ELSE 6 "11100100" WHEN ((SET1=2 AND SET2=5) OR (SET1=3 AND SET2=4) OR (SET1=4 AND SET2=3) OR(SET1=5 AND SET2=2) OR ((SET1=6 OR SET1=0 OR SET1=7) AND (SET2=1 OR SET2=0 OR SET2=7)) OR (SET1=1 AND SET2=6) ) AND EDN=5 ELSE 7 "11111110" WHEN ((SET1=2 AND SET2=6) OR (SET1=3 AND SET2=5) OR (SET1=4 AND SET2=4) OR (SET1=5 AND SET2=3) OR ((SET1=6 OR SET1=0 OR SET1=7) AND SET2=2) )AND EDN=5 ELSE 8 的 十 位 數 "11100110" WHEN ((SET1=3 AND SET2=6) OR (SET1=4 AND SET2=5) OR (SET1=5 AND SET2=4) OR ((SET1=6 OR SET1=0 OR SET1=7) AND SET2=3)) AND EDN=5 ELSE 9 "01100000" WHEN ((SET1=4 AND SET2=6) OR (SET1=5 AND SET2=5) OR ((SET1=6 OR SET1=0 OR SET1=7) AND SET2=4) OR (SET1=5 AND SET2=6) OR ((SET1=6 OR SET1=0 OR SET1=7) AND SET2=5) OR ((SET1=6 OR SET1=0 OR SET1=7) AND SET2=6) )AND EDN=4 ELSE 10 11 12 "00000000";
矩 陣 8x8 ROWW <= QN(9 DOWNTO 7); CCK <= QN(22 DOWNTO 20); SET4 <= "0110" WHEN (SET1>6 OR SET1=0) AND PSS=3 ELSE SET1; SET5 <= "0001" WHEN (SET2>6 OR SET2=0) AND PSS=3 ELSE SET2; CHK1 <= SET4 + SET5 WHEN PSS=3; CHK2 <= "0000" WHEN SSW="000000000000" ELSE "0001" WHEN SSW="100000000000" ELSE "0010" WHEN SSW="010000000000" ELSE "0011" WHEN SSW="001000000000" ELSE "0100" WHEN SSW="000100000000" ELSE "0101" WHEN SSW="000010000000" ELSE "0110" WHEN SSW="000001000000" ELSE "0111" WHEN SSW="000000100000" ELSE "1000" WHEN SSW="000000010000" ELSE "1001" WHEN SSW="000000001000" ELSE "1010" WHEN SSW="000000000100" ELSE "1011" WHEN SSW="000000000010" ELSE "1100" WHEN SSW="000000000001" ELSE "1111"; ROW <= CR <= "10000000" WHEN ROWW=0 ELSE "01000000" WHEN ROWW=1 ELSE "00100000" WHEN ROWW=2 ELSE "00010000" WHEN ROWW=3 ELSE "00001000" WHEN ROWW=4 ELSE "00000100" WHEN ROWW=5 ELSE "00000010" WHEN ROWW=6 ELSE "00000001" WHEN ROWW=7; "10110110" WHEN CCK=0 AND PSS=0 ELSE "01011011" WHEN CCK=1 AND PSS=0 ELSE "10101101" WHEN CCK=2 AND PSS=0 ELSE "11010110" WHEN CCK=3 AND PSS=0 ELSE "01101011" WHEN CCK=4 AND PSS=0 ELSE "10110101" WHEN CCK=5 AND PSS=0 ELSE "11011010" WHEN CCK=6 AND PSS=0 ELSE "01101101" WHEN CCK=7 AND PSS=0 ELSE "10110110" WHEN CCK=7 AND PSS=1 ELSE "01011011" WHEN CCK=6 AND PSS=1 ELSE "10101101" WHEN CCK=5 AND PSS=1 ELSE "11010110" WHEN CCK=4 AND PSS=1 ELSE "01101011" WHEN CCK=3 AND PSS=1 ELSE "10110101" WHEN CCK=2 AND PSS=1 ELSE "11011010" WHEN CCK=1 AND PSS=1 ELSE "01101101" WHEN CCK=0 AND PSS=1 ELSE "10110110" WHEN PSS=2 ELSE "11111000" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=0 AND (QN(22 DOWNTO 21)="00" "10111111" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=1 AND (QN(22 DOWNTO 21)="00" "11011101" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=2 AND (QN(22 DOWNTO 21)="00" "10111101" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=3 AND (QN(22 DOWNTO 21)="00" "11010101" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=4 AND (QN(22 DOWNTO 21)="00" "11110110" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=5 AND (QN(22 DOWNTO 21)="00" "01100110" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=6 AND (QN(22 DOWNTO 21)="00" "10011011" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=7 AND (QN(22 DOWNTO 21)="00" "00000000" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=0 AND (QN(22 DOWNTO 21)="00" "10010110" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=1 AND (QN(22 DOWNTO 21)="00"
"10011001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=2 AND (QN(22 DOWNTO 21)="00" "01101001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=3 AND (QN(22 DOWNTO 21)="00" "01101001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=4 AND (QN(22 DOWNTO 21)="00" "01101111" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=5 AND (QN(22 DOWNTO 21)="00" "01101001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=6 AND (QN(22 DOWNTO 21)="00" "01101001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=7 AND (QN(22 DOWNTO 21)="00" OR QN(22 DOWNTO 21)="01") ; CG <= "01101101" WHEN CCK=0 AND PSS=0 ELSE "10110110" WHEN CCK=1 AND PSS=0 ELSE "01011011" WHEN CCK=2 AND PSS=0 ELSE "10101101" WHEN CCK=3 AND PSS=0 ELSE "11010110" WHEN CCK=4 AND PSS=0 ELSE "01101011" WHEN CCK=5 AND PSS=0 ELSE "10110101" WHEN CCK=6 AND PSS=0 ELSE "11011010" WHEN CCK=7 AND PSS=0 ELSE "01101101" WHEN CCK=7 AND PSS=1 ELSE "10110110" WHEN CCK=6 AND PSS=1 ELSE "01011011" WHEN CCK=5 AND PSS=1 ELSE "10101101" WHEN CCK=4 AND PSS=1 ELSE "11010110" WHEN CCK=3 AND PSS=1 ELSE "01101011" WHEN CCK=2 AND PSS=1 ELSE "10110101" WHEN CCK=1 AND PSS=1 ELSE "11011010" WHEN CCK=0 AND PSS=1 ELSE "01101101" WHEN PSS=2 ELSE "11111000" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=0 AND (QN(22 DOWNTO 21)="10" "10111111" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=1 AND (QN(22 DOWNTO 21)="10" "11011101" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=2 AND (QN(22 DOWNTO 21)="10" "10111101" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=3 AND (QN(22 DOWNTO 21)="10" "11010101" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=4 AND (QN(22 DOWNTO 21)="10" "11110110" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=5 AND (QN(22 DOWNTO 21)="10" "01100110" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=6 AND (QN(22 DOWNTO 21)="10" "10011011" WHEN CHK1 /= CHK2 AND PSS=3 AND ROWW=7 AND (QN(22 DOWNTO 21)="10" "00000000" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=0 AND (QN(22 DOWNTO 21)="10" "10010110" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=1 AND (QN(22 DOWNTO 21)="10" "10011001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=2 AND (QN(22 DOWNTO 21)="10" "01101001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=3 AND (QN(22 DOWNTO 21)="10" "01101001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=4 AND (QN(22 DOWNTO 21)="10" "01101111" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=5 AND (QN(22 DOWNTO 21)="10" "01101001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=6 AND (QN(22 DOWNTO 21)="10" "01101001" WHEN CHK1 = CHK2 AND PSS=3 AND ROWW=7 AND (QN(22 DOWNTO 21)="10" OR QN(22 DOWNTO 21)="01") ; END a;