Presentation is loading. Please wait.

Presentation is loading. Please wait.

VHDL數位電路實習與專題設計 文魁資訊-UE301

Similar presentations


Presentation on theme: "VHDL數位電路實習與專題設計 文魁資訊-UE301"— Presentation transcript:

1 VHDL數位電路實習與專題設計 文魁資訊-UE301
序向邏輯電路與狀態機設計 VHDL數位電路實習與專題設計 文魁資訊-UE301

2 內容大綱 3-1 順序性敘述的使用 3-2 狀態機電路設計 2-3 VHDL的指定敘述與基本語法 單元4:算術邏輯(ALU)運算單元實習
單元5:除頻器與計數器實習 單元6:多工掃描式七段顯示器實習 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

3 3-1順序性敘述的使用 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

4 3-1-1 If-Then-Else敘述 順序性敘述指令必須要放在PROCESS程式主體內使用,關於If-Then-Else敘述的語法如下:
指令敘述; Elsif (條件2) Then --否則若是(條件2)情況發生時,則執行… Else 否則則執行….. End If; 宣告結束 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

5 3-1-1 If-Then-Else敘述 D型正反器 event clk 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) IF CLK'event AND CLK='1' THEN Q <= D; END IF; END PROCESS; END a; CLK D Q(t+1) X Q(t) 1 clk event 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

6 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數位電路實習與專題設計

7 3-1-2 計數器與除頻電路 上下數計數器:將上數和下數的功能合併,再使用一個控制訊號DIR來決定其上下數的動作 12 BEGIN
PROCESS (CLK) BEGIN IF CLK'event AND CLK='1' THEN IF DIR='0' THEN QN <= QN+1; ELSE QN <= QN-1; END IF; END IF; 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數位電路實習與專題設計

8 3-1-2 計數器與除頻電路 輸出為對稱方波形狀的除頻器設計
在FPT-3實驗板上的石英振盪器之振盪頻率是1.8432MHz(一秒振盪1.8432x106次),如果我們想要設計一個1/(1.8432x106)的除頻電路來得到輸出波形為對稱方波的1Hz輸出頻率時,我們可以宣告一個數值為振盪頻率值一半的整數(即(1.8432x106)/2),每當該數值數完一次時就令其對應的輸出訊號波形發生轉態,那麼當計數完振盪頻率的數值時輸出訊號恰完成一個週期的正反變化,如此一來我們便能輕易地得到1Hz的方波訊號了。 1.8432x106 Counter value(1.8432x106/2) Counter value( x106/2) PULSE 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

9 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 PORT ( clockIN : IN std_logic ; clockOUT : OUT std_logic); END SLOWCLK18432; 9 10 ARCHITECTURE behavioral OF slowCLK18432 IS SIGNAL PULSE : std_logic := '0'; 12 BEGIN PROCESS (clockIN) VARIABLE Counter : INTEGER RANGE 0 TO /2 := /2; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

10 3-1-2 計數器與除頻電路 輸出為對稱方波形狀的除頻器設計(續) 15 BEGIN
IF (clockIN'EVENT AND clockIN='1') THEN Counter := Counter - 1; IF (Counter = 0) THEN IF PULSE = '1' THEN PULSE <= '0'; ELSE PULSE <= '1'; END IF; Counter := /2; END IF; END IF; END PROCESS; clockOUT <= PULSE; 28 END behavioral; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

11 3-1-3 case-when敘述 Case-when指令本身是敘述組合邏輯的,但它卻必須在Process指令中執行,因此它是序向邏輯指令之一 ,其語法如下 Case 選擇訊號 IS When 選擇訊號1 => 敘述命令1; When 選擇訊號2 => 敘述命令2; : When Others => 敘述命令N; End Case; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

12 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; C 1 S1 S0 Operation F<=A; F<=A and B; F<=A or B; F<=Not A; F<=A+B; F<=A-B; F<=A+1; F<=A-1; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

13 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 邏輯運算 When others=> F<=Not A; --NOT邏輯運算 END case; ELSE --當C=’1’時執行算術運算 Case s IS When "00"=> F<=A+B; --加法運算 When "01"=> F<=A-B; --減法運算 When "10"=> F<=A+1; --遞增1 When others=> F<=A-1; --遞減1 End case; end if; End Process; END a; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

14 3-1-4 For-Loop敘述 FOR-LOOP敘述 VHDL語言使用For-Loop敘述來描述重複性的電路動作,其語法如下:
FOR I IN 開始值 to 結束值 LOOP --以遞增的方式從開始值執行到結束值為止 命令敘述 End Loop; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

15 3-1-4 For-Loop敘述 四位元移位暫存器 architecture a of shift4 is
architecture a of shift4 is signal temp : std_logic_vector(3 downto 0); begin process(clk) 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數位電路實習與專題設計

16 3-2 狀態機電路設計 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

17 3-2-1 Moore狀態機 Moore狀態機的輸出與狀態有關,與輸入無關。 Moore狀態機對應之真值表 現態 次態 X=0 X=1 輸出
X=0 X=1 輸出 S0 S1 1 S3 S2 Moore狀態機對應之真值表 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

18 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) CASE present_state IS WHEN s0 => IF X = '0' THEN next_state <= s0; ELSE next_state <= s1; END IF; OP <= '1'; WHEN s1 => next_state <= s3; next_state <= s2; OP <= '0'; WHEN s2 => IF X = '0' THEN next_state <= s2; ELSE next_state <= s3; END IF; OP <= '1'; WHEN s3 => next_state <= s0; 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 PROCESS state_clocking; END a; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

