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

Slides:



Advertisements
Similar presentations
什么是SOPC: SOPC是英文System On a Programmable Chip的缩写,称为片上可编程系统。SOPC将传统的EDA技术、计算机系统、嵌入式系统、数字信号处理等融为一体,综合了各自的优势,且在结构上形成一块芯片。 为什么用SOPC:SOPC是现代电子技术和电子系统设计的发展趋势,建立了电子系统设计的新模式。用户利用SOPC开发平台,自行设计高速、高性能的DSP处理器、特定功能的CPU及其外围接口电路,创建结构最为简洁的电子系统。
Advertisements

牛熊證簡介.
做实验过程中发现的问题: 新建时工程文件夹建立了,但所建实体文件并没存放在其中 文件名不能用汉字
《 E D A 技 术》 课 程 教 学 讲授:伍宗富 湖南文理学院电气与信息工程学院 2017年3月19日星期日.
第4章 VHDL设计初步.
Chapter 5 Sequential Logic Circuit
Combinational Logic 組合邏輯
第6章 VHDL设计应用实例 6.1 8位加法器的设计 6.3 序列检测器的设计 6.4 正负脉宽数控调制信号发生器的设计
电工电子实验中心.
EPF10K10TI144-4晶片燒錄.
数字电子技术 Digital Electronics Technology
第三章 组合逻辑电路 第一节 组合电路的分析和设计 第二节 组合逻辑电路中的竞争与冒险 第三节 超高速集成电路硬件描述语言VHDL
第1章 FPGA概述 1.1 FPGA的发展历程 1.2 FPGA的基本原理 1.3 FPGA的设计方法 1.4 FPGA的设计流程
VHDL數位電路實習與專題設計 文魁資訊-UE301
Chapter 5 Verilog 硬體描述語言
8.9二进制振幅键控(ASK) 调制器与解调器设计
Chapter 5 Verilog硬體描述語言
CH5 數位訊號 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
Ch01-2 Verilog語法 資料流(DataFlow)設計 行為(Behavior)設計
二、相關知識 在數位系統中,資料的表示方式通常是以0與1這兩種基本型態組合而成的,資料若要作處理,則必須將它轉為處理單元所能接受的型式(碼),此即所謂的編碼(encode)。可以完成此編碼工作的電路稱為編碼器(encoder)。而當處理單元將資料處理完之後,則必須將它呈現出來,此時我們需要將它更改為人們所熟悉的資料型式,此種動作我們稱之為解碼(decode)。可以完成此解碼工作的電路稱為解碼器(decoder)。
VHDL 硬體描述語言 數位電路設計實務 第四章 VHDL 的語言結構.
VHDL 硬體描述語言 數位電路設計實務 第六章 函數副程序以及套件程式庫.
EDA原理及应用 何宾
使用VHDL設計—4位元減法器 通訊一甲 B 楊穎穆.
EDA原理及应用 何宾
第九章 数字系统设计 数字系统设计概述 ASM图、MDS图以及 ASM图至MDS图的转换 数字密码引爆器系统设计 数字系统设计实例 小结.
欢迎参加VHDL培训 VHDL培训教程 浙江大学电子信息技术研究所 电子设计自动化(EDA)培训中心
数字系统设计复习 Digital System Design Summary
第13章 数字电路基础 13.1 数字电路概述 13.2 数字电路中的数值与码制 13.3 逻辑代数 13.4 逻辑门电路
使用VHDL設計—向上&向下計數器 通訊一甲 B 楊穎穆.
7.5 时钟设计.
计算机操作系统 第二章 进程管理 高校教师、高级项目经理 任铄 QQ:
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
Danny Mok Altera HK FAE AHDL培训教材 Danny Mok Altera HK FAE 2018/12/9 P.1.
EDA 技术及应用 实验安排.
第2章 Quartus II设计向导 2.1 频率计的VHDL设计 2.2 使用宏功能块设计频率计 2.3 嵌入式系统块ESB的应用
第14章 其它DSP设计库 14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库
數位邏輯設計 題目:七段顯示器 姓名:黃志民 學號:B 數位邏輯設計.
LP-2900的周邊腳位規劃.
使用VHDL設計--Moore Machine
JTAG INTERFACE SRAM TESTER WITH C-LCM
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
使用VHDL設計-多工器/解多工器 通訊一甲 B 楊穎穆.
第12章 图像边缘检测器的设计与分析 12.1 系统设计要求 12.2 系统设计方案 12.3 主要LPM原理图和VHDL源程序
第 2 章 数字逻辑电路基础 和计算机中的逻辑部件
第五章 VHDL设计基础 本章重点: 本章难点: VHDL程序结构 VHDL的基本数据类型 VHDL的基本描述语句 基本组合逻辑电路设计
第六章 VHDL设计共享.
第五章 VHDL主要描述语句.
移相正弦信号发生器设计 采用直接数字综合器DDS发生器的设计 原理:图1是此电路模型图
使用VHDL設計—4位元ALU電路 通訊一甲 B 楊穎穆.
第一次上机安排 第六周 第七周 周一晚(提高1、2,通信001~012) 周二上(通信014~085) 周四上(通信086~154)
抢答器 设计一个2人抢答器。要求如下: 设计任务 1.两人抢答,先抢为有效,用发光二极 管显示是否抢到优先答题权。
计算机学院 数字逻辑实验的要求.
5-6 串列埠模式0輸出埠擴充實習.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
數位邏輯設計 VHDL.
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
羊樂多笛笛 作者:吳滋錕、劉智昇.
使用VHDL設計-8x1多工器 通訊一甲 B 楊穎穆.
自停式向下計數器 通訊一甲 B 楊穎穆.
第7章 VHDL设计应用实例 7.1 8位加法器的设计 7.2 分频电路 7.3 数字秒表的设计.
可變式計數器 通訊一甲 B 楊穎穆.
人民音乐出版社 七年级.
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2009年10月22日
按键处理部分 王安然.
Programmable Logic System Design
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
第七章 基本逻辑电路设计.
Programmable Logic System Design
Presentation transcript:

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

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

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

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

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

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

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( 1.8432x106/2) PULSE 陳慶逸、林柏辰編著---文魁資訊 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數位電路實習與專題設計

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

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

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

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

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

