以vhdl 實現馬達與人機介面之 - fcu.edu.t · 以vhdl 實現馬達與人機介面之 fpga...

55
自動控制工程學系專題製作 VHDL 實現馬達與人機介面之 FPGA 設計 Using VHDL to Materialize the Design of Motor with Human-machine Interface 指導教授:黃建立 :王詠傑 魏宏斌 中華民國九十三年五月十四日

Upload: others

Post on 20-Jan-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

  • 逢 甲 大 學

    自動控制工程學系專題製作

    專 題 論 文

    以 VHDL實現馬達與人機介面之

    FPGA設計

    Using VHDL to Materialize the Design of Motor with Human-machine Interface

    指導教授:黃建立

    學 生 :王詠傑

    魏宏斌

    中 華 民 國 九 十 三 年 五 月 十 四 日

  • i

    誌謝

    從大三開始,在與恩師黃建立教授的多次互動討論中,我們確定了研究方向,

    也開始了我們的研究生涯。在這一年來的研究時間裡,我們遇到了許多問題、也

    遭遇過許多挫折,但是在每次與老師的互動討論下,還有學長的幫忙、指導下,

    許多問題都迎刃而解,我們的專題研究也才有成果出來。

    在這一年多來的專題研究製作中,還要特別感謝其他幾位一起研究 VHDL 語

    言設計製作的同學溫郭鴻、呂侑儒、黃泰元、程家榮,謝謝這幾位夥伴陪伴著我

    們一起奮鬥、一起成長,走過這一年來充實又精采的時光,因為他們的協助與互

    相討論讓我們彼此在 VHDL 語言的設計與製作上都有長足的進步,奠定了邏輯程

    式設計的基礎。

    本論文,獻給我們最深愛的父母與家人,也獻給一起打拼的夥伴與同學,你

    們給了我們最大的精神支持,讓我們可以全心全意的投入從事專題的研究,未來

    也將帶著所有人的關心繼續挑戰每個人生的關卡,努力不懈、勇往直前。

  • ii

    中文摘要

    隨著電子產品更新的速度越來越快,功能需求越來越大,為了要在極短的時

    間內設計出一個功能強大的控制電路,並且合乎實際的商業用途,利用價格低廉

    的場效可程式化閘陣(FPGA),把系統實現成體積微小的獨立式系統,由於不需

    要任何的作業軟體,而且 FPGA 的價格低廉,適合大量生產應用,所以比較合乎

    實際的商業用途。並且因 VHDL 具有極佳的相容性,可減輕與簡化由系統模型到

    硬體結構的轉譯負擔。在系統模型到 VHDL 轉譯上,以元件式技術為依據,以元

    件之封裝性、再用性及擴展性提升了轉譯效率,使得轉譯能進一步地吸納多方位

    的成果,更助長了整體系統實用性與提昇技術更新速率。本專題之研究,為使用

    硬體描述語言 VHDL規劃成自己所需要的硬體控制電路,配合上 FPGA可程式化

    硬體設備中的相關模組,而發展出一套馬達與人機介面之控制器實現。

  • iii

    Abstract

    Electronic products are renewed speedy in recently years. The function demand of

    electronic products is getting more and more large. In order to design a function

    formidable control circuit in a short period of time, it had to correspond to practice

    business purpose. We develop a tiny independent system with the application of low

    cost filed programmable gate arrays (FPGA). It is suitable for mass production, owning

    to the saving of software and applying of low cost FPGA. And it is more corresponding

    with practical and commercial purpose. VHDL is compatible with many other

    languages. VHDL can mitigate and simplify the translation of the system module to the

    hardware structure. Since the component has the characters of encapsulation, reuse, and

    expansion, translating system module into VHDL using the component-based technique,

    the efficiency of the translation would be enhanced. The translation module is more

    inclusive in nature and, thus, the architecture of FPGA-Based controller system can also

    be promoted with efficiency. In this project we tried to design hardware controller

    circuits by using the Very High Speed Integrated Circuit Hardware Description

    Language (VHDL). We developed a human-computer interface of the motor controller,

    which materialized by using FPGA programmable hardware equipment correlation

    modeling.

  • iv

    目錄

    致謝…………………………………………………………………………………….i

    中文摘要……………………………………………………………………………....ii

    英文摘要……………………………………………………………………………...iii

    目錄…………………………………………………………………………………...iv

    圖目錄………………………………………………………………………………...vi

    第一章 前言…………………………………………………………………………1

    1.1 VHDL概論 ................................................................................................... 1 1.2 研究動機 ...................................................................................................... 2 1.3 VHDL電路設計方法 ................................................................................... 2 1.4 VHDL電路設計之優點 ............................................................................... 3 1.5 FPGA發展系統 ............................................................................................ 3

    第二章 VHDL語言的程式結構及保留字…………………………………………5 2.1 VHDL的程式結構 ....................................................................................... 5 2.2 註解欄Comment .......................................................................................... 6 2.3 Library .......................................................................................................... 6 2.4 單體Entity .................................................................................................... 6 2.5 PORT ............................................................................................................ 8 2.6 架構Architecture .......................................................................................... 8 2.7 架構Architecture的描述方式 ...................................................................... 9 2.8 一個完整的VHDL程式 ............................................................................. 10 2.9 識別字Identifier ......................................................................................... 11

    第三章 VHDL的敘述與寫法……………………………………………………..12 3.1 同時工作敘述(Concurrent Statements) ..................................................... 12

    3.1.1 區塊敘述 ......................................................................................... 12 3.1.2 叫用元件敘述(Component Instantiation Statement)...................... 12 3.1.3 同時程式叫用敘述(Concurrent Procedure Call Statement)........... 12 3.1.4 同時訊號設定(Concurrent Signal Assignment Statement) ............ 13 3.1.5 產生敘述(Generate Statement) ....................................................... 13 3.1.6 產生程式敘述(Process Statement) ................................................. 13

    3.2 循序工作敘述(Sequential Statements) ...................................................... 15 3.2.1 CASE 敘述 ..................................................................................... 15 3.2.2 LOOP敘述....................................................................................... 15 3.2.3 IF敘述.............................................................................................. 16 3.2.4 循序程式叫用敘述(Procedure Call Statement).............................. 17

  • v

    3.2.5 Function與Return敘述 .................................................................... 17 3.2.6 訊號設定(Signal Assignment Statement) ....................................... 17 3.2.7 變數設定(Variable Assignment Statement) .................................... 18 3.2.8 WAIT敘述 ....................................................................................... 18 3.2.9 Generic與Generic map敘述 ............................................................ 19 3.2.10 零件盒(Package)的運用 ............................................................... 19

    3.3 結構模式描述法 ........................................................................................ 19 3.3.1 元件之宣告 ..................................................................................... 19 3.3.2 元件之連接 ..................................................................................... 20 3.3.3 階層式設計 ..................................................................................... 21

    第四章 VHDL應用在FPGA發展系統…………………………………………...22 4.1 鍵盤掃描模組 ............................................................................................ 22

    4.1.1 基本原理 ......................................................................................... 22 4.1.2 設計目標及流程圖 ......................................................................... 23 4.1.3 主程式 ............................................................................................. 24

    4.2 歩進馬達模組 ............................................................................................ 29 4.2.1 基本原理 ......................................................................................... 29 4.2.2 設計目標及流程圖 ......................................................................... 31 4.2.3 主程式 ............................................................................................. 31

    4.3 馬達與人機介面 ........................................................................................ 35 4.3.1 設計目標及流程圖 ......................................................................... 35 4.3.2 主程式 ............................................................................................. 37

    第五章 結論………………………………………………………………………..44 5.1 專題研究心得 ............................................................................................ 44 5.2 未來發展方向 ............................................................................................ 46

    參考文獻………………………………………………………………………...……..47

  • vi

    圖目錄

    圖 2.1 單體電路意義……………………………………………………………..7

    圖 2.2 VHDL程式結構圖………………………………………………………10

    圖 3.1 階層式設計………………………………………………………………21

    圖 4.1 矩陣式鍵盤按鍵偵測法…………………………………………………23

    圖 4.2 鍵盤模組設計流程圖……………………………………………………24

    圖 4.3 四相式歩進馬達激磁順序………………………………………………30

    圖 4.4 歩進馬達設計流程圖……………..……………………………………..31

    圖 4.5 馬達與人機介面模組……………………………………………………35

    圖 4.6 馬達與人機介面設計流程圖……………………………………………36

    圖 5.1 多功能控制器設計圖……………………………………………………46

  • 第一章 前言

    1.1 VHDL概論

    VHDL 即是 VHSIC Hardware Description Language 的縮寫,意指著極高速

    積體電路硬體描述語言,它是一個可以從抽象的層次到具體層次來描述硬體的工

    業界標準語言,而其中 VHSIC就是 Very high speed integrated circuit,其意義就

    是非常高速的積體電路。這是一項原由美國國防部所支持的一項研究計畫。它為

    的就是將電子電路的設計意涵以檔案的方式保存下來,以便讓其他人觀看其電路

    時,能更加輕易的瞭解其電路的設計意義。

    其實 VHDL 是由七十年代後期到八十年代初期美國國防部所推動之極高速

    積體電路(VHSIC)計畫所衍生出來的,而其計畫的目的主要在積極突破積體電路

    設計和製造等各個技術層面的限制以開發新一代的積體電路。但在研發這些極為

    複雜的積體電路的過程中,設計者卻發現當時用來輔助這些大型積體電路的軟體

    工具在功能上是不足以使用的。因當時所能使用的軟體工具主要都是針對邏輯閘

    層次設計為基礎而開發的,若是要利用這些邏輯閘層次設計輔助軟體,設計具有

    數十萬甚至數百萬個邏輯閘超大型積體電路是一個極具有挑戰性的任務,於是才

    發展出 VHDL 這種設計語言來作為硬體設計在暫存器轉移層次的描述工具。同

    時這種新語言的產生具有雙重的目標。首先,設計者想要有一種語言,VHDL就

    能處理我們所要盡力描述的複雜電路。另外,若我們想要一個標準的硬體描述語

    言,可使得 VHSIC計畫中的所有成員能透過這個標準的格式來交流他們的設計。

    我們瞭解到,VHDL電路設計語言的規範目的,在於提供一個高階而且快速

    的電路設計工具,它主要包含了電路描述(Descriptions)、電路合成(Synthesis)與

    電路模擬(Simulations)等三個電路設計工作。而學生此專題之研究,即是將 VHDL

    應用在 FPGA之發展系統上。

    1

  • 1.2 研究動機

    目前在業界,硬體描述語言 VHDL普遍的被運用在設計電路,使用 VHDL

    語言,描述一個複雜的電路系統,可以用一般軟體的模組化觀念來描述數位系統

    的規格及功能,然後再將編寫好的 VHDL語言翻譯成電子線路,可以節省傳統

    人工拼湊電子元件所浪費的時間。大型的電子電路,例如微處理器在傳統上不可

    能用 TTL與 CMOS慢慢拼湊出來,而且使用這種語言我們可以輕易的建立出數

    位模型來,經由數位電路合成進行模擬及驗證,便可以建立出一個控制系統來控

    制外部硬體的動作,而使用 VHDL語言設計的電路,好處是皆可製成縮裝電路。

    而我們打算以此發展系統來設計、控制馬達、LED、七段顯示器、矩陣鍵盤、喇

    叭等模組,來達成比傳統設計電路更有效率之設計。

    1.3 VHDL電路設計方法

    VHDL 電路設計語言提供了一個用來描述電路特性與行為的工業標準語

    言。VHDL的標準描述方式已經廣被各種電腦輔助電子電路設計工具所採用,包

    含有電路模擬工具、電路合成工具,以及電路佈局工具等等。以下就其基本的主

    要架構先做描述,在下一章節會做其更深入之語法描述:

    單體(Entity):一個設計中最基本的一部份就是單體,在其這一部份當中,通

    常描述電路設計中輸入輸出訊號的宣告。而 Entity 也是 VHDL 語言中的保留字

    之一。

    架構(Architecture):架構是描述電路特性的主要部份,假如以電路圖的方式

    論之,架構的部份相當於電路中的設計圖,用來描述各個元件間相互連結的情

    形。而 VHDL語言中描述輸入埠的單體就相當於電路圖設計中的 Symbols。

    套件(Package):我們可以將一些次程式、程式及一些常用的資料型態,放在

    一個套件中。如此此套件就形成了一個工具箱,如果在設計中有應用到套件的程

    式時,只要將其套件名稱寫在程式最開頭的部份,則其程式中的每一個角落裡,

    均可使用此套件中所定義的物件或次程式。VHDL 語言中的 PACKAGE 就相當

    2

  • 於 C語言中的標頭檔的腳色。

    屬性(Attribute):用來描述各種資料物件的特性。

    1.4 VHDL電路設計之優點

    1. 功能強大:就其系統的垂直整合而言,它從 ASIC 設計到電路板設計,甚至

    大型電路板的設計,甚至到大型系統的設計,VHDL設計語言均能派上用場。

    2. 設計靈活:此 VHDL系統將電子電路的設計方式,改變成以行為化描述的方

    式來設計,因此具有設計快速、更改及維護容易、犯錯機率降低及除錯便利

    等優點。此外 VHDL 更具有高流通性,亦使得使用者瞭解而採用。

    3. 具有各種不同的描述風格:VHDL 系統其提供多種不同的描述風格,來適應

    大小、複雜性不同的電路設計。

    4. 可共通性與可攜帶性:其系統可用不同的模擬器來進行不同的電路模擬,更

    可適用於任何種類的邏輯元件與半導體製程技術。

    1.5 FPGA發展系統

    學生研究此專題之重點,就是將 VHDL 此種硬體描述語言運用到 FPGA 發

    展系統上,藉由此發展系統上之模組來完成學生所要實現之控制器,以下就是介

    紹此 FPGA發展系統:

    在過去十年中我們發現,已經快速發展出許多不同種類的可程式化硬體元

    件。這些元件包括:可配置硬體、可程式化硬體等等,而其 FPGA即為一種可程

    式化硬體元件。FPGA就是所謂的場效可程式化閘陣,其架構觀念十分的簡單。

    一般而言組合和循序電路皆可由矽晶片來實現這樣的特殊功能,積體電路有著較

    高的效能但只能進行一種功能應用。所以一種特殊功能的積體電路並不能同時使

    用於許多不同的應用,因此開發成本一般都會高出許多。對我們而言我們則希望

    有一套可程式化的硬體,如此一來我們便可改變一程式或其中的指令來控制此硬

    體執行不同的應用,一個理想的硬體應有能力重配置晶片之間的連線以計算適用

    於一新應用的新功能,因此 FPGA即為我們所需要之可程式化硬體。

    3

  • 由於 FPGA提供了一個可實現嵌入式低價位控制器、可程式化硬體的解決之

    道,近幾年來 FPGA的應用大受歡迎。不但如此 FPGA也逐漸的在高效能設計上

    嶄露頭角。我們也可觀察到,最近一些 FPGA的應用不但設計成本上十分低,同

    時在效能上也比現在的 ASIC設計來的好。由於此低成本高效能的優勢在一些特

    殊應用的市場上掀起了一陣研發的熱潮。

    4

  • 第二章 VHDL語言的程式結構及保留字

    VHDL程式的寫法,有其固定的模式,本章主要介紹 VHDL基本、常見的

    程式結構,以及不可重複、缺少的保留字。

    2.1 VHDL的程式結構

    硬體描述語言 VHDL在設計上,程式結構有其固定的一個結構。舉一個

    VHDL程式來說明其固定結構:

    1:--*************************

    註解 2:-- 註解 3:--************************ 4: 5:library IEEE;

    所使用的 Library 6:use IEEE.std_logic_1164.all 7: 8:entity notgate is 9:port(

    輸入及輸出接腳(包裝)

    的定義

    10: A: in std_logic; 11: F: out std_logic 12:); 13:end notgate; 14: 15:architecture notgate_arch of notgate is 16:begin

    電路規劃 17: F

  • 第十五到第十八行用來描述所要規劃的硬體電路。

    上述程式結構中每一個部分皆十分重要,每個部分在下面幾小節有詳細的介

    紹。

    2.2 註解欄 Comment

    就像普通的語言一樣,註解欄的目的在於提高程式的可讀性以利於將來程式

    的維護,因為它只是用來提醒我們目前的程式到底在做什麼或者該注意什麼,也

    方便我們快速尋找想要更改程式的部分。在 VHDL語言中,註解欄必須以“--"

    為開頭,而且每一行要註解的開頭都必須要有,它可以出現在程式的任何一個地

    方,需要注意的是,在寫作程式經驗中,有時後註解不一定可以通過 complier,

    尤其是註解後面是中文字,有時候必須砍掉註解才能通過 complier,算是 VHDL

    的 bug之一。

    2.3 Library

    當我們設計程式時,為了快速、方便設計,往往會用到許多自己或別人或系

    統內部的定義及程式,如 function、procedure...等,此時就需要以 Library

    指令宣告,尤其在 VHDL語言中系統已經定義並提供了很多資料、程式庫...

    等供我們使用,其語法為:

    Library;

    不過通常宣告完後,還需要說明要使用此定義中的哪些部分,像是:

    Library IEEE; use IEEE.std_logic_1164.all use IEEE.std_logic_arith.all use IEEE.std_logic_unsigned.all

    而上面的三行宣告,正是專題中,用到最多的。

    2.4 單體 Entity

    單體 Entity為設計程式中必須具備的一個部分,它就像我們所要設計硬體電

    路的方塊圖,也就是一個硬體電路的外部包裝,而其基本語法為:

    entity entity_name is

    6

  • port( ); end entity_name;

    說明:

    entity_name為單體的名稱,可以自由命名,要注意的是,必須與存檔檔案

    名稱相同,否則程式在 complier的時候過不了,而 port括弧中間的敘述為外部

    接腳的宣告,而其他部分,就是單體固定寫法的架構,不能更改。而其電路意義

    如下面的例子:

    entity notgate is port( A: in std_logic; F: out std_logic ); end notgate;

    A F

    硬體電路

    圖 2.1單體電路意義

    7

  • 2.5 PORT

    上面說過 port內宣告的是外部接腳,其工作模式總共有五類:

    1. 輸入 IN

    2. 輸出 OUT

    3. 輸入輸出雙向 INOUT

    4. 緩衝器 Buffer

    5. 連結 Linkage

    輸入 IN:

    代表所宣告接腳的工作模式為輸入,亦就是說此接腳可以接受單體以外的電

    路訊號來觸發及驅動。

    輸出 OUT:

    代表所宣告接腳的工作模式為輸出,亦就是說此接腳只能輸出訊號去驅動單

    體外部的電路。

    輸出入雙向 INOUT:

    代表所宣告接腳工作模式為雙向,亦就是說此接腳的訊號可以驅動單體以外

    的電路,同時它也可以回授到單體內部使用,當接腳被宣告成 INOUT時,它同

    時代表 IN、OUT及 Buffer的工作模式,不過此宣告在寫作實務上很少使用。

    緩衝器 Buffer:

    代表所宣告接腳的工作模式為一種可以將訊號回授到單體內部的輸出模

    式,不過跟 INOUT一樣,在寫作實務也很少使用。

    2.6 架構 Architecture

    架構部分最主要的工作在於描述我們所要設計電路的行為與特性,說清楚一

    些就是方塊圖內的硬體電路,它就像電路圖設計方式中你所輸入用來描述每個元

    件中間相互連接的電路圖(只是於 VHDL中我們是用語言來實現)。至於電路圖內

    的 Symbols於 VHDL語言中就相當於前面提到的輸入、輸出 PORT。其語法為:

    8

  • architecture ARCH_NAME of ENTITY_NAME is ; begin ; end ARCH_NAME;

    說明:

    ENTITY_NAME要跟前面單體的名稱相同,也就是跟檔案的名稱要相同,

    而 architecture...of...is...begin...end這些為保留字,不可以更

    改,而 ARCH_NAME可自行命名,要注意的是前後 ARCH_NAME需相同。而

    中間的 declaration則為一些信號 Signal、元件 Component、常數 Constant...

    等的宣告。statement為電路設計的主體。

    2.7 架構 Architecture的描述方式

    架構 Architecture用來組成內部實體的控制電路,一般而言,用來描述此架構

    的風格大致上有三種:

    1. 資料流描述 Data Flow Description

    2. 行為描述 Behavior Description

    3. 結構描述 Structure Description

    而這三種風格經由互相組合,便有同時敘述跟循序敘述和結構敘述之別。

    9

  • 2.8 一個完整的 VHDL程式

    VHDL的程式可以區分成好幾個部分,有些可以省略有些不能省略,一個完

    整的 VHDL程式結構及如下面所示:

    Library 宣告

    USE宣告

    PACKAGE宣告

    Entity宣告

    Architecture 資料物件宣告區

    . . .

    Begin end

    Behavior描述

    Structure描述

    Data Flow 描述

    Configuration宣告

    圖 2.2VHDL程式結構圖

    說明:

    1. Library宣告:宣告於程式內所需要使用到的定義、程式...等所在的 Library。

    2. USE宣告:如果一個 Library內定義了許多部門,我們可以用其來指定使用

    10

  • 到哪一個部門。

    3. PACKAGE宣告:宣告程式內所需使用到自己或額外的定義、程式、元件。

    4. Entity宣告:宣告所要設計電路的方塊及其與外界溝通的輸出輸入介面。

    5. Architecture架構:描述或設計硬體電路的區域。

    6. 組態 Configuration:可以選擇不同架構,不過這個在程式寫作上沒用過。

    上述為完整的 VHDL的架構,其實在專題實作上,PACKAGE與 Configuration

    這兩種宣告都沒用到,要設計複雜電路的話,使用後面章節提到的 Component

    配合資料流與行為模式描述來分割設計電路就可以了。

    2.9 識別字 Identifier

    一般來說,系統內部所使用的指令都稱之為保留字,而宣告的一些信號名稱、資

    料物件、元件 Component...等等,都會要自己命名,這時候就要注意到不可

    以跟保留字衝突到,所以就有些限制,如:

    1. 第一個字必須為英文。

    2. 最後一個字不可為“─"。

    3. 不可以連續兩個底線“──"。

    4. 不可以為保留字(保留字到底有哪些,詳見附錄 A)。

    5. 它可以是英文大寫(A~Z)、英文小寫(a~z)、數字(0~9)或者底線“-"。

    還有一點,在 VHDL語言中,系統不會區分英文的大小寫,所以不管大小寫,

    意義都相同。

    11

  • 第三章 VHDL的敘述與寫法

    VHDL的敘述,一般來說共分成兩大類型:同時工作敘述(CONCURRENT)

    與循序敘述(SEQUENTIAL)等兩大類。所謂同時工作敘述,就是說這些敘述同時

    並行(in parallel)地在工作,與敘述的前後順序無關。而循序敘述是說前一個敘述

    執行完後,才緊接著下一個敘述的執行。

    3.1 同時工作敘述(Concurrent Statements)

    電路圖是我們常用的電路表示方式。從圖形我們很自然地瞭解同時工作的事實。

    所以瞭解同時工作敘述最簡單的是將其化成電路圖,如圖,而另一種敘述的方法

    有點類似 C語言寫程式的語法,而其寫法,如宣告。

    3.1.1 區塊敘述

    Block主要是將同一電路中某一功能的電路以方塊敘述劃分起來,形成一個

    獨立的電路模組,最後將這些獨立模組組合起來構成我們的電路,模組化的設計

    方式可以使得系統的維護性和偵錯性大為提高。

    使用範例:

    BLOCK[(看管表示式)][IS] [區塊宣告事項] BEGIN [區塊主體之同時敘述] END BLOCK 標記﹔

    3.1.2 叫用元件敘述(Component Instantiation Statement)

    在結構型架構描述裡,元件叫用可分為叫用零件盒(package)裡的元件與工作

    目錄(work)下的元件等兩種類型。在描述一個龐大電路圖的時候,此種方法的好

    用性即可看出,至於如何使用,會在結構模式描述法裡面提到。

    3.1.3 同時程式叫用敘述(Concurrent Procedure Call Statement)

    所謂的同時程式叫用敘述,就是說這個叫用程式敘述是跟其他敘述一起同時

    執行的。同時叫用程式敘述就是在架構(architecture)宣告區內,先宣告 procedure

    12

  • 電路元件後,然後在架構主體內叫用(可多次叫用)成同時執行敘述。

    3.1.4 同時訊號設定(Concurrent Signal Assignment Statement)

    所謂同時訊號設定敘述,就是說這個訊號設定是跟其他敘述一起同時執行

    的。而簡單的同時訊號就是像:

    SUM

  • 程式是到底端時停止。而格式 2的處理程式是停止在WAIT ON敘述。至於格式

    3,則是無窮迴圈。就語法而言,處理程式必須使用在架構描述裡。同一個架構

    裡,可允許數個內部循序處理的處理程式同時工作,並允許處理程式間有交互訊

    號溝通。

    在格式 1中,process保留字之後括弧中有感測訊號列。這表示感測訊號列

    中任一訊號的變動都將重新運算其隨後 begin至 end process標記﹔間的循序敘

    述,直到穩定為止。而格式 2,則是執行 begin至 end process標記﹔間的循序敘

    述到 wait on暫停。一直等到 wait on訊號出現後在執行至 end process標記﹔間

    的循序敘述到 wait on暫停。按照這個方式不段進行下去。格式 3的 process,由

    於沒有感測訊號列與wait on敘述,所以會不段地執行 begin至 end process標記﹔

    間的循序敘述。

    格式 1: [標記:]PROCESS(感測訊號列) [變數宣告區] BEGIN ─ -循序敘述 - END PROCESS 標記﹔

    格式 2: [標記:]PROCESS [變數宣告區] BEGIN ─ -循序敘述 - WAIT ON 敘述 END PROCESS 標記﹔

    格式 3: [標記:]PROCESS [變數宣告區] BEGIN

    14

  • ─ -循序敘述 - END PROCESS 標記﹔

    3.2 循序工作敘述(Sequential Statements)

    3.2.1 CASE 敘述

    語法: CASE 物件 IS WHEN 數值 1=>

    ──敘述 1 WHEN 數值 2=>

    ──敘述 2 WHEN 數值 3=>

    ──敘述 3 WHEN OTHERS=>

    ──其他 END CASE﹔

    這個 CASE的敘述,意指當物件的值是數值 1時,就執行敘述 1。若是數值

    2的話,就執行敘述 2,...依此類推。數值部份可以宣告的是:單值、範圍、

    清單列示與其他等宣告方式。

    3.2.2 LOOP敘述

    在 VHDL 裡,LOOP敘述共有兩種:(1)FOR-LOOP敘述,(2)WHILE-LOOP

    敘述。FOR-LOOP通常運用於可預知的迴圈次數,而WHILE-LOOP運用於不定、

    不可預知的迴圈控制。

    語法:

    格式 1: FOR 迴圈變數 in 最小迴圈變數初值 to 最大迴圈變數初值 LOOP ──敘述 END LOOP﹔ 簡例: FOR I in 0 to 3 LOOP ──敘述 END LOOP﹔

    15

  • 說明:

    I的值由 0開始,執行敘述,然後 I 在增加1,再執行敘述,反覆此步驟,

    一直到 I 大於 3結束迴圈。

    格式 2: FOR 迴圈變數 in 最大迴圈變數初值 downto 最小迴圈變數初值 LOOP ──敘述 END LOOP﹔

    簡例:

    FOR K in 10 downto 0 LOOP ──敘述 END LOOP﹔

    說明:

    K的值由 10開始,執行敘述,然後 K 在減 1,再執行敘述,反覆此步驟,

    一直到 K小於 0結束迴圈。

    格式3: WHILE 表示式 LOOP ──敘述 END LOOP﹔

    說明:

    這個While…Loop敘述,意指當表示式為“真"時,就繼續執行敘述部分。

    3.2.3 IF敘述

    IF敘述是最常用的敘述。IF敘述的語法,有三個格式。

    語法:

    格式 1: IF 條件表示式 THEN ──循序敘述 END IF﹔

    說明:

    當條件表示式成立時,循序敘述才會執行。

    格式 2: IF 條件表示式 THEN

    16

  • ──循序敘述 A ELSE ──循序敘述 B END IF﹔

    說明:

    當條件表示式成立時,循序敘述 A才會執行,否則執行 B。

    格式 3:

    IF 條件表示式 1 THEN ──循序敘述 A ELSEIF 條件表示式 2 ──循序敘述 B ELSEIF 條件表示式 3 ──循序敘述 C

    ELSE ──循序敘述D END IF﹔

    說明:

    當條件表示式 1,成立時,執行循序敘述 A﹔當條件表示式 2成立時,執行

    循序敘述 B,依此類推。

    3.2.4 循序程式叫用敘述(Procedure Call Statement)

    在 3.1.3節裡提到的程式(procedure),可定義在 architecture宣告區域或是定

    義零件盒(package)裡。目前同時程式叫用敘述在MAX+PLUSⅡ10.1版並不支

    援,但是有支援循序程式叫用敘述,不過在撰寫程式實務上比較少用到。

    3.2.5 Function與 Return敘述

    Function敘述與 Return敘述通常是合用的。一般來說,我們在零件盒裡面利

    用 Function與 Return敘述定義函數元件,然後再叫用出 Function 來,不過此敘

    述也不常使用。

    3.2.6 訊號設定(Signal Assignment Statement)

    “<="這是訊號設定符號,其左邊的物件必須是訊號,而其右邊則可以是

    17

  • 變數或是訊號。不管是變數設定給訊號,或是訊號設定給訊號,他們的資料型態

    必須是互相一致的。

    3.2.7 變數設定(Variable Assignment Statement)

    “:="這是變數設定符號,其左邊的物件必須是變數,而其右邊則可以是

    變數或是訊號。不管是變數設定給變數,或是訊號設定給變數,他們的資料型態

    必須是互相一致的。

    3.2.8 WAIT敘述

    WAIT敘述共有四種語法格式:

    語法:

    格式 1: WAIT FOR<時間長度>﹔

    說明:

    用來等待指定時間長度後,繼續執行後續敘述。不過,MAX+PLUSⅡ10.1

    版並不支援。

    格式 2: WAIT ON<訊號列>﹔

    說明:

    本敘述通常是 PROCESS主體的最後一個敘述,用來監視訊號列的事件以便

    再執行 PROCESS一次。

    格式 3: WAIT UNTIL<條件表示式>﹔

    說明:

    本敘述是等待條件成立後繼續執行 PROCESS。

    格式 4: WAIT﹔

    說明:

    這個敘述通常也是 PROCESS主體的最後一個敘述,用來控制 PROCESS只

    執行一次就永遠停止。

    18

  • 以上敘述,格式 3在撰寫程式的時候比較常用到。

    3.2.9 Generic與 Generic map敘述

    Generic敘述通常被用來定義元件(component)參數的管道。當這個元件被安

    置啟用(instantiate)時,參數的數值同時也會被指定,如果沒有指定則以內定值為

    之。

    語法:

    Generic( 參數名稱:string :=內定值﹔ 參數名稱:integer:=內定值)﹔

    Generic Map(參數名稱=>參數值, 參數名稱=>參數值)

    說明:

    這兩種語法,在撰寫程式上也不常用到。

    3.2.10 零件盒(Package)的運用

    零件盒可以放置常數定義、使用者所定義的資料型態、元件宣告與共用的副

    程式宣告等部份,零件盒的好處,可以重複的使用,使用者可以減少電路設計與

    模擬的時間,不過在普通程式的撰寫裡,還不需要用到此種方法,使用結構式方

    法撰寫就可以了。

    3.3 結構模式描述法

    結構模式描述法將整體電路視為一些相互連接的元件之集合,因此若要使用

    此方法描述一個數位電路,我們必須要清楚的宣告每一個元件,以及說明元件間

    如何連接。使用結構模式描述法之最大優點是可以使用階層式設計來簡化龐大電

    路的設計流程。該模式可以將一個複雜的電路分解成若干個較為簡單之電路,在

    實現完成這些簡單之電路後,透過結構模式描述程式的整合,複雜電路也就設計

    完成。透過這種方法設計的好處是,程式中,信號值先後的問題,比較不容易衝

    突到。

    3.3.1 元件之宣告

    19

  • 使用結構模式描述法首先需要元件宣告,元件宣告可在架構或套件內進行,

    其宣告之方式為:

    component 元件名稱 port(埠信號名稱 1:模式 1: 資料型態 1﹔ 埠信號名稱 2:模式 2:資料型態 2﹔ ... 埠信號名稱n:模式n:資料型態n)﹔ end component;

    而在架構中元件宣告的位置為

    architecture 架構名稱 of 單體名稱 is 元件宣告 信號物件宣告 begin 架構描述程式 end 架構名稱;

    元件宣告的主要目的之一是:將另外一個已經設計完成的 VHDL程式之單

    體,當作一個元件,並將它宣告且使用在本程式中。因此我們要使用某單體來作

    為我們的元件,則在執行元件宣告時之元件名稱必須要與該單體名稱相同。由於

    單體名稱與儲存有該單體之檔案名稱也一致,所以元件名稱也必須要與該檔案名

    稱相同。

    在執行元件宣告時,除了注意元件名稱與單體名稱需要相同外,元件與單體

    之輸出入埠之數目,以及每一個埠的信號之資料型態以及模式也須相同。雖然元

    件與單體每一個埠的信號名稱可以不同,但是在程式的寫作實務上讓這些名稱相

    同的話便能增進程式之可讀性。

    3.3.2 元件之連接

    元件在經過宣告後,如果要使用此元件,則需執行元件啟動,其目的即為指

    明此元件與電路信號的連接狀況,執行元件啟動之敘述句位於架構描述程式中。

    方法有兩種:

    名稱對映式:

    20

  • 語法:

    元件標題:元件名稱 port map( 埠信號名稱 1=>信號 1, 埠信號名稱 2=>信號 2, ... 埠信號名稱n=>信號n)﹔

    說明:

    在此語法中,我們可將元件上的每一個埠信號名稱均視作元件之“接腳"名

    稱,不過埠信號名稱與信號的狀態需相同。

    位置對映式:

    元件標題:元件名稱 port map(信號 1,信號 2,...信號n)﹔

    說明:

    此語法為將信號 1 連接至元件之第一個輸出入埠,將信號 2 連接至元件之第

    二個輸出入埠,依此類推到第n個。

    3.3.3 階層式設計

    使用結構式描述法之最大的優點就是可以使用階層式設計來簡化龐大電路

    的設計流程。一個電路的階層可透過元件的宣告及啟動來計構完成。以下唯一個

    階層式設計的例子。我們假設一個電路 A可分解成四個部分:B、C、F及 G,

    當中電路 B可在分解為 D及 E,電路 C也可再分解為 E以及 H。

    圖:

    A

    B C F G

    圖 3.1階層式設計 D E E H

    21

  • 第四章 VHDL應用在 FPGA發展系統

    4.1 鍵盤掃描模組

    4.1.1 基本原理

    七字節顯示器:

    「七字節顯示器」簡單的來說,就相當於是利用八顆 LED排列組合而成的,

    在配合上解碼 IC 7447/7448 便能達到顯示出數目字的功能,不過我們往往可能都

    只侷限在一個位元的七字節顯示器上,但若是我們需要使用到多位元顯示的時

    候,就可能必須使用到更多數目的解碼 IC、以及更加繁雜的電路、還有高出原

    有電路好幾倍的消耗功率。此時我們就可利用「動態掃描」的原理與特性來解決

    此問題。

    「動態掃描」的概念,主要是運用到人體眼睛的反應速度最快只能到達 1/16

    秒之「視覺暫留」現象,只要快過這個速度我們的眼睛便無法能立即的反應,也

    因此造就了電影以及卡通的出現了。「動態掃描」也就是利用了這個道理,當我

    們需要使用到多位元顯示時,就利用「視覺暫留」的原理把掃描的速度加快,因

    為選擇移位的速度太快了,導致我們的眼睛感覺到所有的七字節顯示器皆同時的

    顯示。這種工作方式不但為我們節省了解碼 IC 的用量,更為我們節省下許多不

    必要的消耗功率,更增進其使用的效率。

    鍵盤掃描:

    在微電腦系統中,鍵盤可說是一種最常見且實用的輸入裝置式,其可以很明

    確的輸入我們想要表示的字元或數值。常見的鍵盤按鍵種類約可分成三大類型,

    有機械式按鍵(彈簧式)、電容式按鍵(觸摸式)、薄膜式按鍵(橡膠式)等多種。而其

    組成的結構不外乎分為獨立按鍵式與矩陣式鍵盤兩種。而學生研究之此專題是運

    用到矩陣式鍵盤,接下就以此加以討論。

    22

  • 列 1

    圖 4.1矩陣式鍵盤按鍵偵測法

    如圖 4.1所示即為一基本之 4×4矩陣式鍵盤,撰寫此程式時,我們是將電路

    設計成輸入端為『列』,輸出端為『行』,INT是用來判斷按鍵是否被按下。此時

    只要在『列』的輸入端,輸入『1110』的訊號,並且將『0』持續循環向左移一

    個位元,『1101』、『1011』、『0111』、『1110』,當有按鍵按下時,例如『行 1』與

    『列 1』交叉的按鍵被按下時,就會讓『行』的輸出由原本的『1111』即刻變成

    了『1110』而 INT的輸出由『0』變為了『1』,在這同時必須利用 INT的變化來

    控制程式,立即停止對『列』輸入掃描訊號。學生即利用以上之七段顯示器與鍵

    盤掃描的原理,來完成以下基本鍵盤的控制程式。

    4.1.2 設計目標及流程圖

    有了上述之基本概念,我們將利用 VHDL 之硬體設計語言來撰寫一 4×4 之

    鍵盤按鍵。按照模板上的按鍵數字所對應的位置,每次輸入數目字時則將七節顯

    示器前一個數字向左移位一次,並使得蜂鳴器發出聲響,當按下倒退鍵則向右移

    位一次,而按下清除鍵時則所有數字清除為 0。我們所設計之按鍵方式為一次處

    理一次,因此不會有誤動作或彈跳的現象產生,為目前程式設計上較為理想的方

    式。如圖 4.2所示即為學生要達成此鍵盤之設計流程圖。

    23

  • 震盪頻率 除頻 動態掃描 輸入 程式 程式

    鍵盤掃描 按鍵中斷判

    斷程式

    數字移位

    程式 數字清除程式

    按鍵聲音 七字節解 輸出至七

    程式 碼程式 字節

    圖 4.2鍵盤模組設計流程圖

    4.1.3 主程式

    LIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    USE IEEE.STD_LOGIC_UNSIGNED.ALL;

    USE IEEE.STD_LOGIC_ARITH.ALL;

    ENTITY KEYBOARD IS

    PORT(

    CLK:IN STD_LOGIC;

    AI:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

    CO:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

    S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

    P:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);

    SP:OUT STD_LOGIC);

    END KEYBOARD;

    ARCHITECTURE KEY OF KEYBOARD IS

    SIGNAL F:STD_LOGIC_VECTOR(5 DOWNTO 0);

    SIGNAL F_HZ:STD_LOGIC;

    SIGNAL OSC:STD_LOGIC;

    SIGNAL OSC1:STD_LOGIC;

    SIGNAL C:STD_LOGIC_VECTOR(3 DOWNTO 0);

    24

  • SIGNAL A:STD_LOGIC_VECTOR(3 DOWNTO 0);

    SIGNAL CODE:STD_LOGIC_VECTOR(2 DOWNTO 0);

    SIGNAL BCD:STD_LOGIC_VECTOR(23 DOWNTO 0);

    SIGNAL SUM:STD_LOGIC_VECTOR(4 DOWNTO 0);

    SIGNAL D:STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";

    SIGNAL SPO:STD_LOGIC;

    BEGIN

    P(5 DOWNTO 0)

  • END IF;

    --鍵盤列--

    IF(OSC='1' AND OSC'EVENT) THEN

    IF A="1111"THEN

    IF SEQ="11"THEN SEQ:="00";

    ELSE SEQ:=SEQ+1;

    END IF;

    ELSE SEQ:=SEQ;

    END IF;

    IF(SEQ="00") THEN C(3 DOWNTO 0)

  • --發聲--

    IF(OSC'EVENT AND OSC='1') THEN

    IF INT='1' THEN

    SOUND:=SOUND+1;SPO

  • WHEN"10100"=>DATA:="0010";--4

    WHEN"10101"=>DATA:="0110";--5

    WHEN"10110"=>DATA:="0000";--6

    WHEN"10111"=>DATA:="1101";--7

    WHEN"11000"=>DATA:="0011";--8

    WHEN"11001"=>DATA:="0111";--9

    WHEN"11010"=>DATA:="1010";--A

    WHEN"11011"=>DATA:="1110";--B

    WHEN"11100"=>DATA:="0100";--C

    WHEN"11101"=>DATA:="1000";--D

    WHEN"11110"=>DATA:="1011";--E---倒退鍵

    WHEN"11111"=>DATA:="1111";--F---清除鍵

    WHEN OTHERS=>DATA:=DATA;

    END CASE;

    --七段解碼--

    CASE D IS

    WHEN"0000"=>SSSSSSSSSSSSSSSSS

  • 4.2 歩進馬達模組

    4.2.1 基本原理

    歩進馬達是一種利用數位信號控制的電機裝置,能將數位的輸入訊號產生相

    對應的角度變化,每當輸入一個脈波訊號時,將使得步進馬達旋轉一固定的步進

    角。由於其輸入的數位訊號與輸出的角度成正比的關係,因此,適合於開迴路的

    控制,且常用於精密定位和精確定速的應用上。而其歩進馬達的控制方式可分為

    下列三項:

    (1) 1相激磁法:此種激磁法所運轉的角度為 0 度、90 度、180 度、270 度

    四個位置,在其激磁的過程中,瞬間只有一相的電流導通而激磁,如圖 4.3 (a)

    若要使歩進馬達順時針轉動的激磁順序為 A→B→ A→ B,反之則為逆時針

    轉動。一相激磁只要四個脈波即可完成一個激磁循環週期。

    (2) 2相激磁法:此種激磁法運轉的角度為 45 度、135 度、225 度、270 度

    四個位置,在激磁過程中,瞬間會有 2 相線圈的電流導通而激磁,但切記,

    絕不能是 A A相同時或是B B相同時。如圖 4.3 (b)為 2相激磁之順時針轉動,

    若要逆時針轉動,只要將B B的順序對調即可。2相激磁,其優點是震動小、

    不易失歩、制動效果佳。缺點是耗電量較高,因為同時有 2相受到激磁。

    (3) 1-2相激磁:此種激磁的角度為 0、45、90、135、180、225、270、315

    度八個位置,可說是 1相與 2相激磁交替進行。其最大的優點,是每次激磁

    的步進角度是 1相激磁或 2相激磁的一半,也可以說,每輸入一個脈波只轉

    動半步,可提高定位的精密度。

    29

  • 輸入脈波

    A組

    B組

    B組

    A組

    輸入脈波

    輸入脈波

    A組

    A組

    B組

    B組

    A組

    A組

    B組

    (a) 一相激磁的順序

    B組

    (b) 二相激磁的順序

    圖 4.3四相式歩進馬達激磁順序 (c) 一、二相激磁的順序

    30

  • 4.2.2 設計目標及流程圖

    相同的,利用上述的基本概念,我們將設計出一馬達之控制器。設計目標將以

    兩個按鈕開關,分別的控制歩進馬達運轉的方向及步進馬達激磁方向,並將運轉

    時的訊號送到七節顯示器,使得馬達行走的步數顯示出來。

    震盪頻率 除頻 步進馬達運轉方向控制 輸入 程式

    步進馬達激

    磁方式控制

    輸出至直流

    馬達

    步進馬達步數

    計數程式

    動態掃描 七字節解

    程式 碼程式

    顯示步進馬

    達行走步數

    圖 4.4 歩進馬達設計流程圖

    4.2.3 主程式

    LIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    USE IEEE.STD_LOGIC_UNSIGNED.ALL;

    USE IEEE.STD_LOGIC_ARITH.ALL;

    ENTITY STEP_MOTOR IS

    PORT

    (

    CLK,PHASE,DIRECTION: IN STD_LOGIC:='0';

    COIL: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

    S: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

    P: OUT STD_LOGIC_VECTOR(5 DOWNTO 0));

    END STEP_MOTOR;

    ARCHITECTURE MOTOR OF STEP_MOTOR IS

    SIGNAL IND_COIL: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001";

    31

  • SIGNAL CLK_SCAN: STD_LOGIC;

    SIGNAL CLK2: STD_LOGIC;

    SIGNAL F: STD_LOGIC_VECTOR(5 DOWNTO 0);

    SIGNAL OSC: STD_LOGIC;

    BEGIN

    COIL

  • WHEN OTHERS=>

    IF DIRECTION='0' THEN

    IF((IND_COIL="0001")OR(IND_COIL="0000")) THEN

    IND_COIL

    33

  • D(3 DOWNTO 0):=COUNT(3 DOWNTO 0);F(5 DOWNTO 0)

    D(3 DOWNTO 0):=COUNT(7 DOWNTO 4);F(5 DOWNTO 0)

    D(3 DOWNTO 0):=COUNT(11 DOWNTO 8);F(5 DOWNTO 0)

    D(3 DOWNTO 0):=COUNT(15 DOWNTO 12);F(5 DOWNTO 0)

    D(3 DOWNTO 0):=COUNT(19 DOWNTO 16);F(5 DOWNTO 0)

    D(3 DOWNTO 0):=COUNT(23 DOWNTO 20);F(5 DOWNTO 0)

    D(3 DOWNTO 0):="1100";F(5 DOWNTO 0)SSSSSSSSSSSSSSSSS

  • 4.3 馬達與人機介面

    4.3.1 設計目標及流程圖

    馬達與人機介面的設計,主要是結合鍵盤掃描模組與歩進馬達模組的交互應

    用以企圖來達成使用鍵盤就能控制馬達的動作,我們的目標是設計一個有 0至 9

    的基本輸入按鍵,以及有『左、右轉、倒退鍵、取消鍵、確定鍵』之功能鍵,並

    可將輸入之數值顯示在七字節顯示器,接著當鍵盤輸入一串個數值,例如:1000,

    再來按下左轉功能鍵,接下來按下確定鍵,則此時便控制步進馬達開始向左旋

    轉,而當七字節倒數計時至 0,步進馬達停止動作。下頁圖 4.6為馬達與人機介

    面設計流程圖。

    圖 4.5馬達與人機介面模組

    35

  • 振盪頻率輸入

    除頻程式

    動態掃描程式

    鍵盤掃描程式

    數字移位程式 數字清除程式

    按鍵中斷判斷程式

    馬達驅動程式

    七字節(查表)解碼程

    輸出至七字節 計數倒數程式

    按鍵聲音程式

    圖 4.6馬達與人機介面設計流程圖

    36

  • 4.3.2 主程式

    LIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    USE IEEE.STD_LOGIC_UNSIGNED.ALL;

    USE IEEE.STD_LOGIC_ARITH.ALL;

    ENTITY MUSIC_BOX IS

    PORT(

    CLK,DIRECTION,PHASE:IN STD_LOGIC:='0';

    AI:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

    CO:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

    S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

    P:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);

    SP:OUT STD_LOGIC;

    COIL: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

    END MUSIC_BOX;

    ARCHITECTURE ACTION OF MUSIC_BOX IS

    SIGNAL F:STD_LOGIC_VECTOR(5 DOWNTO 0);

    SIGNAL F_HZ:STD_LOGIC;

    SIGNAL OSC:STD_LOGIC;

    SIGNAL OSC1:STD_LOGIC;

    SIGNAL CLK_SCAN: STD_LOGIC;

    SIGNAL CLK2: STD_LOGIC;

    SIGNAL C:STD_LOGIC_VECTOR(3 DOWNTO 0);

    SIGNAL A:STD_LOGIC_VECTOR(3 DOWNTO 0);

    SIGNAL CODE:STD_LOGIC_VECTOR(2 DOWNTO 0);

    SIGNAL BCD:STD_LOGIC_VECTOR(23 DOWNTO 0);

    SIGNAL SUM:STD_LOGIC_VECTOR(4 DOWNTO 0);

    SIGNAL D:STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";

    SIGNAL SPO:STD_LOGIC;

    SIGNAL IND_COIL: STD_LOGIC_VECTOR(3 DOWNTO 0):="0001";

    SIGNAL SW:STD_LOGIC;

    SIGNAL KEY:STD_LOGIC;

    SIGNAL HZ:STD_LOGIC;

    SIGNAL COUNT:STD_LOGIC_VECTOR(23 DOWNTO 0);

    SIGNAL AC:STD_LOGIC;

    BEGIN

    COIL

  • P(5 DOWNTO 0)

  • END IF;

    --鍵盤列--

    IF(OSC='1' AND OSC'EVENT) THEN

    IF A="1111"THEN

    IF SEQ="11"THEN SEQ:="00";

    ELSE SEQ:=SEQ+1;

    END IF;

    ELSE SEQ:=SEQ;

    END IF;

    IF(SEQ="00") THEN C(3 DOWNTO 0)

  • ELSIF SW='0' AND B='1' AND DATA(3 DOWNTO 0)="1011" AND BCD/=0 THEN

    B:='0';SW

  • IF(HZ='1' AND HZ'EVENT)THEN

    IF AC='1' AND KEY='1' AND COUNT/=0 THEN

    --個位--

    IF COUNT(3 DOWNTO 0)=0 AND COUNT(23 DOWNTO 4)>=1 THEN

    COUNT(3 DOWNTO 0)

  • IF COUNT(23 DOWNTO 20)=0 THEN

    COUNT(23 DOWNTO 20)=1 AND COUNT(15

    DOWNTO 0)=0 THEN

    COUNT(23 DOWNTO 20)

    D(3 DOWNTO 0)

  • WHEN"10010"=>DATA:="1001";--2

    WHEN"10011"=>DATA:="1100";--3

    WHEN"10100"=>DATA:="0010";--4

    WHEN"10101"=>DATA:="0110";--5

    WHEN"10110"=>DATA:="0000";--6

    WHEN"10111"=>DATA:="1101";--7

    WHEN"11000"=>DATA:="0011";--8

    WHEN"11001"=>DATA:="0111";--9

    WHEN"11010"=>DATA:="1010";--A

    WHEN"11011"=>DATA:="1110";--B

    WHEN"11100"=>DATA:="0100";--C

    WHEN"11101"=>DATA:="1000";--D

    WHEN"11110"=>DATA:="1011";--E---倒退鍵

    WHEN"11111"=>DATA:="1111";--F---清除鍵

    WHEN OTHERS=>DATA:=DATA;

    END CASE;

    --七段解碼--

    CASE D IS

    WHEN"0000"=>SSSSSSSSSSSSSSSSS

  • 第五章 結論

    5.1 專題研究心得

    從事專題研究半年多的時間裡,從尋找題目、尋找資料、發現問題、解決問

    題、訂定目標、分工合作、互相討論...等等,這些種種的過程,都讓我學習

    到很多東西、增添許多寶貴的經驗。

    在高年級的課程裡面,學到很多元件的原理,像是七節顯示器、鍵盤掃描、

    馬達驅動,一般來說,七節顯示器是最簡單,可是也是最常用到的,用電路描述

    語言 VHDL 來撰寫、合成,並且送出訊號來控制七節顯示器,也不是很簡單的

    一件事情,外面業界有些電路設計,會使用到 VHDL這方面的觀念來設計晶片、

    電路等等的東西,這也是我們想以這方面的題目來當我們專題的原因之一。

    程式在撰寫當中,最先是除頻的問題,需要什麼適當的頻率來控制電路,是

    一個問題,程式在撰寫除頻方面的原理差不多,只是 VHDL 的邏輯敘述不相同

    而已,還不算太困難寫,除頻完後接下來就是要宣告一些使用部分與外部接腳。

    通常外部接腳很少,像是單單只讓馬達正反轉,其實只需要宣告六支接腳而已。

    接腳方面,除了時脈 CLK 的輸入為除頻要用到的,剩下的就是元件的接腳,控

    制馬達的話,如果是步進馬達的需要宣告到四支,用移位暫存器的概念來宣告,

    如此的宣告方式,在後面主程式部分以方便控制馬達的動作,而直流馬達的話,

    只需要宣告兩支接腳而已。另外像是 LED 方面的外部接腳宣告,則是與馬達差

    不多,用移位暫存器的觀念來寫,只不過接腳多了一些,不過由於設定的題目並

    沒有用到 LED所以 LED方面的介紹就省略了。而鍵盤的宣告,就有點技巧了,

    應用單晶片 8051 寫鍵盤的掃描基本原理來寫程式,鍵盤為 4×4,所以寫起來還

    不會太困難。至於七段顯示器,也是有點學問的,一顆七節顯示器不用考慮到前

    後順序的問題,而六顆就需要使用共陰極掃描的方法來選擇用哪一顆七節顯示

    器,還要建立查表使七節的接腳輸入有高低電壓之別,使七節顯示器出現我們想

    要的數字,另外也還需要建表來使原本在程式內部的十六進位制轉成十進位制以

    44

  • 顯示在七節顯示器上。

    在專題前面一個月裡,都是在研究個別模組的使用,後來幾個月裡,則是研

    究如何使用一個模組控制或是驅動另一個模組,像是使用鍵盤模組來驅動馬達的

    轉動,然後使七節顯示器顯示出馬達轉動的圈數、步數,或是說使七節顯示器顯

    示的數字倒數計時,若為零時,則馬達停止轉動等等的功能。

    在運用模組控制模組的觀念下,最常用的到便是使用鍵盤來控制馬達以及七

    段顯示器,程式的寫法,最初的宣告元件庫的使用以及宣告外部接腳並無太大不

    同,只是用得越多宣告得越多而已。中間的主程式,使用的 PROCESS循序程序

    寫法,以鍵盤為主,主要的觀念是,當鍵盤的某個鍵按下去的時候,關鍵判斷式

    會做出判斷,看是否合條件,如果合條件,則執行信號的傳遞,看是要給定計數

    的值讓計時程式利用頻率準確計算以計數轉成計時來準確控制時間的倒數,或是

    說給定一個邏輯判斷值,來使其他的關鍵判斷是啟動,來給定馬達啟動的訊號,

    或是終止馬達的訊號等等。

    45

  • 5.2 未來發展方向

    目前專題算是做一個段落了,未來預計想把結構模式敘述法 PORTMAP的

    語法應用在專題上面,用來發展多功能控制器,也就是說,把鍵盤的功能由原本

    的 4*4 數字鍵盤寫成一個按鍵就有一種功能,此功能可以讓馬達有一系列的動作

    並且可以配合七節顯示器和 LED或 LCD的綜合動作。

    下圖是使用預計使用 PORTMAP寫出來的多功能控制器示意圖:

    倒數控制1 馬達動作

    (正轉) 倒數控制2

    .

    .

    .

    馬達動作

    (反轉)

    鍵盤程式

    圖 5.1多功能控制器設計圖

    另外一個目標就是利用 FPGA發展系統的排線接腳,由其單隻接腳獲得的輸

    出信號,利用達林頓電路類似的放大裝置,放大輸出信號用來控制外部電路,在

    利用層層電路的順序控制變化來組合成我們要的功能,如此以來便可改良原來只

    有六個模組限制住的功能發展。

    46

  • 參考文獻

    [1] 劉紹漢、林灶生、劉新民, VHDL晶片設計, 全華科技圖書股份有限公司,

    2003 年。

    [2] 林國良, VHDL硬體電路設計語言, 全華科技圖書股份有限公司, 1997

    年。

    [3] 蕭如宣, VHDL 數位電路設計, 儒林圖書有限公司, 2002 年。

    [4] 盧毅, VHDL與數位電路設計, 文魁資訊股份有限公司, 2000 年。

    [5] 林容益, CPLD 數位電路設計發展應用(基礎篇), 全華科技圖書全華科技

    圖書, 2002 年。

    [6] 吳中浩, VHDL初學者指南, 全華科技圖書, 1998 年。

    [7] 林國良, VHDL硬體電路設計語言, 全華科技圖書全華科技圖書, 1996

    年。

    [8] 蕭如宣, VHDL 數位系統電路設計, 儒林圖書有限公司, 2000 年。

    [9] 胡振華, VHDL與 FPGA設計, 全華科技圖書有限公司, 2001 年。

    [10] Douglas Perry,完整的 VHDL使用者指引,美商麥格羅希爾國際股份有限

    公司, 2000 年。

    [11] 吳中浩 , VHDL概論:由模擬到合成, 金華圖書有限公司, 2002 年。

    [12] 黃文吉 , VHDL基本程式寫作及應用, 儒林圖書出版社, 2002 年。

    47

    Using VHDL to Materialize the Design of Motor with Human-mac