19 3-2-2 Mealy狀態機 Mealy狀態機的輸出與輸入和狀態均有關。 X=0 X=1 S0 S1 1 S3 S2 現態 次態 輸出
X=0 X=1 S0 S1 1 S3 S2 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

20 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) CASE present_state IS WHEN s0 => IF X = '0' THEN next_state <= s0; ELSE next_state <= s1; END IF; op <= '0'; op <= '1'; WHEN s1 => IF X = '0' THEN next_state <= s3; ELSE next_state <= s2; END IF; op <= '1'; WHEN s2 => op <= '0'; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

21 3-2-2 Mealy狀態機 WHEN s3 => IF X = '0' THEN next_state <= s3; ELSE
END IF; 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 PROCESS state_clocking; END a; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

22 單元4:算術邏輯(ALU)運算 單元實習 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

23 單元4:算術邏輯(ALU)運算單元實習 相關知識 M S1 S0 Operation F<=A; 1 F<=A and B;
F<=A; 1 F<=A and B; F<=A or B; F<=Not A; F<=A+B; F<=A-B; F<=A+1; F<=A-1; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

24 單元4:算術邏輯(ALU)運算單元實習 實驗電路圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

25 單元4:算術邏輯(ALU)運算單元實習 程式與說明 22 IF M='0' then 23 Case s IS
When "00"=> F<=A; When "01"=> F<=A and B; When "10"=> F<=A or B; When others=> F<=Not A; 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 Case s IS When "00"=> F<=A+B; When "01"=> F<=A-B; When "10"=> F<=A+1; When others=> F<=A-1; End case; 44 end if; 45 End Process; 46 END a; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

26 單元4:算術邏輯(ALU)運算單元實習 功能模擬與CPLD下載驗證 燒錄於力浦電子FPT-3實驗板 輸入 腳位 輸出 M 37(SW1)
A2~A0 B2~B0 F2~F0 S1~S0 輸入 腳位 輸出 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) A(1) 34(DIP4) A(0) 36(DIP5) B(2) 1(DIP6) B(1) 44(DIP7) B(0) 2(DIP8) 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

27 單元4:算術邏輯(ALU)運算單元實習 功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板(實驗電路圖)
陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

28 單元4:算術邏輯(ALU)運算單元實習 功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板 (續) 輸入 腳位 輸出 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) 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

29 單元4:算術邏輯(ALU)運算單元實習 功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板 (續)
陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

30 單元5:除頻器與計數器實習 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

31 單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計
相關知識 將 Hz除頻得到8Hz頻率輸出 1.8432x106 divisor(230400) CN2 divisor/2 以自由計數器得到4Hz、2Hz和1Hz的信號頻率 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

32 單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計
實驗電路圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