3-2-1 Moore狀態機 Moore狀態機的輸出與狀態有關,與輸入無關。 Moore狀態機對應之真值表 現態 次態 X=0 X=1 輸出   X=0 X=1 輸出 S0 S1 1 S3 S2 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) 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數位電路實習與專題設計

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

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

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

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

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

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

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

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

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

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

單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 相關知識 將1843200Hz除頻得到8Hz頻率輸出 1.8432x106 divisor(230400) CN2 divisor/2 以自由計數器得到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數位電路實習與專題設計

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

單元5-1 產生1、2、4、8Hz不同頻率之除頻器設計 功能模擬與CPLD下載驗證 燒錄於力浦電子LP-2900實驗板 更改除頻程式如下: 腳位配置圖: 12 entity clk_div_LP2900 is 13 generic(divisor:integer:= 1250000); 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數位電路實習與專題設計

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

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

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

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

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

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

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

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

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

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

單元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( 16 clk_in : in std_logic; 17 clk_out: out std_logic 18 ); 19 end clk_div_music; 20 21 architecture arch of clk_div_music is 22 signal cnt2 : std_logic; 23 begin 24 ---------- clk divider ---------- 25 process(clk_in) 26 variable cnt1,divisor2 : integer range 0 to divisor; 27 begin 28 divisor2:=divisor/2; 29 ----- up counter ----- 30 if (clk_in'event and clk_in='1') then 31 if cnt1 = divisor then 32 cnt1 := 1; 33 else 34 cnt1 := cnt1 + 1; 35 end if; 36 end if; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

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

單元5-3 簡易電子琴設計 程式與說明 簡易電子琴主程式碼 23 component clk_div_music 24 generic(divisor:integer:=8); 25 port( 26 clk_in : in std_logic; 27 clk_out: out std_logic 28 ); 29 end component; 30 31 signal clk1,clk2: std_logic; 32 33 begin 34 35 u1: clk_div_music 36 generic map(7045) --Do 261.6Hz 1.8432M->7045 37 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( 15 clk : in std_logic; 16 sel : in std_logic_vector(1 downto 0); 17 music_out : out std_logic 18 ); 19 end music; 20 21 architecture arch of music is 22 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

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

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

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

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

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

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

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

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

單元5-4 Moore狀態機與電子音樂歌曲的編輯製作 28 29 30 begin 31 32 u1: clk_div_music 33 generic map(38226) --Do 261.6Hz 34 port map(clk,clk1); 35 u2: clk_div_music 36 generic map(34048) --Rai 293.7Hz 37 port map(clk,clk2); 38 u3: clk_div_music 39 generic map(30339) --Mi 329.6Hz 40 port map(clk,clk3); 41 u4: clk_div_music 42 generic map(28638) --Fa 349.1Hz 43 port map(clk,clk4); 44 u5: clk_div_music 45 generic map(25510) --so 392.0Hz 46 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 16 ); 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( 24 clk_in : in std_logic; 25 clk_out: out std_logic 26 ); 27 end component; 47 u6: clk_div_music 48 generic map(22727) --La 440.0Hz 48 port map(clk,clk6); 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

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

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

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

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

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

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

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

