1.07k likes | 1.62k Views
序向邏輯電路與狀態機設計. VHDL 數位電路實習與專題設計 文魁資訊 -UE301. 內容大綱. 3-1 順序性敘述的使用 3-2 狀態機電路設計 2-3 VHDL 的指定敘述與基本語法 單元4:算術邏輯( ALU) 運算單元實習 單元5:除頻器與計數器實習 單元6:多工掃描式七段顯示器實習. 3-1順序性敘述的使用. If ( 條件1) Then -- 若(條件1)情況發生時,則執行… 指令敘述; Elsif ( 條件2) Then -- 否則若是(條件2)情況發生時,則執行… 指令敘述; : Else -- 否則則執行…..
E N D
序向邏輯電路與狀態機設計 VHDL數位電路實習與專題設計 文魁資訊-UE301
內容大綱 • 3-1 順序性敘述的使用 • 3-2 狀態機電路設計 2-3 VHDL的指定敘述與基本語法 • 單元4:算術邏輯(ALU)運算單元實習 • 單元5:除頻器與計數器實習 • 單元6:多工掃描式七段顯示器實習 VHDL數位電路實習與專題設計
3-1順序性敘述的使用 VHDL數位電路實習與專題設計
If (條件1) Then--若(條件1)情況發生時,則執行… 指令敘述; Elsif (條件2) Then--否則若是(條件2)情況發生時,則執行… 指令敘述; : Else--否則則執行….. 指令敘述; End If;--宣告結束 3-1-1 If-Then-Else敘述 順序性敘述指令必須要放在PROCESS程式主體內使用,關於If-Then-Else敘述的語法如下: VHDL數位電路實習與專題設計
CLK D Q(t+1) 0 X Q(t) 1 X Q(t) ↑ 1 1 ↑ 0 0 event clk 3-1-1 If-Then-Else敘述 • D型正反器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_v is PORT( CLK,D : IN STD_LOGIC; Q : OUT STD_LOGIC ); END dff_v; ARCHITECTURE a OF dff_v IS BEGIN PROCESS (CLK) BEGIN IF CLK'event AND CLK='1' THEN Q <= D; END IF; ENDPROCESS; END a; VHDL數位電路實習與專題設計
3-1-2 計數器與除頻電路 • 計數器設計 • 上數計數器:計數值會隨著時脈訊號(正緣或負緣觸發)的發生而自動加‘1’ • 下數計數器:在每次的觸發時計數值減一 PROCESS (CLK) BEGIN IF CLK'event AND CLK='1' THEN QN <= QN+1; --計數值加一 END IF; END PROCESS; PROCESS (CLK) BEGIN IF CLK'event AND CLK='1' THEN QN <= QN-1; --計數值減一 END IF; END PROCESS; VHDL數位電路實習與專題設計
3-1-2 計數器與除頻電路 • 上下數計數器:將上數和下數的功能合併,再使用一個控制訊號DIR來決定其上下數的動作 12 BEGIN 13 PROCESS (CLK) 14 BEGIN 15 IF CLK'event AND CLK='1' THEN 16 IF DIR='0' THEN QN <= QN+1; 17 ELSE QN <= QN-1; 18 END IF; 19 END IF; 20 END PROCESS; 21 22 Q<=QN; 23 END a; 1 LIBRARY IEEE; 2 USE IEEE.STD_LOGIC_1164.ALL; 3 USE IEEE.STD_LOGIC_UNSIGNED.ALL; 4 5 ENTITY UD_COUNTER is 6 PORT( CLK,DIR: IN STD_LOGIC; 7 Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); 8 END UD_COUNTER; 9 10 ARCHITECTURE a OF UD_COUNTER IS 11 SIGNAL QN : STD_LOGIC_VECTOR(3 DOWNTO 0); VHDL數位電路實習與專題設計
1.8432x106 Counter value( 1.8432x106/2) Counter value(1.8432x106/2) PULSE 3-1-2 計數器與除頻電路 • 輸出為對稱方波形狀的除頻器設計 在FPT-3實驗板上的石英振盪器之振盪頻率是1.8432MHz(一秒振盪1.8432x106次),如果我們想要設計一個1/(1.8432x106)的除頻電路來得到輸出波形為對稱方波的1Hz輸出頻率時,我們可以宣告一個數值為振盪頻率值一半的整數(即(1.8432x106)/2),每當該數值數完一次時就令其對應的輸出訊號波形發生轉態,那麼當計數完振盪頻率的數值時輸出訊號恰完成一個週期的正反變化,如此一來我們便能輕易地得到1Hz的方波訊號了。 VHDL數位電路實習與專題設計
3-1-2 計數器與除頻電路 1 library ieee; 2 use ieee.std_logic_1164.all; 3 use ieee.std_logic_unsigned.all; 4 5 ENTITY slowCLK18432 IS 6 PORT ( clockIN : IN std_logic ; 7 clockOUT : OUT std_logic); 8 END SLOWCLK18432; 9 10 ARCHITECTURE behavioral OF slowCLK18432 IS 11 SIGNAL PULSE : std_logic := '0'; 12 BEGIN 13 PROCESS (clockIN) 14 VARIABLE Counter : INTEGER RANGE 0 TO 1843200/2 := 1843200/2; • 輸出為對稱方波形狀的除頻器設計(續) VHDL數位電路實習與專題設計
3-1-2 計數器與除頻電路 • 輸出為對稱方波形狀的除頻器設計(續) 15 BEGIN 16 IF (clockIN'EVENT AND clockIN='1') THEN 17 Counter := Counter - 1; 18 IF (Counter = 0) THEN 19 IF PULSE = '1' THEN 20 PULSE <= '0'; 21 ELSE PULSE <= '1'; 22 END IF; 23 Counter := 1843200/2; 24 END IF; 25 END IF; 26 END PROCESS; 27 clockOUT <= PULSE; 28 END behavioral; VHDL數位電路實習與專題設計
3-1-3 case-when敘述 • Case-when指令本身是敘述組合邏輯的,但它卻必須在Process指令中執行,因此它是序向邏輯指令之一 ,其語法如下 Case 選擇訊號IS When 選擇訊號1 => 敘述命令1; When 選擇訊號2 => 敘述命令2; : When Others => 敘述命令N; End Case; VHDL數位電路實習與專題設計
C S1 S0 Operation 0 0 0 F<=A; 0 0 1 F<=A and B; 0 1 0 F<=A or B; 0 1 1 F<=Not A; 1 0 0 F<=A+B; 1 0 1 F<=A-B; 1 1 0 F<=A+1; 1 1 1 F<=A-1; 3-1-3 case-when敘述 • ALU功能電路 library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.std_logic_unsigned.all; ENTITY alu IS PORT ( C : in std_logic; S : IN STD_LOGIC_VECTOR(1 downto 0); A,B : IN STD_LOGIC_VECTOR(7 downto 0); F : OUT STD_LOGIC_VECTOR(7 downto 0) ); END alu; VHDL數位電路實習與專題設計
3-1-3 case-when敘述 • ALU功能電路(續) ARCHITECTURE a OF alu IS BEGIN process(s,A,B) Begin IF C='0' then--當C=’0’時執行邏輯運算 Case s IS When "00"=> F<=A; When "01"=> F<=A and B; --AND邏輯運算 When "10"=> F<=A or B; --OR 邏輯運算 Whenothers=> F<=Not A; --NOT邏輯運算 ENDcase; ELSE--當C=’1’時執行算術運算 Case s IS When "00"=> F<=A+B; --加法運算 When "01"=> F<=A-B; --減法運算 When "10"=> F<=A+1; --遞增1 Whenothers=> F<=A-1; --遞減1 End case; end if; End Process; END a; VHDL數位電路實習與專題設計
FOR I IN開始值 to 結束值 LOOP--以遞增的方式從開始值執行到結束值為止 命令敘述 End Loop; 3-1-4 For-Loop敘述 • FOR-LOOP敘述 VHDL語言使用For-Loop敘述來描述重複性的電路動作,其語法如下: VHDL數位電路實習與專題設計
3-1-4 For-Loop敘述 • 四位元移位暫存器 architecture a of shift4 is signal temp : std_logic_vector(3 downto 0); begin process(clk) begin IF clk'event and clk='1' then temp(3)<=data; For I IN 1 to 3 LOOP temp(3-I)<=temp(4-I); END LOOP; END IF; end process ; Q<=temp; end a; Library IEEE; use IEEE.std_logic_1164.all; entity shift4 IS port( data,clk :in std_logic; Q :out std_logic_vector(3 downto 0)); end shift4; VHDL數位電路實習與專題設計
3-2 狀態機電路設計 VHDL數位電路實習與專題設計
現態 次態 X=0 X=1 輸出 S0 S0 S1 1 S1 S3 S2 0 S2 S2 S3 1 S3 S3 S0 0 3-2-1 Moore狀態機 Moore狀態機的輸出與狀態有關,與輸入無關。 Moore狀態機對應之真值表 VHDL數位電路實習與專題設計
3-2-1 Moore狀態機 ARCHITECTURE a OF moore IS TYPE State IS (s0,s1,s2,s3); SIGNAL present_state : State; SIGNAL next_state: State; BEGIN state_comp: PROCESS(present_state) BEGIN CASE present_stateIS WHENs0 => IF X = '0' THEN next_state <= s0; ELSE next_state <= s1; END IF; OP <= '1'; WHENs1 => IF X = '0' THEN next_state <= s3; ELSE next_state <= s2; END IF; OP <= '0'; WHEN s2 => IF X = '0' THEN next_state <= s2; ELSE next_state <= s3; END IF; OP <= '1'; WHEN s3 => IF X = '0' THEN next_state <= s3; ELSE next_state <= s0; ENDIF; OP <= '0'; END CASE; END PROCESS state_comp; state_clocking: PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN present_state <= next_state; END IF; END PROCESS state_clocking; END a; VHDL數位電路實習與專題設計
現態 次態 輸出 X=0 X=1 X=0 X=1 S0 S0 S1 0 1 S1 S3 S2 1 1 S2 S2 S3 0 1 S3 S3 S0 0 0 3-2-2 Mealy狀態機 Mealy狀態機的輸出與輸入和狀態均有關。 VHDL數位電路實習與專題設計
3-2-2 Mealy狀態機 ARCHITECTURE a OF mealy IS TYPE State IS (s0,s1,s2,s3); SIGNAL present_state : State; SIGNAL next_state: State; BEGIN state_comp: PROCESS(present_state) BEGIN CASE present_state IS WHEN s0 => IF X = '0' THEN next_state <= s0; ELSE next_state <= s1; END IF; IF X = '0' THEN op <= '0'; ELSE op <= '1'; END IF; WHEN s1 => IF X = '0' THEN next_state <= s3; ELSE next_state <= s2; END IF; IF X = '0' THEN op <= '1'; ELSE op <= '1'; END IF; WHEN s2 => IF X = '0' THEN next_state <= s2; ELSE next_state <= s3; END IF; IF X = '0' THEN op <= '0'; ELSE op <= '1'; END IF; VHDL數位電路實習與專題設計
3-2-2 Mealy狀態機 WHEN s3 => IF X = '0' THEN next_state <= s3; ELSE next_state <= s0; END IF; IF X = '0' THEN op <= '0'; ELSE op <= '0'; END IF; END CASE; ENDPROCESS state_comp; state_clocking: PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN present_state <= next_state; END IF; END PROCESS state_clocking; END a; VHDL數位電路實習與專題設計
單元4:算術邏輯(ALU)運算 單元實習 VHDL數位電路實習與專題設計
M S1 S0 Operation 0 0 0 F<=A; 0 0 1 F<=A and B; 0 1 0 F<=A or B; 0 1 1 F<=Not A; 1 0 0 F<=A+B; 1 0 1 F<=A-B; 1 1 0 F<=A+1; 1 1 1 F<=A-1; 單元4:算術邏輯(ALU)運算單元實習 • 相關知識 VHDL數位電路實習與專題設計
單元4:算術邏輯(ALU)運算單元實習 • 實驗電路圖 VHDL數位電路實習與專題設計
單元4:算術邏輯(ALU)運算單元實習 22 IF M='0' then 23 Case s IS 24 When "00"=> 25 F<=A; 26 When "01"=> 27 F<=A and B; 28 When "10"=> 29 F<=A or B; 30 When others=> 31 F<=Not A; 32 END case; • 程式與說明 7 library IEEE; 8 use IEEE.STD_LOGIC_1164.all; 9 use IEEE.std_logic_unsigned.all; 10 11 ENTITY alu IS 12 PORT ( M : in std_logic; 13 s : IN STD_LOGIC_VECTOR(1 downto 0); 14 A,B:IN STD_LOGIC_VECTOR(2 downto 0); 15 F :OUT STD_LOGIC_VECTOR(2 downto 0) ); 16 END alu; 17 18 ARCHITECTURE a OF alu IS 19 BEGIN 20 process(s,A,B) 21 Begin 33 ELSE 34 Case s IS 35 When "00"=> 36 F<=A+B; 37 When "01"=> 38 F<=A-B; 39 When "10"=> 40 F<=A+1; 41 When others=> 42 F<=A-1; 43 End case; 44 end if; 45 End Process; 46 END a; VHDL數位電路實習與專題設計
輸入 腳位 輸出 腳位 M 37(SW1) F(2) 4(LED1) S(1) 29(DIP1) F(1) 5(LED2) S(0) 31(DIP2) F(0) 6(LED3) A(2) 33(DIP3) F2~F0 M A(1) 34(DIP4) A(0) 36(DIP5) B(2) 1(DIP6) B(1) 44(DIP7) B(0) 2(DIP8) A2~A0 S1~S0 B2~B0 單元4:算術邏輯(ALU)運算單元實習 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子FPT-3實驗板 VHDL數位電路實習與專題設計
單元4:算術邏輯(ALU)運算單元實習 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子LP-2900實驗板(實驗電路圖) VHDL數位電路實習與專題設計
輸入 腳位 輸出 腳位 A(2) 49(SW3) F(2) 18(L10) A(1) 51(SW4) F(1) 19(L11) A(0) 59(SW5) F(0) 20(L12) B(2) 60(SW6) LED_COM 141 B(1) 62(SW7) B(0) 63(SW8) M 64(SW9) S(1) 65(SW10) S(0) 67(SW11) 單元4:算術邏輯(ALU)運算單元實習 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子LP-2900實驗板 (續) VHDL數位電路實習與專題設計
單元4:算術邏輯(ALU)運算單元實習 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子LP-2900實驗板 (續) VHDL數位電路實習與專題設計
單元5:除頻器與計數器實習 VHDL數位電路實習與專題設計
1.8432x106 divisor(230400) divisor(230400) divisor/2 divisor/2 CN2 單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 • 相關知識 • 將1843200Hz除頻得到8Hz頻率輸出 • 以自由計數器得到4Hz、2Hz和1Hz的信號頻率 VHDL數位電路實習與專題設計
單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 • 實驗電路圖 VHDL數位電路實習與專題設計
單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 • 程式與說明 7 library ieee; 8 use ieee.std_logic_1164.all; 9 use ieee.std_logic_unsigned.all; 10 use ieee.std_logic_arith.all; 11 12 entity clk_div is 13 generic(divisor:integer:=230400); 14 port( 15 clk_in : in std_logic; 16 clk_out8Hz: buffer std_logic; 17 clk_out4Hz: buffer std_logic; 18 clk_out2Hz: buffer std_logic; 19 clk_out1Hz: buffer std_logic 20 ); 21 end clk_div; 22 23 architecture arch of clk_div is 24 signal cnt2 : std_logic; 25 begin 26 ---------- clk divider ---------- 27 process(clk_in) 28 variable cnt1,divisor2 : integer range 0 to divisor; 29 begin 30 divisor2:=divisor/2; 31 ----- up counter ----- 32 if (clk_in'event and clk_in='1') then 33 if cnt1 = divisor then 34 cnt1 := 1; 35 else 36 cnt1 := cnt1 + 1; 37 end if; 38 end if; VHDL數位電路實習與專題設計
單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 • 程式與說明(續) 39 ----- clk_out register clk generator ----- 40 if (clk_in'event and clk_in='1') then 41 if (( cnt1 = divisor2) or (cnt1 = divisor))then 42 cnt2 <= not cnt2 ; 43 end if; 44 end if; 45 clk_out8Hz <= cnt2 ; 46 end process; 47 48 process(clk_out8Hz) 49 begin 50 if clk_out8Hz'event and clk_out8Hz='1' then 51 clk_out4Hz <= not(clk_out4Hz); 52 end if; 53 end process; 54 55 process(clk_out4Hz) 56 begin 57 if clk_out4Hz'event and clk_out4Hz='1' then 58 clk_out2Hz <= not(clk_out2Hz); 59 end if; 60 end process; 61 62 process(clk_out2Hz) 63 begin 64 if clk_out2Hz'event and clk_out2Hz='1' then 65 clk_out1Hz <= not(clk_out1Hz); 66 end if; 67 end process; 68 69 end arch; VHDL數位電路實習與專題設計
輸入 腳位 輸出 腳位 clk_in 43 clk_out8Hz 4 clk_out4Hz 5 clk_out2Hz 6 clk_out1Hz 8 clk_out8Hz clk_out4Hz clk_out2Hz clk_out1Hz 單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子FPT-3實驗板 VHDL數位電路實習與專題設計
輸入 腳位 輸出 腳位 clk_in 55 clk_out8Hz 17(L9) clk_out4Hz 18(L10) clk_out2Hz 19(L11) clk_out1Hz 20(L12) LED_COM 141 單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子LP-2900實驗板 • 更改除頻程式如下: • 腳位配置圖: 12 entity clk_div_LP2900 is 13 generic(divisor:integer:= 1250000); 14 port( …); VHDL數位電路實習與專題設計
單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子LP-2900實驗板 (續) • LP-2900實驗板元件規劃: VHDL數位電路實習與專題設計
Clk1 0111 Clk2 1011 clk cnt Clk3 1101 3 Clk4 1110 counter Clk1 0111 Clk2 4 1011 clk cnt Counter.vhd sel bin Clk_in Clk3 1101 3 3 to 8 decoder Clk4 1110 counter 頻率產生器 4 Bin2led.vhd Clk_div.vhd Counter.vhd sel 單元5-2 計數器設計與跑馬燈顯示 • 相關知識 • 計數器設計與跑馬燈顯示架構圖 • 可選擇輸入頻率的計數器電路符號 VHDL數位電路實習與專題設計
單元5-2 計數器設計與跑馬燈顯示 • 實驗電路圖 VHDL數位電路實習與專題設計
單元5-2 計數器設計與跑馬燈顯示 • 程式與說明 • 由1.8432MHz產生1Hz、2Hz、4Hz和8Hz輸出頻率之除頻電路程式碼 26 ---------- clk divider ---------- 27 process(clk_in) 28 variable cnt1,divisor2 : integer range 0 to divisor; 29 begin 30 divisor2:=divisor/2; 31 ----- up counter ----- 32 if (clk_in'event and clk_in='1') then 7 library ieee; 8 use ieee.std_logic_1164.all; 9 use ieee.std_logic_unsigned.all; 10 use ieee.std_logic_arith.all; 11 12 entity clk_div is 13 generic(divisor:integer:=230400); 14 port( 15 clk_in : in std_logic; 16 clk_out8Hz: buffer std_logic; 17 clk_out4Hz: buffer std_logic; 18 clk_out2Hz: buffer std_logic; 19 clk_out1Hz: buffer std_logic 20 ); 21 end clk_div; 22 23 architecture arch of clk_div is 24 signal cnt2 : std_logic; 25 begin 33 if cnt1 = divisor then 34 cnt1 := 1; 35 else 36 cnt1 := cnt1 + 1; 37 end if; 38 end if; 39 ----- clk_out register clk generator ----- 40 if (clk_in'event and clk_in='1') then 41 if (( cnt1 = divisor2) or (cnt1 = divisor))then 42 cnt2 <= not cnt2 ; 43 end if; 44 end if; 45 clk_out8Hz <= cnt2 ; 46 end process; VHDL數位電路實習與專題設計
單元5-2 計數器設計與跑馬燈顯示 • 程式與說明(續) • 由1.8432MHz產生1Hz、2Hz、4Hz和8Hz輸出頻率之除頻電路程式碼 47 48 process(clk_out8Hz) 49 begin 50 if clk_out8Hz'event and clk_out8Hz='1' then 51 clk_out4Hz <= not(clk_out4Hz); 52 end if; 53 end process; 54 55 process(clk_out4Hz) 56 begin 57 if clk_out4Hz'event and clk_out4Hz='1' then 58 clk_out2Hz <= not(clk_out2Hz); 59 end if; 60 end process; 61 62 process(clk_out2Hz) 63 begin 64 if clk_out2Hz'event and clk_out2Hz='1' then 65 clk_out1Hz <= not(clk_out1Hz); 66 end if; 67 end process; 68 69 end arch; VHDL數位電路實習與專題設計
單元5-2 計數器設計與跑馬燈顯示 • 程式與說明 • 可選擇四個不同輸入頻率之計數器電路程式碼 • 7 library ieee; • 8 use ieee.std_logic_1164.all; • 9 use ieee.std_logic_unsigned.all; • 10 use ieee.std_logic_arith.all; • 11 • 12 entity counter is • 13 port ( • 14 clk1 : in std_logic; • 15 clk2 : in std_logic; • 16 clk3 : in std_logic; • 17 clk4 : in std_logic; • 18 sel : in std_logic_vector(3 downto 0); • 19 cnt : out std_logic_vector (2 downto 0) • 20 ); • end counter; • 23 architecture arch of counter is • 24 signal clk: std_logic; • 25 signal cnt1 : std_logic_vector(2 downto 0); • 26 begin 28 ------PROGRAM BODY------------------------------ 29 process (sel,clk1,clk2,clk3,clk4) 30 begin 31 case sel is 32 when "0111" => clk <= clk1; -- 33 when "1011" => clk <= clk2; -- 34 when "1101" => clk <= clk3; -- 35 when "1110" => clk <= clk4; -- 36 when others => clk <= '0'; 37 end case; 38 end process; 40 process(clk) 41 begin 42 if clk'event and clk='1' then 43 cnt1<=cnt1+1; 44 end if; 45 end process; 46 cnt<=cnt1; 47 end arch; VHDL數位電路實習與專題設計
單元5-2 計數器設計與跑馬燈顯示 • 程式與說明 • 輸出為低電位動作之3 to 8解碼器電路程式碼 21 -------PROGRAM BODY------------------------------ 22 process (bin) 23 begin 24 case bin is 25 when "000" => led <= "11111110"; -- 0 active low 26 when "001" => led <= "11111101"; -- 1 27 when "010" => led <= "11111011"; -- 2 28 when "011" => led <= "11110111"; -- 3 29 when "100" => led <= "11101111"; -- 4 30 when "101" => led <= "11011111"; -- 5 31 when "110" => led <= "10111111"; -- 6 32 when "111" => led <= "01111111"; -- 7 33 when others => led <= "11111111"; 34 end case; 35 end process; 36 37 end arch; • 7 library ieee; • 8 use ieee.std_logic_1164.all; • 9 • 10 ------------------------------------------------------ • 11 entity bin2led is • 12 port ( • bin : in std_logic_vector (2 downto 0); • --3 bits • led : out std_logic_vector (7 downto 0) • --8 leds • 15 ); • 16 end bin2led; • 17 • 18 architecture arch of bin2led is • 19 begin • 20 VHDL數位電路實習與專題設計
單元5-2 計數器設計與跑馬燈顯示 23 generic(divisor:integer:=230400); 24 port( 25 clk_in : in std_logic; 26 clk_out8Hz: buffer std_logic; 27 clk_out4Hz: buffer std_logic; 28 clk_out2Hz: buffer std_logic; 29 clk_out1Hz: buffer std_logic 30 ); 31 end component; 32 33 component counter 34 port ( 35 clk1 : in std_logic; 36 clk2 : in std_logic; 37 clk3 : in std_logic; 38 clk4 : in std_logic; 39 sel : in std_logic_vector(3 downto 0); 40 cnt : out std_logic_vector (2 downto 0) 41 ); 42 end component; 43 • 程式與說明 • 主程式程式碼 7 library ieee; 8 use ieee.std_logic_1164.all; 9 use ieee.std_logic_unsigned.all; 10 entity clk_div_led is 11 port ( 12 clk : in std_logic; -- 1.8432 MHz 13 sel : in std_logic_vector(3 downto 0); 14 led : out std_logic_vector(7 downto 0) 15 ); 16 end clk_div_led; 17 18 architecture arch of clk_div_led is 19 20 -----COMPONENT DECLARED------------- 21 22 component clk_div VHDL數位電路實習與專題設計
單元5-2 計數器設計與跑馬燈顯示 • 程式與說明 • 主程式程式碼 (續) 44 component bin2led 45 port ( 46 bin : in std_logic_vector (2 downto 0); --3 bits 47 led : out std_logic_vector (7 downto 0) --8 leds 48 ); 49 end component; 50 ---------SIGNAL DECLARED------------------------------- 51 signal clk1,clk2,clk3,clk4 : std_logic; 52 signal bin: std_logic_vector(2 downto 0); 53 54 begin 55 56 u1: clk_div port map(clk,clk1,clk2,clk3,clk4); 57 u2: counter port map(clk1,clk2,clk3,clk4,sel,bin); 58 u3: bin2led port map(bin,led); 59 60 end arch; VHDL數位電路實習與專題設計
輸入 腳位 輸出 腳位 CLK 43 LED(0) 4(LED1) Sel(3) 36(DIP5) LED(1) 5(LED2) Sel(2) 1(DIP6) LED(2) 6(LED3) Sel(1) 44(DIP7) LED(3) 8(LED4) LED0~LED7 Sel(0) 2(DIP8) LED(4) 9(LED5) LED(5) 11(LED6) LED(6) 12(LED7) LED(7) 14(LED8) SEL3~SEL0 單元5-2 計數器設計與跑馬燈顯示 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子FPT-3實驗板 VHDL數位電路實習與專題設計
單元5-2 計數器設計與跑馬燈顯示 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子LP-2900實驗板 VHDL數位電路實習與專題設計
單元5-2 計數器設計與跑馬燈顯示 • 功能模擬與CPLD下載驗證 • 燒錄於力浦電子LP-2900實驗板 (續) VHDL數位電路實習與專題設計
低頻->低音調 高頻->高音調 薄膜放 薄膜吸 一週期 單元5-3 簡易電子琴設計 • 相關知識 當電磁式喇叭的線圈通過電流脈波時,就會因為薄膜振動而發出聲音,但是一個單一的脈波送到喇叭卻只能發出一個click的聲響,若要產生音樂聲的音調就必需讓喇叭持續的振動。一個音調的高低取決於發聲振動頻率的大小,而音量的高低則是由電流量的大小來決定。 VHDL數位電路實習與專題設計
單元5-3 簡易電子琴設計 VHDL數位電路實習與專題設計