33 單元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( clk_in : in std_logic; clk_out8Hz: buffer std_logic; clk_out4Hz: buffer std_logic; clk_out2Hz: buffer std_logic; clk_out1Hz: buffer std_logic ); 21 end clk_div; 22 23 architecture arch of clk_div is 24 signal cnt2 : std_logic; 25 begin clk divider 27 process(clk_in) variable cnt1,divisor2 : integer range 0 to divisor; 29 begin divisor2:=divisor/2; up counter ----- if (clk_in'event and clk_in='1') then if cnt1 = divisor then cnt1 := 1; else cnt1 := cnt1 + 1; end if; end if; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

34 單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計
程式與說明(續) clk_out register clk generator ----- if (clk_in'event and clk_in='1') then if (( cnt1 = divisor2) or (cnt1 = divisor))then cnt2 <= not cnt2 ; end if; end if; clk_out8Hz <= cnt2 ; 46 end process; 47 48 process(clk_out8Hz) 49 begin if clk_out8Hz'event and clk_out8Hz='1' then clk_out4Hz <= not(clk_out4Hz); end if; 53 end process; 54 55 process(clk_out4Hz) 56 begin if clk_out4Hz'event and clk_out4Hz='1' then clk_out2Hz <= not(clk_out2Hz); end if; 60 end process; 61 62 process(clk_out2Hz) 63 begin if clk_out2Hz'event and clk_out2Hz='1' then clk_out1Hz <= not(clk_out1Hz); end if; 67 end process; 68 69 end arch; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

35 單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計
功能模擬與CPLD下載驗證 燒錄於力浦電子FPT-3實驗板 clk_out8Hz clk_out4Hz clk_out2Hz clk_out1Hz 輸入 clk_in 腳位 43 輸出 clk_out8Hz clk_out4Hz clk_out2Hz clk_out1Hz 4 5 6 8 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

36 單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計
功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板 更改除頻程式如下: 腳位配置圖: 12 entity clk_div_LP2900 is 13 generic(divisor:integer:= ); 14 port( …); 輸入 腳位 輸出 clk_in 55 clk_out8Hz 17(L9) clk_out4Hz 18(L10) clk_out2Hz 19(L11) clk_out1Hz 20(L12) LED_COM 141 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

37 單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計
功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板 (續) LP-2900實驗板元件規劃: 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

38 單元5-2 計數器設計與跑馬燈顯示 相關知識 計數器設計與跑馬燈顯示架構圖 可選擇輸入頻率的計數器電路符號 陳慶逸、林柏辰編著---文魁資訊
0111 1011 1101 1110 Clk1 Clk2 Clk3 Clk4 Clk_in 頻率產生器 counter clk cnt 3 bin 3 to 8 decoder Bin2led.vhd Counter.vhd Clk_div.vhd sel 4 0111 1011 1101 1110 Clk1 Clk2 Clk3 Clk4 counter clk cnt 3 Counter.vhd sel 4 可選擇輸入頻率的計數器電路符號 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

39 單元5-2 計數器設計與跑馬燈顯示 實驗電路圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

40 單元5-2 計數器設計與跑馬燈顯示 程式與說明 由1.8432MHz產生1Hz、2Hz、4Hz和8Hz輸出頻率之除頻電路程式碼
clk divider 27 process(clk_in) variable cnt1,divisor2 : integer range 0 to divisor; 29 begin divisor2:=divisor/2; up counter ----- 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( clk_in : in std_logic; clk_out8Hz: buffer std_logic; clk_out4Hz: buffer std_logic; clk_out2Hz: buffer std_logic; clk_out1Hz: buffer std_logic ); 21 end clk_div; 22 23 architecture arch of clk_div is 24 signal cnt2 : std_logic; 25 begin if cnt1 = divisor then cnt1 := 1; else cnt1 := cnt1 + 1; end if; end if; clk_out register clk generator ----- if (clk_in'event and clk_in='1') then if (( cnt1 = divisor2) or (cnt1 = divisor))then cnt2 <= not cnt2 ; end if; end if; clk_out8Hz <= cnt2 ; 46 end process; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

41 單元5-2 計數器設計與跑馬燈顯示 程式與說明(續) 由1.8432MHz產生1Hz、2Hz、4Hz和8Hz輸出頻率之除頻電路程式碼 47
48 process(clk_out8Hz) 49 begin if clk_out8Hz'event and clk_out8Hz='1' then clk_out4Hz <= not(clk_out4Hz); end if; 53 end process; 54 55 process(clk_out4Hz) 56 begin if clk_out4Hz'event and clk_out4Hz='1' then clk_out2Hz <= not(clk_out2Hz); end if; 60 end process; 61 62 process(clk_out2Hz) 63 begin if clk_out2Hz'event and clk_out2Hz='1' then clk_out1Hz <= not(clk_out1Hz); end if; 67 end process; 68 69 end arch; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

42 單元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 ( clk1 : in std_logic; clk2 : in std_logic; clk3 : in std_logic; clk4 : in std_logic; sel : in std_logic_vector(3 downto 0); cnt : out std_logic_vector (2 downto 0) ); end counter; 23 architecture arch of counter is 24 signal clk: std_logic; 25 signal cnt1 : std_logic_vector(2 downto 0); 26 begin PROGRAM BODY 29 process (sel,clk1,clk2,clk3,clk4) 30 begin case sel is when "0111" => clk <= clk1; -- when "1011" => clk <= clk2; -- when "1101" => clk <= clk3; -- when "1110" => clk <= clk4; -- when others => clk <= '0'; end case; 38 end process; 40 process(clk) 41 begin if clk'event and clk='1' then cnt1<=cnt1+1; end if; 45 end process; 46 cnt<=cnt1; 47 end arch; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

43 單元5-2 計數器設計與跑馬燈顯示 程式與說明 輸出為低電位動作之3 to 8解碼器電路程式碼
PROGRAM BODY 22 process (bin) 23 begin case bin is when "000" => led <= " "; -- 0 active low when "001" => led <= " "; -- 1 when "010" => led <= " "; -- 2 when "011" => led <= " "; -- 3 when "100" => led <= " "; -- 4 when "101" => led <= " "; -- 5 when "110" => led <= " "; -- 6 when "111" => led <= " "; -- 7 when others => led <= " "; end case; 35 end process; 36 37 end arch; 7 library ieee; 8 use ieee.std_logic_1164.all; 9 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 ); 16 end bin2led; 17 18 architecture arch of bin2led is 19 begin 20 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

44 單元5-2 計數器設計與跑馬燈顯示 程式與說明 主程式程式碼 23 generic(divisor:integer:=230400);
24 port( clk_in : in std_logic; clk_out8Hz: buffer std_logic; clk_out4Hz: buffer std_logic; clk_out2Hz: buffer std_logic; clk_out1Hz: buffer std_logic ); 31 end component; 32 33 component counter 34 port ( clk1 : in std_logic; clk2 : in std_logic; clk3 : in std_logic; clk4 : in std_logic; sel : in std_logic_vector(3 downto 0); cnt : out std_logic_vector (2 downto 0) ); 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; MHz 13 sel : in std_logic_vector(3 downto 0); 14 led : out std_logic_vector(7 downto 0) ); 16 end clk_div_led; 17 18 architecture arch of clk_div_led is 19 COMPONENT DECLARED 21 22 component clk_div 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

45 單元5-2 計數器設計與跑馬燈顯示 程式與說明 主程式程式碼 (續) 44 component bin2led 45 port (
bin : in std_logic_vector (2 downto 0); --3 bits led : out std_logic_vector (7 downto 0) leds ); 49 end component; 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數位電路實習與專題設計

46 單元5-2 計數器設計與跑馬燈顯示 功能模擬與CPLD下載驗證 燒錄於力浦電子FPT-3實驗板 輸入 腳位 輸出 CLK 43 LED(0)
SEL3~SEL0 LED0~LED7 輸入 腳位 輸出 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) Sel(0) 2(DIP8) LED(4) 9(LED5) LED(5) 11(LED6) LED(6) 12(LED7) LED(7) 14(LED8) 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