單元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 <= "00101001110010100001100100010 11001000100001000000100010001 00011011001000011101001 011100011100011001010000"; 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; 14 ringen : in std_logic; 15 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數位電路實習與專題設計

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

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

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

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

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

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

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

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

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

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

單元6-1 二位數BCD計數器設計 程式與說明 BCD上數計數器程式碼 12 entity up_counter4_10 is 13 port( 14 clk : in std_logic; --system clock 15 rst_n : in std_logic; --reset 16 ce : in std_logic; --chip enable 17 q_one : out std_logic_vector(3 downto 0); --counter one output 18 q_ten : out std_logic_vector(3 downto 0) --counter ten output 19 ); 20 end up_counter4_10; 21 22 architecture a of up_counter4_10 is 23 24 ---------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數位電路實習與專題設計

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

單元6-1 二位數BCD計數器設計 程式與說明 多工掃描顯示之七段顯示器解碼電路設計程式碼 23 entity bin2seg0_scan is 24 port ( 25 clk : in std_logic; --64hz clock 26 seg_en: in std_logic; --segment enable 27 q_one: in std_logic_vector(3 downto 0); --binary input of one 28 q_ten: in std_logic_vector(3 downto 0); --binary input of ten 29 seg_out : out std_logic_vector(6 downto 0); --7segment output 30 seg_one_en: out std_logic; --7segment one enable 31 seg_ten_en: out std_logic --7segment ten enable 32 ); 33 end bin2seg0_scan; 34 35 architecture arch of bin2seg0_scan is 36 37-------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數位電路實習與專題設計

單元6-1 二位數BCD計數器設計 程式與說明 多工掃描顯示之七段顯示器解碼電路設計程式碼 (續) 53 sel<=sel+1; 54 case sel is 55 when 0 => 56 bin<=q_one; 57 seg_out<=seg; 58 seg_one_en<='0'; 59 seg_ten_en<='1'; 42 43 ---------PROGRAM BODY-------------- 44 ----------scan and signal assign--- 45 process (clk, seg_en) 46 begin 47 if clk'event and clk='1' then 48 if (seg_en='0') then 49 seg_one_en<='0'; 50 seg_ten_en<='0'; 51 sel<=0; 52 else 60 when 1 => 61 bin<=q_ten; 62 seg_out<=seg; 63 seg_one_en<='1'; 64 seg_ten_en<='0'; 65 when others => 66 null; 67 end case; 68 end if; 69 end if; 70 end process; 71 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

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

