Professional Documents
Culture Documents
VHDL
VHDL
Hardware
Description Language
Workshop on FPGA: an easy solution for digital system designs
5 March 2005
1
Outline
• What is VHDL
• VHDL file structure
• Data type
• Array
• Operators
• Concurrent vs. sequential statement
• Process and sequential statements in
process
• State machines
• Design examples 2
การออกแบบดวยภาษา VHDL
3
อะไรคือ VHDL
VHDL ยอมาจาก
VHSIC : Very High Speed IC
HDL : Hardware Description
Language
เริ่มตนจากกระทรวงกลาโหมสหรัฐอเมริกา
(US:DOD) ประมาณป ค.ศ. 1981 ทําการพัฒนา
โครงการที่มีชื่อวา VHSIC ทําการพัฒนาโปรแกรมซึ่ง
จะจัดเปนภาษาระดับสูงเชนเดียวกับภาษา C หรือ
PASCAL แตสามารถบรรยายพฤติกรรมของ วงจร
ดิจิตอล หรือโครงสรางของวงจรได ทั้งนี้เพื่อให
สามารถออกแบบ และสรางวงจรดิจิตอลไดเร็วขึ้น
4
VHDL เกิดขึน
้ ไดอยางไร
6
VHDL Language Structure
7
VHDL Example
library ieee;
use ieee.std_logic_1164.all;
8
สวนประกอบที่สําคัญของไฟล VHDL
Library...
1 Use...
-------------------
Entity
2 -------------------
-------------------
Architecture
-----------
Begin
3 ------------------
------------------
End
9
สวนประกอบทีส
่ ําคัญของไฟล VHDL
10
Package
ขอมูลตางๆ ตลอดจน
โปรแกรมยอย
(Subprogram) ที่เปน
ประโยชนตอการเขียน
รูปแบบบรรยายระบบ
ดิจิตอลสามารถเก็บไวใน
สวนที่เรียกวา Package
ได และขอมูลเหลานี้
สามารถถูกเรียกไปใชได
โดย Entity design unit,
Architecture design
unit หรือจาก Package
design unit อื่น ดวย
คําสั่ง USE statement
11
Library
Library ทําหนาทีเ่ ก็บ Package ตาง ๆ ไว ซึ่งใน Package
จะเปนทรัพยากรตาง ๆ ทีใ่ ชงานรวมกัน ดังนั้นกอนใชงาน
จะตองกําหนดไวในตอนตนของ VHDL ไฟลไวดวย
12
Library
Library IEEE;
___
entity test is
end test ;
13
ชุดคําสั่ง USE
ใน library(กําหนดชื่อสัญลักษณ) อาจจะ
ประกอบดวย package หลายๆ ชุด ดังนัน ้ จะตอง
กําหนด package เฉพาะที่ตองการใชงาน ดวย
คําสั่ง USE ซึ่งมีรูปแบบดังนี้
USE library_name.package_name.element_of_package;
Library IEEE;
USE IEEE.std_logic_1164.and;
entity test is
___
14
Standard Packages
std_logic_unsigned.vhd (ieee)
std_logic_textio.vhd (ieee)
attributes.vhd (synopsys)
15
การเขียน Comments
----------------------------------------------------------
-- this is a comments
-- each line must begin with --
-- comment end with a new line
----------------------------------------------------------
Library IEEE;
USE IEEE.std_logic_1164.all;
entity test is
___
16
Entity
17
Entity Design Unit
กํกําาหนด
หนด ชืชื่อ่อของรู
ของรูปปแบบที
แบบที่ต่ตอองการจะเขี
งการจะเขียยนน
Syntax:
ทางเข
ทางเขาาออก
ออก entity entity_name is
ของข
ของขออมูมูลล port (port_name :<mode> port_type);
end entity_name;
จะต
จะตอองป
งปดดททาายด
ยดววยยend
end ตามด
ตามดววยย ประเภทค
ประเภทคาาของสั ของสัญญญาณ
ญาณ หรื
หรืออ
“entity_name”
“entity_name”และ และ;; ขขออมูมูลลก็ก็คคือือกลุ
กลุมมของค
ของคาา
กํกําาหนดทิ
หนดทิศศทางที
ทางที่ต่ติดิดตตออกักับบ
ภายนอก
ภายนอกI/O I/O
18
ตัวอยางการเขียน Entity
สัสังงเกตว
เกตวาาจะไม
จะไมมมี Semi-Colon
ี Semi-Colonทีที่บ่บรรทั รรทัดด
สุสุดดททาายยกกออนที
นที่จ่จะป
ะปดดดดววยวงเล็
ยวงเล็บบปปดด
19
การเขียนโดยมีขอ
มูลทางฟสิกส
Syntax:
entity entity_name is
generic (generic_list);
port (port_name :<mode> port_type);
end entity_name;
20
Architecture Design Unit
เปนสวนที่เขียนบรรยายพฤติกรรม ของรูปแบบ (
model) ในมุมมองของการจําลองการทํางาน
(simulation)
พฤติกรรมตางทีบ ่ รรยายในสวนนี้จะขึ้นอยูกับขอมูล
ที่ผานเขาออกตรงชองทาง ตลอดจนพารามิเตอร
ตางๆ (port and generics) ทีก่ ําหนดใน entity
design unit
Syntax : เริ่มตนดวยคํา Architecture ตามดวย
ชื่อ และจบดวย End ตามดวยชื่อ ดังหนาถัดไปนี้
21
Architecture Syntax
ชืชื่อ่อ architecture
architecture นันั้น้นบรรยาย
บรรยาย entity
entity ใดใด
Syntax:
architecture architecture _name of
entity_name is
declarations อยู
อยูรระหว
ะหวาางงarc arcและ
และbegin
beginสสววนนี
นนี้ ้
begin
ใชใชใในการเขี
นการเขี ยยนประกาศกํ
นประกาศกํ าาหนดค
หนดค าา
concurrent_statements
end architecture _name ;
ตตาางๆงๆทีที่จ่จะนํ
ะนําาไปใช
ไปใชใในนarc
arcนันั้น้นอาทิ
อาทิ
เชเชนนประเภทของ
ประเภทของtype,
type,signal,
signal,
constant,
constant,function,
function,procedure,
procedure,
component
componentทีที่จ่จะใช
ะใช
22
Architecture
Syntax:
architecture architecture _name of entity_name is
declarations
begin
concurrent_statements
end architecture _name ;
การบรรยายความสั
การบรรยายความสัมมพัพันนธธขของข องขออมูมูลลทีที่ไ่ไหลเข
หลเขาาออก ออกmodel modelนันั้น้นจะถู จะถูกก
บรรยายระหว
บรรยายระหวาางงbegin beginกักับบend
end ชุชุดดคํคําาสัสั่ง่งทุทุกกคํคําาสัสั่ง่งทีที่อ่อยูยูใในบริ
นบริเวณนี
เวณนี้ ้
จะเป
จะเปนนชุชุดดคํคําาสัสั่ง่งแบบแข
แบบแขงงขนาน
ขนาน(concurrent
(concurrentstatement) statement)เทเทาานันั้น้น
arc
arcจะต
จะตอองป งปดดททาายด ยดววยยend
endและชื
และชื่อ่อของ
ของarc arcนันั้น้นๆๆ
23
Architecture
Architecture จะเปนสวนทีจ
่ ะใชในการอธิบาย
การทํางาน หรือโครงสรางของวงจร
Algorithmic description
Netlist representation
Behavioral + Structral
25
Behavioural
26
ตัวอยาง Behavioural Style
architecture behavioural of mux is
begin
process ( IN0,IN1,SEL)
begin
if (SEL=‘0’) then
OUTPUT <= IN0;
else
OUTPUT <= IN1;
end if;
end process;
end behavioural;
27
Structural
• เปนการเขียนเพื่อบรรยายลักษณะทาง
โครงสรางของวงจร หรือระบบ ที่ประกอบดวย
อุปกรณหลาย ๆ ตัวตอกัน
• ในการเขียนเพื่ออธิบายนั้น จําเปนตองรูวาขา
ของอุปกรณแตละตัวตอกันอยางไร ทําใหเรา
สามารถมองเห็น หรือกําหนดโครงสรางได เชน
มีการทํางานพรอม ๆ กัน (ขนาน) ของอุปกรณ
ตัวใดบาง
• ตัวอยางเชน การสรางวงจรแบบ Pipeline เรา
จําเปนตองเขียนในลักษณะของ Structural
28
ตัวอยาง Structural Style
architecture structural of mux is
component INV mux
port( I1 : in bit; O1 : out bit ); IN0 I1 G1
INT1
end component; I2
O1
Hierarchy เปนการออกแบบที่เปน
ลักษณะของลําดับชั้น ซึ่งจะทําใหงายใน
การทําความเขาใจ ตรวจสอบ และแกไข
FA
HA HA OR
ตัวอยาง
เปนการออกแบบวงจร Full
Adder (FA) ซึ่งประกอบดวย HA สองตัว
และ OR gate เปนลักษณะของ
Hierarchy ดังแผนภาพดานบน
30
การเขียน VHDL ในลักษณะของ
Hierarchy (1)
31
การเขียน VHDL ในลักษณะของ
Hierarchy (2)
เราสามารถแสดงโครงสรางการเชื่อมตอกันของ HA
และ OR ไดโดย3 บรรทัดที่อยูระหวาง Begin และ
End
U1 และ U2 แทน HA และ U3 แทน OR โดยทีท ่ ง
ั้
U1, U2, U3 เราเรียกวา Instant Name
มีจดุ เชื่อมตอภายในวงจร 3 จุดดวยกันคือ I1, I2,
I3 ซึ่งใน VHDL ถือวาเปน Signal
32
การเขียน VHDL ในลักษณะของ
Hierarchy (3)
• ตัวอยางการเชื่อมตอระหวาง HA กับจุดตาง ๆ
โดยรอบ เราจะใชคําสั่ง Port map ซึ่งจะทําการ
เชื่อมตอใหตรงตามตําแหนงการเรียงกันของ
พอรตที่กําหนดไวใน Entity
33
Local Declaration
สําหรับการกําหนดวา เราตองการใช HA และ OR ในการ
สราง จะตองกําหนดไวเปนลักษณะของ Component ใน
บริเวณของ Local Declaration
ชื่อของ Component และตําแหนงของพอรต จะตอง
เหมือนกับทีก
่ ําหนดไวใน Entity
34
VHDL ที่สมบูรณของ Full Adder
35
Data Type
36
Type in VHDL
37
Type
38
Pre-defined Type
39
Standard Pre-defined Type
40
แนวคิดของการกําหนด Type
41
Pre-defined Type ชนิดอืน
่
นอกจากนี้ เรายังมี Type ทีก่ ําหนดอยูใน
Package อื่น ทีไ่ มใช Standard package ดัง
ตาราง ดังนั้นกอนที่เราจะใชงานตองกําหนดการ
ใชงาน Package ไวตอนตนดวย
Package Type
std_logic_1164 std_logic, std_logic_vector
std_ulogic, std_ulogic_vector
std_logic_arith signed, unsigned
‘U’ = un-initialized
‘X’ = unknown
‘0’ = logic 0 Strong drive
‘1’ = logic 1
‘Z’ = high impedance
‘L’ = logic 0 Weak drive
‘H’ = logic1 (not often used)
‘-’ = don’t care
43
การใช Standard Logic
44
Signed & Unsigned type
46
Type Conversion
• เนื่องจากทัง
้ ดานซาย และดานขวา ของ
ตัวสงผานคา (<=) จะตองเปน Type ชนิด
เดียวกัน ถาตางชนิดกันจะทําอยางไร?
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY adder IS
PORT (op1, op2 : IN UNSIGNED(3 downto 0);
result : OUT INTEGER);
END adder;
48
User-defined Type
49
การใชงาน User-defined Type
50
Array
51
Array
เปนกลุม
ของสัญญาณ ซึ่งเราสามารถกําหนดชวง หรือขนาด
ของ Array โดยใช “to” หรือ “down to”
ในการสงคา (assign) ขนาดของ Array จะตองเทากัน และ
เปน Type ชนิดเดียวกัน
การสงผานคา จะกระทําโดยอางอิงถึงตําแหนงที่ตรงกัน มิใช
อางอิงโดยเลขดัชนี
52
Slice of Array
ผิดเพราะวา ทิศทาง
ของอารเรย
(to หรือ down to )
จะตองสัมพันธกับ 53
ที่กําหนดไวตอนเริ่มตน
Concatenation & Aggregate
เราสามารถนําสัญญาณยอย ๆ หรืออารเรยยอย
มาตอกัน หรือรวมกันได ซึ่งทําไดสองวิธีคือ
การใชเครื่องหมาย & (ampersand) ตอเชื่อม
สวนยอย ๆ เขาดวยกัน เราเรียกวา
concatenation
การใชวงเล็บ ( ) และจุลภาค , เพื่อรวมสวนยอย
ๆ ตาง ๆ เขาดวยกันเราเรียกวา aggregate
54
ตัวอยางของ Concatenation
55
ตัวอยางของ Aggregate
56
ตัวอยางของ Aggregate
ในบางกรณี เราอาจกําหนดไดโดยอางถึง
ดัชนี และกําหนดคาใหกบ
ั ตําแหนงที่เหลือ
โดยใชคําวา others
57
Operators
58
VHDL Operators
59
Logical Operators
AND, OR, NAND, NOR, XOR ถือวาเปน Logical
operators ที่มีความสําคัญเทากัน
NOT ถือวามีลําดับความสําคัญมากกวา นัน
่ คือจะกระทํา
กอน ยกเวนเราจะกําหนดใหกระทําใน เครื่องหมายวงเล็บ
กอน
60
Logical Operators
61
Relational Operators
ตัวกระทําประเภท Relational Operators นั้นจะใชในการ
เปรียบเทียบคา ระหวางสองตัวแปรที่เปนชนิดเดียวกัน โดยที่จะ
ใหผลลัพธออกมาเปนคา Boolean (TRUE, FALSE)
สวนใหญจะใชในคําสั่งที่มีการตรวจสอบเงื่อนไขกอนเชน If
Then
62
Arithmetic Operators
• จะใชไดกับ Pre-Defined Type ประเภท
Integer, Real, Time, Signed และ Unsigned
เทานั้น
64
Type and Operators
Logical
Operators 3 3 3 3
Relational
Operators 3 3 3 3 3 3
Arithmetic
Operators 3 3 3
*ไมใช
std_logic_{signed,unsigned}
**ใช
std_logic_{signed,unsigned} 65
Concurrent vs.
Sequential Statement
66
Concurrent and Sequential
Statement
Concurrent Statement จะทําการแปล หรือประมวลผล
ในเวลาเดียวกัน หรือทุกบรรทัดพรอมกันเปนแบบขนาน
เชนคําสั่งWhen Else, With Select
Sequential Statement จะทําการแปล หรือประมวลผล
เปนลําดับเรียงกันไปในแตละบรรทัด เชนคําสั่ง If Then,
Case, For Loop
เวลาจะใชงาน Sequential Statement จะตองใชใน
“Process” เทานั้น
ระวัง! Sequential Statement เมื่อนําไปสรางวงจร ไม
จําเปนตองเปน Sequential Circuit
67
ตําแหนงของ Concurrent และ
Sequential Statement
68
ตัวอยางของ Concurrent
Statement
71
When - Else Statement
72
With - Select Statement
73
Process Statement
74
Sequential Statement in VHDL
VHDL นั้นเปนภาษาที่มีคุณสมบัติแบบแขงขนาน นั่นคือ
ชุดคําสั่งภายในตัวโครงสราง จะเปนชุดคําสั่งแบบแขง
ขนาน
โครงสรางที่ประกอบดวย Sequential Statement เชน
if-then-else, case, for-loop, wait จะไปอยูสวนไหน
อยางไรภายใน architecture ของ model? คําตอบก็คือ
… อยูในชุดคําสั่ง Process
ใน architecture หนึ่ง สามารถมีไดหลายๆ Process ที่
ทํางานขนานกัน
75
Process
76
Process
77
ตัวอยางการใชงาน Process
จากตัวอยาง label จะมีหรือ
ไมมีก็ได ตามดวย Process
และชื่อ Sensitivity List
อยูในวงเล็บ
Sequential Statement
จะอยูระหวาง Begin และ End
Process
จากตัวอยางนี้ เมื่อนําไปสังเคราะห
เปนวงจรจะไดเปนวงจร
Combinational Logic ธรรมดา
ไมใช Sequential Logic!
78
การประมวลผลใน Process
การประมวลผลใน Process จะเรียงลําดับกันเปนบรรทัด
ลงมา (Sequential) ซึ่งตางกับ บริเวณที่อยูขา งนอก
Process ซึ่งจะทําพรอม ๆ กัน (Concurrent) ดังนั้นถา
เรากําหนดไวทบ ี่ ริเวณตางกัน ก็จะไดลอจิกที่ตางกันดวย
ดังตัวอยางตอไปนี้
ตัวอยางที่ 1
ตัวอยางที่ 2 79
การประมวลผลใน Process
ตัวอยางที่ 1 ตัวอยางที่ 2 80
Sensitivity List
81
กฎเกณฑการเขียน Process
ตัตั้ง้งชืชื่อ่อprocess
process(จะมี
(จะมีหหรืรืออไม
ไมมมีกีก็ไ็ไดด))
82
ตัวอยางการใชงาน Process
83
Variable in Process
สําหรับ Process ใน VHDL เราสามารถกําหนดตัว
แปรเปน Variable ได ซึ่งจะมีลักษณะเหมือนกับ
ภาษาชั้นสูงโดยทั่วไป นั่นคือ จะมีการ update คา
ทันที ซึ่งตางกับ Signal ที่จะมีการ update คาใน
ตอนสิ้นสุด Process เทานั้น
ในการกําหนดคาให Variable จะใชเครื่องหมาย :=
Variable จะรูจ ก
ั เฉพาะใน Process ที่กา ํ หนดขึ้นมา
เทานั้น ซึ่งตางกับ Signal ที่จะรูจก
ั ตลอดทั้งใน
Architecture
Variable เปนเพียงตัวแปร ไมมีความเกี่ยวของทาง
Hardware แตอยางไร สวน Signal นั้นเปนตัวที่ทํา
หนาที่เปนพาหะ รับ-สง คาของสัญญาณจึงเปนสวน
ของ Hardware 84
ตัวอยางการใชงาน
Variable & Signal
signal A, B, C, Y, Z : integer;
signal M, N : integer;
begin
process (A, B, C, M, n)
begin
M := A;
N := B;
Take Effect Immediately...
Z <= M + N;
M := C; Take Effect When Suspend...
Y <= M + N;
end process;
Z= A+B
Y= C+B
85
Quiz
86
Sequential Statements in Process
87
ชุดคําสั่งที่ใชใน Process
เปนชุดคําสั่งที่สําคัญที่สุดสําหรับการเขียน
รูปแบบในลักษณะของการบรรยายพฤติกรรม
ของระบบดิจิตอล
ชุดคําสั่งเหลานี้จะทํางานเปนลําดับจากบนลง
ลางเมื่อ Process ถูกกระตุนใหทํางาน
จะเปนตัวกําหนดเขตในสวนของ Sequential
statement
การทํางานภายใน Process จะไมขน ึ้ กับเวลา นั่น
หมายความวา ชุดคําสั่ง Process จะทํางาน
ตลอดเวลา
88
If-Then-Else Statement
IF condition THEN
{sequential-
statement(s)}
[{ ELSIF condition THEN}
{sequential-
statement(s)}]
[ ELSE
END IF;
89
Case Statement
91
For-Loop Statement
93
While Loop Statement
94
ตัวอยาง While Loop
95
Wait Statement
96
Wait Statement
สามารถกําหนดลงตรงตําแหนงใดๆ ภายใน
ชุดคําสั่ง ลําดับได เพื่อระงับการทํางานภายใน
ชุดคําสั่ง process ตรงตําแหนงที่ wait
statement อยู
สามารถทีจ ่ ะกําหนด wait statement ได
หลายๆอันในแตละตําแหนงตามความตองการ
โดยไมจา ํ กัด
wait statement ไมสามารถใชรวมกับ
sensitivity list ภายใน process เดียวกันได
97
กฎเกณฑการเขียน Wait
Statement (1)
ตัตั้ง้งชืชื่อ่อwait
wait(จะมี
(จะมีหหรืรืออไม
ไมมมีกีก็ไ็ไดด))
Label : wait
[on { , signal_list}]
[ until condition is boolean_expression ]
[for time_expression]
99
การใชงาน Wait Statement (1)
100
การใชงาน Wait Statement (2)
101
Wait Statement Example
Library IEEE;
use IEEE.std_logic_1164.all;
entity D_FLOP is
port (D,CLK :in std_logic;
Q : out std_logic);
end D_FLOP;
architecture A of D_FLOP is
begin
process
begin
wait until CLK’ event and CLK =‘1’;
Q<= D;;
end process;
end A; 102
State Machine in VHDL
103
State Machine
สัญญาณสเตทจะถูกเก็บในรีจีสเตอร ดังนั้น
สเตทจะสามารถเปลี่ยนแปลงไดที่ขอบของ
clock เทานั้น
State Machine มี 2 ประเภท
Moore Machine มีเอาต
เอาตพุตเปลี่ยนแปลงตาม
จังหวะของ clock เทานั้น (แตละสเตทจะมีค
คา
เอาตพุตที่กําหนดแนนอน, เอาตพุตจะเปลี่ยนก็
ตอเมื่อสเตทเปลี่ยน)
Mealy Machine เอาตพุตไมจําเปนตอง
เปลี่ยนแปลงตามจังหวะของ clock (ภายใน
สเตท หนึ่ง ๆ เอาตพุตสามารถเปลี่ยนแปลงได ถา
อินพุตเปลี่ยน) 105
Moore Machine
init
State Register
s(t+1) z(t)
C1 C2
next s(t)
x(t) state present
present state
input
clk
106
Mealy Machine
init
State Register
s(t+1)
C1 next s(t)
x(t) state present z(t)
present state C2
input
clk
107
State Machine in VHDL
S0 S1 i/p = 0
i/p = 1 108
ตัวอยางการใชงาน FSM
din
clk FSM dout
clr
din 1011011010011010
dout 0000010010000010
109
State Diagram to Detect
“1101” Sequence
0 S1
1
0 1
S0
0
0
S11
0
0
CLR 1
0 1
0
S1101
1 S110
1 0
110
FSM.vhd (1)
entity fsm is
port (clk: in STD_LOGIC;
clr: in STD_LOGIC;
din: in STD_LOGIC;
dout: out STD_LOGIC);
end;
begin
111
FSM.vhd (2)
State Register
C1 s(t+1) C2 z(t)
next s(t)
x(t) state present
present state
input
clk 112
FSM.vhd (3)
State Register
else
C1 s(t+1) C2 z(t)
next_state <= S0; next s(t)
end if; state present
x(t)
present state
input
clk 113
FSM.vhd (4)
comb2: process(present_state)
begin
if present_state = S1101 then
dout <= '1';
else
dout <= '0';
end if;
end process;
State Register
C1 s(t+1) C2 z(t)
next s(t)
x(t) state present
present state
input
clk 115
Design Examples in VHDL Code
116
Multiplexer
117
Shift Register (p1)
118
Shift Register (p2)
119
Counter (p1)
120
Counter (p2)
121
RAM (p1)
122
RAM (p2)
123
RAM (p3)
124
ROM (p1)
125
ROM (p2)
126
THANK
YOU
127