47 單元5-2 計數器設計與跑馬燈顯示 功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板 陳慶逸、林柏辰編著---文魁資訊
VHDL數位電路實習與專題設計

48 單元5-2 計數器設計與跑馬燈顯示 功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板 (續) 陳慶逸、林柏辰編著---文魁資訊
VHDL數位電路實習與專題設計

49 單元5-3 簡易電子琴設計 相關知識 當電磁式喇叭的線圈通過電流脈波時,就會因為薄膜振動而發出聲音,但是一個單一的脈波送到喇叭卻只能發出一個click的聲響,若要產生音樂聲的音調就必需讓喇叭持續的振動。一個音調的高低取決於發聲振動頻率的大小,而音量的高低則是由電流量的大小來決定。 薄膜放 薄膜吸 低頻->低音調 高頻->高音調 一週期 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

50 單元5-3 簡易電子琴設計 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

51 單元5-3 簡易電子琴設計 實驗功能 限於FPT-3實驗板上的EPM7064SLC44-10這顆晶片僅有64個LCs的容量,因此實驗中我們僅實驗Do和Rai兩個音: SW1(指撥開關設定為01)->Do SW2(指撥開關設定為10)->Rai 至於力浦LP-2900、Altera UP1 X實驗板或其他SRAM製程技術的CPLD晶片(如FLEX 10K系列)的元件一般來說可規劃的容量均甚大,在進行實驗時應較不需要如此特別留意容量限制的問題。 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

52 單元5-3 簡易電子琴設計 實驗電路圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

