Transcript Lab8
Programmable Logic System Design Lab08 - Reaction Timer SOC LAB. Che-Yuan Sung 2013.12 LAB Description 此實驗中我們將測量人的反應時間,由於人的 反應時間遠大於內建CLOCK的週期,因此要對 CLOCK做除頻的動作方可適用,並方便於計數 器的計算與七段顯示器的呈現。 實驗內容為當看到LED亮起時,立即做出反應 將計數器停下,並顯示當時計數器之時間,計 數器以兩位數BCD counter來實現並將結果顯 示於七段顯示器上。 Assignment 注意:FPGA板上的按鈕是平常為0,按下為1,與圖示相反 (掃描多顆七段也需要除頻) clk (內部要除頻) Assignment 基本題:撰寫 VHDL 並燒進 FPGA 完成上述電路功能 ,並Demo給助教看 (60%) 加分題:使用 ModelSim 測試整個電路的邏輯,並 Demo 給助教看。模擬人按下按鈕的時間可以自己隨 意設定,助教只會看整體邏輯反應是否正常 (40%) ModelSim 的有無會反應在結報分數上,若時間來不 及仍可選擇只用板子 Demo 基本題。 Practice 1:The 7-segment code converter architecture Behavioral of sevenseg is begin aout<="00000011" when ain ="0000" ELSE "10011111" when ain ="0001" ELSE "00100101" when ain ="0010" ELSE "00001101" when ain ="0011" ELSE "10011001" when ain ="0100" ELSE "01001001" when ain ="0101" ELSE "01000001" when ain ="0110" ELSE "00011111" when ain ="0111" ELSE "00000001" when ain ="1000" ELSE "00011001" when ain ="1001" ELSE "11111111"; end Behavioral; Practice 2: The BCD counter entity BCDcount is PORT( clock, clear,E:in STD_LOGIC; BCD1,BCD0:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); end BCDcount; architecture Behavioral of BCDcount is begin process(clock) begin IF Clock'EVENT AND Clock = '1' THEN IF Clear = '1' THEN BCD1 <= "0000" ; BCD0 <= "0000" ; ELSIF E = '1' THEN IF BCD0 = "1001" THEN BCD0 <= "0000" ; IF BCD1 = "1001" THEN BCD1 <= "0000"; ELSE BCD1 <= BCD1 + '1' ; END IF ; ELSE BCD0 <= BCD0 + '1' ; END IF ; END IF ; END IF; END PROCESS; end Behavioral; Practice 3: Clock Divider signal clk:STD_LOGIC_VECTOR(20 DOWNTO 0); signal hhh:STD_LOGIC; process(stop) begin if stop='1' then hhh<='0'; else hhh<=clk(20); end if; end process; PROCESS(Clock) BEGIN IF Clock'EVENT AND Clock='1' THEN clk <= clk + '1'; END IF; END PROCESS; Practice 4:Scan code in Reaction Timer 為了節省接腳的個數,實驗版將四組七段的輸入信號共用接腳, 因此我們必須以分時的方法來顯示timer的兩個位數,並透過信號 (AN0~AN3)來選擇控制的七段顯示器,如果我們要同時顯示兩個 以上的數字,就必須使用分時的技巧。 所謂的分時的技巧是指將時間平均分配至每個待顯示的顯示器, 利用視覺暫留與放電延遲的原理產生同時顯示的效果,所以我們 可以利用一個超過人眼視覺暫留的頻率,來切換位數的顯示。 下面的程式片段是以scanclk作為掃描訊號,切換個位數與十位數 ,drive0、drive1是分別驅動兩組七段顯示的驅動訊號,outbcd 是給七段顯示器的輸入訊號。 Practice 4:Scan code in Reaction Timer PROCESS(scanclk) begin if scanclk='0' then drive0<= '0'; drive1<='0'; outbcd<=bcd0; else drive0<='0'; drive1<='1'; outbcd<=bcd1; end if; end process; 附錄:對應腳位圖 附錄:對應腳位圖 附錄:七段顯示器編號