單元6-1 二位數BCD計數器設計 程式與說明 低電位動作之四對八解碼電路程式碼 (略) 掃描式多工顯示之兩位數BCD計數器主程式碼 27 -------COMPONENT DECLARED--------------------- 28 ---------clk_div 1hz 64hz component---------- 29 component clk_div_1_64 30 port( 31 clk_in : in std_logic; 32 clk_out1: out std_logic; 33 clk_out2: out std_logic 34 ); 35 end component; 36 11 entity up_scan_top is 12 port ( 13 clk : in std_logic; -- 1.8432 MHz 14 rst_n : in std_logic; 15 ce : in std_logic; 16 led_en : in std_logic; 17 seg_en : in std_logic; 18 led : out std_logic_vector(7 downto 0); 19 seg_out : out std_logic_vector(6 downto 0); 20 seg_one_en: out std_logic; 21 seg_ten_en: out std_logic 22 ); 37 ---------up_counter_4_10 component---------- 38 component up_counter4_10 39 port( 40 clk : in std_logic; --system clock 41 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數位電路實習與專題設計

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

單元6-1 二位數BCD計數器設計 程式與說明 掃描式多工顯示之兩位數BCD計數器主程式碼 (續) 61 ---------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) 67 ); 68 end component; 69 70 ---------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 78 ----------Frequency divider---------- 79 u1: clk_div_1_64 port map (clk, clk_1hz, clk_64hz); 80 81 ----------4 bit up counter---------- u2: up_counter4_10 port map (clk_1hz, rst_n, ce, q_one, q_ten); 83 84 ----------binary to LED decoder---------- 85 u3: bin2led0_10 port map (led_en, q_one, led); 86 87 ----------binary to seven segment decoder---------- u4: bin2seg0_scan port map (clk_64hz, seg_en, q_one, q_ten, seg_out, 89 seg_one_en, seg_ten_en); 90 end arch; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

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

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

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

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

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

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

單元6-2 四位數BCD計數器設計與頻率控制 四位數BCD上數計數器程式碼 24 elsif en = '1'then 25 if bcd0="1001"then 26 bcd0<="0000"; 27 if bcd1="1001"then 28 bcd1<="0000"; 29 if bcd2="1001"then 30 bcd2<="0000"; 31 if bcd3="1001"then 32 bcd3<="0000"; 33 else 34 bcd3<= bcd3+'1'; 35 end if; 36 else 37 bcd2<= bcd2+'1'; 38 end if; 四位數BCD上數計數器程式碼 11 entity BCD4_counter is 12 13 port(clk,clr,en : in std_logic; 14 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 22 if clr = '1' then 23 bcd3<= "0000" ;bcd2<="0000"; bcd1<="0000"; bcd0<="0000"; 39 else 40 bcd1<= bcd1+'1'; 41 end if; 42 else 43 bcd0<= bcd0+'1'; 44 end if; 45 end if; 46 end if; 47 end process; 48 end a; 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

單元6-2 四位數BCD計數器設計與頻率控制 多工掃描顯示之七段顯示器解碼電路設計程式碼 10 entity sevseg_lp2900 is 11 port( x:in std_logic_vector(3 downto 0); 12 y:out std_logic_vector(6 downto 0)); 13 end sevseg_lp2900; 14 15 architecture a of sevseg_lp2900 is 16 begin 24 "1011111" when "0110", 25 "1110000" when "0111", 26 "1111111" when "1000", 27 "1111011" when "1001", 28 "1110111" when "1010", 29 "0011111" when "1011", 30 "1001110" when "1100", 31 "0111101" when "1101", 32 "1001111" when "1110", 33 "1000111" when "1111", 34 "0000000" when others; 35 end a; 17 with x select 18 y <= "1111110" when "0000", 19 "0110000" when "0001", 20 "1101101" when "0010", 21 "1111001" when "0011", 22 "0110011" when "0100", 23 "1011011" when "0101", 陳慶逸、林柏辰編著---文魁資訊 VHDL數位電路實習與專題設計

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

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

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

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

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