53 單元5-3 簡易電子琴設計 程式與說明 簡易電子琴實習除頻器程式碼: 8 library ieee;
9 use ieee.std_logic_1164.all; 10 use ieee.std_logic_unsigned.all; 11 use ieee.std_logic_arith.all; 12 13 entity clk_div_music is 14 generic(divisor:integer:=31); 15 port( clk_in : in std_logic; clk_out: out std_logic ); 19 end clk_div_music; 20 21 architecture arch of clk_div_music is 22 signal cnt2 : std_logic; 23 begin clk divider 25 process(clk_in) variable cnt1,divisor2 : integer range 0 to divisor; 27 begin divisor2:=divisor/2; up counter ----- if (clk_in'event and clk_in='1') then if cnt1 = divisor then cnt1 := 1; else cnt1 := cnt1 + 1; end if; end if; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

54 單元5-3 簡易電子琴設計 程式與說明 簡易電子琴實習除頻器程式碼(續) :
clk_out register clk generator ----- if (clk_in'event and clk_in='1') then if (( cnt1 = divisor2) or (cnt1 = divisor))then cnt2 <= not cnt2 ; end if; end if; clk_out <= cnt2 ; 44 end process; 45 end arch; 46 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

55 單元5-3 簡易電子琴設計 程式與說明 簡易電子琴主程式碼 23 component clk_div_music
24 generic(divisor:integer:=8); 25 port( clk_in : in std_logic; clk_out: out std_logic ); 29 end component; 30 31 signal clk1,clk2: std_logic; 32 33 begin 34 35 u1: clk_div_music generic map(7045) --Do 261.6Hz M->7045 port map(clk,clk1); 38 u2: clk_div_music 8 library ieee; 9 use ieee.std_logic_1164.all; 10 use ieee.std_logic_unsigned.all; 11 use ieee.std_logic_arith.all; 12 13 entity music is 14 port( clk : in std_logic; sel : in std_logic_vector(1 downto 0); music_out : out std_logic ); 19 end music; 20 21 architecture arch of music is 22 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

56 單元5-3 簡易電子琴設計 程式與說明 簡易電子琴主程式碼 (續)
generic map(6275) --Rai 293.7Hz M->6275 port map(clk,clk2); 41 process 43 process (sel,clk1,clk2) 44 begin case sel is when "01" => music_out <= clk1; --SW1 -> Do when "10" => music_out <= clk2; --SW2 -> Rai when others => music_out <= '0'; end case; 50 end process; 51 52 end arch; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

57 單元5-3 簡易電子琴設計 功能模擬與CPLD下載驗證 燒錄於力浦電子FPT-3實驗板 輸入 腳位 輸出 clk 43 Music_out
28(SP1) Sel(1) 44(DIP7) Sel(0) 2(DIP8) Music_out SEL1~SEL0 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

58 單元5-3 簡易電子琴設計 功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板
由於LP-2900實驗板上的EPF10K10TC144-4晶片容量較大,因此我們可以更改程式以實現較多的音調頻率(LP-2900上之振盪頻率為10MHz)。 45 u5: clk_div_music generic map(25510) --so 392.0Hz port map(clk,clk5); 48 u6: clk_div_music generic map(22727) --La 440.0Hz port map(clk,clk6); 51 u7: clk_div_music generic map(20275) --si 493.2Hz port map(clk,clk7); 54 u8: clk_div_music generic map(19109) --Do 523.3Hz port map(clk,clk8); 57 33 u1: clk_div_music generic map(38226) --Do 261.6Hz port map(clk,clk1); 36 u2: clk_div_music generic map(34048) --Rai 293.7Hz port map(clk,clk2); 39 u3: clk_div_music generic map(30339) --Mi 329.6Hz port map(clk,clk3); 42 u4: clk_div_music generic map(28638) --Fa 349.1Hz port map(clk,clk4); 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

59 單元5-3 簡易電子琴設計 功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板(續) 輸入 腳位 輸出 clk 55
Music_out 46(BUZZER) Sel(7) 47(SW1) Sel(6) 48(SW2) Sel(5) 49(SW3) Sel(4) 51(SW4) Sel(3) 59(SW5) Sel(2) 60(SW6) Sel(1) 62(SW7) Sel(0) 63(SW8) 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

60 單元5-3 簡易電子琴設計 功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板(續) Music_out
陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

61 單元5-4 Moore狀態機與電子音樂歌曲的編輯製作
0000 01xx xxxx 狀態機計數器 0001 0010 0011 0100 0101 0110 蜂鳴器 多工器 0111 4 986.4Hz 261.6Hz 293.7Hz 329.6Hz 349.2Hz 392Hz 440Hz 493.2Hz 音調產生器 10Mhz Do Rei Mi Fa So La Si clk 相關知識 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

62 單元5-4 Moore狀態機與電子音樂歌曲的編輯製作
實驗電路圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

63 單元5-4 Moore狀態機與電子音樂歌曲的編輯製作
程式與說明 除頻器設計 else cnt1 := cnt1 + 1; end if; end if; clk_out register clk generator ----- if (clk_in'event and clk_in='1') then if (( cnt1 = divisor2) or (cnt1 = divisor))then cnt2 <= not cnt2 ; end if; end if; clk_out <= cnt2 ; 43 end process; 44 end arch; 12 entity clk_div_music is 13 generic(divisor:integer:= 31); 14 port( clk_in : in std_logic; clk_out: out std_logic ); 18 end clk_div_music; 19 20 architecture arch of clk_div_music is 21 signal cnt2 : std_logic; 22 begin clk divider 24 process(clk_in) variable cnt1,divisor2 : integer range 0 to divisor; 26 begin divisor2:=divisor/2; up counter ----- if (clk_in'event and clk_in='1') then if cnt1 = divisor then cnt1 := 1; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

64 單元5-4 Moore狀態機與電子音樂歌曲的編輯製作
28 29 30 begin 31 32 u1: clk_div_music generic map(38226) --Do 261.6Hz port map(clk,clk1); 35 u2: clk_div_music generic map(34048) --Rai 293.7Hz port map(clk,clk2); 38 u3: clk_div_music generic map(30339) --Mi 329.6Hz port map(clk,clk3); 41 u4: clk_div_music generic map(28638) --Fa 349.1Hz port map(clk,clk4); 44 u5: clk_div_music generic map(25510) --so 392.0Hz port map(clk,clk5 程式與說明 音調產生器 12 entity music_gene is 13 port( 14 clk : in std_logic; clk1,clk2,clk3,clk4,clk5, clk6,clk7,clk8 : out std_logic ); 17 end music_gene; 18 19 architecture arch of music_gene is 20 21 component clk_div_music 22 generic(divisor:integer:=8); 23 port( clk_in : in std_logic; clk_out: out std_logic ); 27 end component; 47 u6: clk_div_music generic map(22727) --La 440.0Hz port map(clk,clk6); 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

65 單元5-4 Moore狀態機與電子音樂歌曲的編輯製作
程式與說明 音調產生器(續) 50 u7: clk_div_music generic map(20275) --si 493.2Hz port map(clk,clk7); 53 u8: clk_div_music generic map(19109) --Do 523.3Hz port map(clk,clk8); 56 57 58 end arch; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

66 單元5-4 Moore狀態機與電子音樂歌曲的編輯製作
程式與說明 狀態機計數器設計(moore狀態機) S0 0101 S1 0011 S2 S3 0100 S4 0010 S5 S6 0001 S11 S10 S9 S8 S7 S12 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

67 單元5-4 Moore狀態機與電子音樂歌曲的編輯製作
頻率產生器 十模計數器 程式與說明 多工器電路 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

68 單元5-4 Moore狀態機與電子音樂歌曲的編輯製作
程式與說明 主程式電路連線(electmusic.gdf) 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

69 單元5-4 Moore狀態機與電子音樂歌曲的編輯製作
功能模擬與CPLD下載驗證(力浦電子LP-2900實驗板) 輸入 腳位 輸出 10Mhz 55 Music_out 46(連接蜂鳴器) 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

70 單元5-5 移位暫存器與電子音樂歌曲的編輯製作
相關知識 000 001 010 011 100 101 110 Do Rei Mi Fa 蜂鳴器 多工器 So La Si 111 3 1 261.6Hz 293.7Hz 329.6Hz 349.2Hz 392Hz 440Hz 493.2Hz 音調產生器 10MHz 5Hz 移位暫存器 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

71 單元5-5 移位暫存器與電子音樂歌曲的編輯製作
實驗電路圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

72 單元5-5 移位暫存器與電子音樂歌曲的編輯製作
25 if clk = '1' and clk'EVENT then 26 if ringen = '1' then 27 rings <= ringdata(104 downto 102); 28 ringdata(2 downto 0) <= ringdata(104 downto 102); 29 ringdata(104 downto 3) <= ringdata(101 downto 0); 30 else ringdata <= " "; 32 rings <= "000"; 33 end if; 34 end if; 35 end process musicp; 36 ring<=rings; 37 38 39 end arcpt_ring; 40 程式與說明 除頻器設計 (略) 音調產生器 (略) 移位暫存器設計 12 entity ring is 13 port(CLK: in std_logic; ringen : in std_logic; ring : out std_logic_vector(2 downto 0)); 16 end ring; 17 18 architecture arcpt_ring of ring is 19 signal rings: std_logic_vector(2 downto 0) ; 20 signal ringdata : std_logic_vector(104 downto 0); 21 begin 22 23 musicp : process(clk,ringen) 24 begin 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

73 單元5-5 移位暫存器與電子音樂歌曲的編輯製作
程式與說明(續) 多工器電路 頻率產生器 十模計數器 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

74 單元5-5 移位暫存器與電子音樂歌曲的編輯製作
程式與說明(續) 主程式電路連線(elect_ring_main.gdf)與腳位規劃 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

75 單元5-5 移位暫存器與電子音樂歌曲的編輯製作
功能模擬與CPLD下載驗證 輸入 腳位 輸出 Clk_in55 55 Bee_out46 46(連接蜂鳴器) SW_in47 47(SW1) 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

76 單元6:多工掃描式七段顯示器實習 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

77 單元6-1 二位數BCD計數器設計 相關知識 本實驗我們將設計一組兩位數的BCD計數器,並將計數動作以多工掃描的方式顯示在一個二合一的七段顯示器元件上。 使用多工掃描顯示時,我們一次只讓一個七段顯示器的共同點得到驅動電壓而點亮,也就是說同時間內只有一個七段顯示器可以顯示;但當掃描速度夠快時,由於人類視覺暫留的原理,我們肉眼所看到的現象卻是所有的七段顯示器都穩定而且非閃爍的顯示(每一個位數的七段顯示器之輸入掃描頻率至少要大於人眼的視覺暫留頻率24Hz)。 e a b c d f g C2 C1 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

78 單元6-1 二位數BCD計數器設計 相關知識(續) 多工掃描電路動作示意圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計
M0 M1 1 2 to 1 Mux 1 to 2 decoder Sel=’0’ 7 IN1 IN2 High Low C2 C1 M0 M1 1 2 to 1 Mux 1 to 2 decoder Sel=’1’ 7 IN1 IN2 High Low 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

79 單元6-1 二位數BCD計數器設計 相關知識(續) 多工掃描式兩位數BCD計數器電路架構圖 陳慶逸、林柏辰編著---文魁資訊
M0 M1 1 2 to 1 Mux 1 to 2 decoder 4 七段顯示器解碼電路 7 兩位數 BCD計數器 clk 1Hz 64Hz 頻率產生器 sel 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

80 單元6-1 二位數BCD計數器設計 相關知識(續) 本實驗中所設計之兩位數BCD計數器電路方塊連線關係圖 陳慶逸、林柏辰編著---文魁資訊
Clk_1Hz Clk_in Up_counter4_10 clk 4 bin 4 to 8 decoder Bin2led Clk_div_1_64 Clk_64Hz 7 Bin2seg0_scan q_one q_ten Seg-out Seg-one-en Seg-ten-en Seg-en ce Rst-n Rst_n Seg_en Clk_out1 Clk_out2 Led(7) Led(6) Led(5) Led(4) Led(3) Led(2) Led(1) Led(0) Led_en 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

81 單元6-1 二位數BCD計數器設計 實驗電路圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

82 單元6-1 二位數BCD計數器設計 程式與說明 產生計數器計數時脈與七段顯示器掃描頻率之除頻電路程式碼
12 entity clk_div_1_64 is 13 port( clk_in : in std_logic; clk_out1: out std_logic; clk_out2: out std_logic ); 18 end clk_div_1_64; 19 20 architecture a of clk_div_1_64 is 21 SIGNAL DECLARED signal cnt : std_logic_vector(20 downto 0); --** counter 24 signal reset: std_logic; reset 25 begin 26 PROGRAM BODY 28 process (clk_in) 29 begin if reset='1' then cnt<=" "; elsif clk_in'event and clk_in='1' then cnt<=cnt+1; end if; 35 end process; 36 reset<='1' when cnt= else '0'; --** divisor 38 clk_out1<=cnt(20); 39 clk_out2<=cnt(14); 40 41 end a; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

83 單元6-1 二位數BCD計數器設計 程式與說明 BCD上數計數器程式碼 12 entity up_counter4_10 is
13 port( clk : in std_logic; system clock rst_n : in std_logic; reset ce : in std_logic; chip enable q_one : out std_logic_vector(3 downto 0); --counter one output q_ten : out std_logic_vector(3 downto 0) --counter ten output ); 20 end up_counter4_10; 21 22 architecture a of up_counter4_10 is 23 SIGNAL DECLARED 25 signal q_one_temp : std_logic_vector(3 downto 0); --temp q_one 26 signal q_ten_temp : std_logic_vector(3 downto 0); --temp q_ten 27 begin 28 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

84 單元6-1 二位數BCD計數器設計 程式與說明 BCD上數計數器程式碼(續) 48 49 q_one<=q_one_temp;
50 q_ten<=q_ten_temp; 51 52 end a; PROGRAM BODY 30 process (clk) 31 begin 32 if (ce='0' or rst_n='0') then q_one_temp<="0000"; q_ten_temp<="0000"; 35 elsif clk'event and clk='1' then if (q_one_temp>=9) then carry in (one) q_one_temp<="0000"; if (q_ten_temp>=9) then carry in (ten) q_ten_temp<="0000"; else q_ten_temp<=q_ten_temp+1; end if; else q_one_temp<=q_one_temp+1; end if; 46 end if; 47 end process; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

85 單元6-1 二位數BCD計數器設計 程式與說明 多工掃描顯示之七段顯示器解碼電路設計程式碼
23 entity bin2seg0_scan is 24 port ( clk : in std_logic; hz clock seg_en: in std_logic; segment enable q_one: in std_logic_vector(3 downto 0); --binary input of one q_ten: in std_logic_vector(3 downto 0); --binary input of ten seg_out : out std_logic_vector(6 downto 0); --7segment output seg_one_en: out std_logic; segment one enable seg_ten_en: out std_logic segment ten enable ); 33 end bin2seg0_scan; 34 35 architecture arch of bin2seg0_scan is 36 SIGNAL DECLARED 38 signal bin: std_logic_vector(3 downto 0); --binary code 39 signal seg: std_logic_vector(6 downto 0); --segment code 40 signal sel: integer range 0 to 1; scan coutnter 41 begin 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

86 單元6-1 二位數BCD計數器設計 程式與說明 多工掃描顯示之七段顯示器解碼電路設計程式碼 (續) 53 sel<=sel+1;
case sel is when 0 => bin<=q_one; seg_out<=seg; seg_one_en<='0'; seg_ten_en<='1'; 42 PROGRAM BODY scan and signal assign--- 45 process (clk, seg_en) 46 begin if clk'event and clk='1' then if (seg_en='0') then seg_one_en<='0'; seg_ten_en<='0'; sel<=0; else when 1 => bin<=q_ten; seg_out<=seg; seg_one_en<='1'; seg_ten_en<='0'; when others => null; end case; end if; end if; 70 end process; 71 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

87 單元6-1 二位數BCD計數器設計 程式與說明 多工掃描顯示之七段顯示器解碼電路設計程式碼 (續)
binary to seven segment decoder----- 73 process (bin) 74 begin case bin is when "0000" => seg <= " "; -- 0 active low '0' when "0001" => seg <= " "; -- 1 when "0010" => seg <= " "; -- 2 when "0011" => seg <= " "; -- 3 when "0100" => seg <= " "; -- 4 when "0101" => seg <= " "; -- 5 when "0110" => seg <= " "; -- 6 when "0111" => seg <= " "; -- 7 when "1000" => seg <= " "; -- 8 when "1001" => seg <= " "; -- 9 when others => seg <= " "; end case; 88 end process; 89 90 end arch; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

88 單元6-1 二位數BCD計數器設計 程式與說明 低電位動作之四對八解碼電路程式碼 (略) 掃描式多工顯示之兩位數BCD計數器主程式碼
COMPONENT DECLARED clk_div 1hz 64hz component 29 component clk_div_1_64 30 port( clk_in : in std_logic; clk_out1: out std_logic; clk_out2: out std_logic ); 35 end component; 36 11 entity up_scan_top is 12 port ( clk : in std_logic; MHz rst_n : in std_logic; ce : in std_logic; led_en : in std_logic; seg_en : in std_logic; led : out std_logic_vector(7 downto 0); seg_out : out std_logic_vector(6 downto 0); seg_one_en: out std_logic; seg_ten_en: out std_logic ); up_counter_4_10 component 38 component up_counter4_10 39 port( clk : in std_logic; system clock rst_n : in std_logic; --reset ce : in std_logic; chip enable46 end component; 23 end up_scan_top; 24 25 architecture arch of up_scan_top is 26 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

89 單元6-1 二位數BCD計數器設計 程式與說明 掃描式多工顯示之兩位數BCD計數器主程式碼 (續)
q_one : out std_logic_vector(3 downto 0); --counter one output q_ten : out std_logic_vector(3 downto 0) --counter ten output ); 46 end component; 47 binary to 7segment decoder 49 component bin2seg0_scan 50 port ( clk : in std_logic; hz clock seg_en : in std_logic; segment enable q_one : in std_logic_vector(3 downto 0); q_ten : in std_logic_vector(3 downto 0); seg_out : out std_logic_vector(6 downto 0); seg_one_en: out std_logic; seg_ten_en: out std_logic ); 59 end component; 60 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

90 單元6-1 二位數BCD計數器設計 程式與說明 掃描式多工顯示之兩位數BCD計數器主程式碼 (續)
binary to led8 decoder 62 component bin2led0_10 63 port ( led_en : in std_logic; bin : in std_logic_vector (3 downto 0); led : out std_logic_vector (7 downto 0) ); 68 end component; 69 SIGNAL DECLARED 71 signal clk_1hz : std_logic; 72 signal clk_64hz: std_logic; 73 signal q_one: std_logic_vector(3 downto 0); 74 signal q_ten: std_logic_vector(3 downto 0); 75 76 begin 77 Frequency divider 79 u1: clk_div_1_64 port map (clk, clk_1hz, clk_64hz); 80 bit up counter u2: up_counter4_10 port map (clk_1hz, rst_n, ce, q_one, q_ten); 83 binary to LED decoder 85 u3: bin2led0_10 port map (led_en, q_one, led); 86 binary to seven segment decoder u4: bin2seg0_scan port map (clk_64hz, seg_en, q_one, q_ten, seg_out, seg_one_en, seg_ten_en); 90 end arch; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

91 單元6-1 二位數BCD計數器設計 程式與說明 掃描式多工顯示之兩位數BCD計數器主程式碼 電路結構(續) 陳慶逸、林柏辰編著---文魁資訊
VHDL數位電路實習與專題設計

92 單元6-1 二位數BCD計數器設計 功能模擬與CPLD下載驗證 輸出 腳位 輸入 Rst_n ce Seg_en Led_en Led7~
7 Segment 功能模擬與CPLD下載驗證 輸出 腳位 Seg_out(0) 16(a) Seg_out(1) 17(b) Seg_out(2) 18(c) Seg_out(3) 19(d) Seg_out(4) 20(e) Seg_out(5) 21(f) Seg_out(6) 24(g) Seg_one_en 27(7SEGIO2) Seg_ten_en 26(7SEGIO1) Led(7) 4(LED1) Led(6) 5(LED2) Led(5) 6(LED3) Led(4) 8(LED4) Led(3) 9(LED5) Led(2) 11(LED6) Led(1) 12(LED7) 輸入 clk Rst_n ce Seg_en Led_en 43 37(SW1) 39(SW2) 40(SW3) 41(SW4) Led(0) 14(LED8) 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

93 單元6-2 四位數BCD計數器設計與頻率控制 相關知識
本實驗我們將設計一組四位數的BCD計數器,並將計數動作以多工掃描的方式顯示在力浦電子LP-2900實驗板上的六合一七段顯示器元件(高電位驅動)上。 e a b c d f g DE3 DE1 DE2 為了節省CPLD I/O 腳位的使用,LP-2900實驗板上已經用一顆74138解碼器連接六個七段顯示器的共同點C1~C6,因此我們僅需以CPLD來控制74138解碼器的DE3、DE2和DE1三個輸入端即能選擇所欲點亮的七段顯示器。 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

94 單元6-2 四位數BCD計數器設計與頻率控制 實驗功能
當Enable=’0’時,計數器不動作;Enable=’1’開始執行計數動作。Enable鍵連接至實驗板上的SW6這個開關。 當clear=’1’時,計數器被重置為0。Clear鍵連接至實驗板上的SW5這個開關。 SW1和SW2這兩個開關決定掃描頻率。 SW3和SW4這兩個開關決定計數頻率。 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

95 單元6-2 四位數BCD計數器設計與頻率控制 實驗電路圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

96 單元6-2 四位數BCD計數器設計與頻率控制 程式與說明 十模計數器(略) 頻率產生器 陳慶逸、林柏辰編著---文魁資訊
VHDL數位電路實習與專題設計

97 單元6-2 四位數BCD計數器設計與頻率控制 四位數BCD上數計數器程式碼 24 elsif en = '1'then
if bcd0="1001"then bcd0<="0000"; if bcd1="1001"then bcd1<="0000"; if bcd2="1001"then bcd2<="0000"; if bcd3="1001"then bcd3<="0000"; else bcd3<= bcd3+'1'; end if; else bcd2<= bcd2+'1'; end if; 四位數BCD上數計數器程式碼 11 entity BCD4_counter is 12 13 port(clk,clr,en : in std_logic; bcd3,bcd2,bcd1,bcd0:buffer std_logic_vector(3 downto 0)); 15 end BCD4_counter; 16 17 architecture a of BCD4_counter is 18 begin 19 process (clk) 20 begin 21 if clk'event and clk = '1' then if clr = '1' then bcd3<= "0000" ;bcd2<="0000"; bcd1<="0000"; bcd0<="0000"; else bcd1<= bcd1+'1'; end if; else bcd0<= bcd0+'1'; end if; end if; 46 end if; 47 end process; 48 end a; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

98 單元6-2 四位數BCD計數器設計與頻率控制 多工掃描顯示之七段顯示器解碼電路設計程式碼
10 entity sevseg_lp2900 is 11 port( x:in std_logic_vector(3 downto 0); y:out std_logic_vector(6 downto 0)); 13 end sevseg_lp2900; 14 15 architecture a of sevseg_lp2900 is 16 begin " " when "0110", " " when "0111", " " when "1000", " " when "1001", " " when "1010", " " when "1011", " " when "1100", " " when "1101", " " when "1110", " " when "1111", " " when others; 35 end a; 17 with x select y <= " " when "0000", " " when "0001", " " when "0010", " " when "0011", " " when "0100", " " when "0101", 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

99 單元6-2 四位數BCD計數器設計與頻率控制 四對一多工器(略) 四位元寬位之四對一多工器(略) 二位元計數器(略)
陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

100 單元6-2 四位數BCD計數器設計與頻率控制 主程式碼的腳位連結結構圖 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

101 單元6-2 四位數BCD計數器設計與頻率控制 功能模擬與CPLD下載驗證 (LP-2900實驗板) 輸入 腳位 輸出 Clk_in 55
Y(6) 23(a) Clear 59(SW5) Y(5) 26(b) Enable 60(SW6) Y(4) 27(c) Scan_freq_sel(1) 47(SW1) Y(3) 28(d) Scan_freq_sel(0) 48(SW2) Y(2) 29(e) counter_clk_sel(1) 49(SW3) Y(1) 30(f) counter_clk_sel(0) 51(SW4) Y(0) 31(g) DE3 37 DE2 36 DE1 33 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

102 單元6-2 四位數BCD計數器設計與頻率控制 功能模擬與CPLD下載驗證 (LP-2900實驗板)(續) 陳慶逸、林柏辰編著---文魁資訊
VHDL數位電路實習與專題設計

103 勘誤 3-8 圖3-4裡的文字Counter value變成Counter ue 3-18 46列 IF沒有粗體
陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計


Download ppt "VHDL數位電路實習與專題設計 文魁資訊-UE301"

Similar presentations


Ads by Google