vhdl

127
1 VHDL: Hardware Description Language Workshop on FPGA: an easy solution for digital system designs 5 March 2005

Upload: mighe

Post on 13-Nov-2014

14 views

Category:

Documents


6 download

DESCRIPTION

ภาษาที่ใช้เขียนโปรแกรมสำหรับการเขียนวงจรดิจิตอล หรือ IC ที่นิยมใช้กัน

TRANSCRIPT

1

VHDL: Hardware Description Language

Workshop on FPGA: an easy solution for digital system designs5 March 2005

2

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

3

การออกแบบดวยภาษา VHDL

4

อะไรคือ VHDL

VHDL ยอมาจากVHSIC : Very High Speed ICHDL : Hardware Description Language

เริ่มตนจากกระทรวงกลาโหมสหรัฐอเมริกา (US:DOD) ประมาณป ค.ศ. 1981 ทําการพัฒนาโครงการที่มีชื่อวา VHSIC ทําการพัฒนาโปรแกรมซึ่งจะจัดเปนภาษาระดับสูงเชนเดียวกับภาษา C หรือ PASCAL แตสามารถบรรยายพฤติกรรมของ วงจรดิจิตอล หรือโครงสรางของวงจรได ทั้งนี้เพื่อใหสามารถออกแบบ และสรางวงจรดิจิตอลไดเร็วขึ้น

5

VHDL เกิดขึน้ไดอยางไร

เริ่มตน โดย US :DOD ไดมอบหมายใหบริษัท IBM , Teaxas Instruments และ Intermetrics เปนผูศึกษาและพัฒนาภาษาที่ใชออกแบบวงจรดิจิตอลและไดผลเปนที่นาพอใจ จนกระทั่งป ค.ศ. 1985 ทาง ITAR ไดยกเลกิขอจํากัดในการถายทอดเทคโนโลยีทางการทหาร ออกจากโครงการนี้ดังนั้น VHDL จึงเริ่มรูจักกันโดยทั่วไป จนกระทั่งทาง IEEE(Institute of Electrical and Electronic Engineering) ไดรับภาษานี้เขามาศึกษาและประมาณป ค.ศ.1987 ไดยอมรับกําหนดมาตรฐานของภาษา โดยใหชื่อวา IEEE 1976-1987 และมีชื่อเรียกวา VHDL มาตรฐานนี้ไดรับการปรับปรุงจนปจจุบันไดชื่อวา IEEE 1076-1993 หรือ VHDL 1993

6

VHDL ทาํอะไรไดบาง

เปนภาษาที่นําไปเขียนรูปแบบระบบดิจิตอล และมีคุณสมบัติที่คน และเครื่อง สามารถเขาใจได โดยไมตองแปลอีกเปนภาษาที่สามารถเขียนขึน้เพื่อจําลองการทํางานไดสามารถนําไปเปนเอกสารประกอบโครงการไดในรายละเอียดตอจากนี้จะเนนถึงการใชภาษา VHDL ในการสงัเคราะหวงจร โดยเขียนเปนรูปแบบภาษาที่สามารถอธิบายพฤติกรรม หรือโครงสรางของระบบดิจิตอล

7

VHDL Language Structure

8

VHDL Example

library ieee;use ieee.std_logic_1164.all;

9

สวนประกอบที่สําคัญของไฟล VHDL

Library...Use...-------------------Entity--------------------------------------Architecture-----------Begin------------------------------------End

1

2

3

10

สวนประกอบทีส่ําคัญของไฟล VHDL

1. สวนที่แสดงถึง Library และ Package ที่จะเรียกใช

2. Entity สําหรับกําหนดพอรตของวงจร ซึ่งเปนไดทั้ง input, output หรือ inout

3. Architecture สําหรับอธิบายการทํางานในลักษณะของทั้ง Behavioral Level หรือ Structural Level

11

Package

ขอมูลตางๆ ตลอดจนโปรแกรมยอย (Subprogram) ที่เปนประโยชนตอการเขียนรูปแบบบรรยายระบบดิจิตอลสามารถเก็บไวในสวนที่เรียกวา Package ได และขอมูลเหลานี้ สามารถถกูเรียกไปใชไดโดย Entity design unit, Architecture design unit หรือจาก Package design unit อื่น ดวยคําสั่ง USE statement

12

Library

Library ทําหนาทีเ่ก็บ Package ตาง ๆ ไว ซึ่งใน Package จะเปนทรัพยากรตาง ๆ ทีใ่ชงานรวมกัน ดังนั้นกอนใชงานจะตองกําหนดไวในตอนตนของ VHDL ไฟลไวดวย

13

Library

ชุดคําสั่ง Library ดังในตัวอยาง เปนชุดคําสั่งทาํให Library ที่มีชื่อสัญลักษณวา IEEE สามารถนาํมาใชในสวนที่เปน entity ชื่อ test ได นั่นคือ library ชื่อ IEEE จะมองเห็นไดสําหรับ entity ชื่อ test รวมทั้งสวนทีเ่ปนหนวยรองดวย

Library IEEE;_ _ _entity test isend test ;

14

ชุดคําสั่ง USE

ใน library(กาํหนดชื่อสัญลักษณ) อาจจะประกอบดวย package หลายๆ ชุด ดังนัน้จะตองกาํหนด package เฉพาะที่ตองการใชงาน ดวยคําสั่ง USE ซึ่งมีรูปแบบดังนี้

USE library_name.package_name.element_of_package;

Library IEEE;USE IEEE.std_logic_1164.and;entity test is_ _ _

15

Standard Packages

attributes.vhd (synopsys)

std_logic_textio.vhd (ieee)

std_logic_unsigned.vhd (ieee)

std_logic_signed.vhd (ieee)numeric_bit.vhd (ieee)

std_logic_misc.vhd (ieee)textio.vhd (std)numeric_std.vhd (ieee)

std_logic_arith.vhd (ieee)standard.vhd (std)std_logic_1164.vhd (ieee)

SYNOPSYS proprietaryVHDL'87/VHDL'93IEEE

16

การเขยีน 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_ _ _

17

Entity

Entity ใน VHDL จะบอกถึงพอรตที่จะใชเชื่อมตอกับสวนอื่น ๆ ของวงจรภายในวงเล็บ โดยจะยังไมมีการพูดถึงพฤติกรรมของวงจร เปนสวนที่ใชสําหรับติดตอระหวางโลกภายนอกกับรูปแบบ (model) ที่จะเขยีนขึ้นเปนสวนที่ใชกําหนดจุดตอ (connection point)ของรปูแบบ กําหนดทิศทางการไหลของสัญญาณ (mode) และประเภทของคา(type of value) ทีส่ามารถกําหนดใหกับสัญญาณตามจุดตางๆ (port) ของขอมูลที่ไหลผานจุดตอเหลานั้น

18

Entity Design Unit

Syntax:entity entity_name isport (port_name :<mode> port_type);end entity_name;

ชื่อของรูปแบบที่ตองการจะเขียนชื่อของรูปแบบที่ตองการจะเขียนกําหนดทางเขาออกของขอมูล

กําหนดทางเขาออกของขอมูล

ประเภทคาของสัญญาณ หรือ ขอมูลก็คือกลุมของคาประเภทคาของสัญญาณ หรือ ขอมูลก็คือกลุมของคา

กําหนดทิศทางที่ติดตอกับภายนอก I/Oกําหนดทิศทางที่ติดตอกับภายนอก I/O

จะตองปดทายดวย end ตามดวย “entity_name” และ ;

จะตองปดทายดวย end ตามดวย “entity_name” และ ;

19

ตัวอยางการเขยีน Entity

สังเกตวาจะไมม ีSemi-Colon ที่บรรทดัสุดทาย กอนที่จะปดดวยวงเล็บปดสังเกตวาจะไมม ีSemi-Colon ที่บรรทดัสุดทาย กอนที่จะปดดวยวงเล็บปด

20

การเขยีนโดยมีขอมูลทางฟสิกส

Syntax:entity entity_name is

generic (generic_list);port (port_name :<mode> port_type);

end entity_name;

Generic (tplh : Time:=3ns,tphl : Time:=5ns);

Generic (tplh : Time:=3ns,tphl : Time:=5ns);

21

Architecture Design Unit

เปนสวนที่เขยีนบรรยายพฤติกรรม ของรปูแบบ ( model) ในมุมมองของการจําลองการทาํงาน (simulation)พฤติกรรมตางทีบ่รรยายในสวนนี้จะขึ้นอยูกับขอมูลที่ผานเขาออกตรงชองทาง ตลอดจนพารามิเตอรตางๆ (port and generics) ทีก่ําหนดใน entity design unitSyntax : เริ่มตนดวยคํา Architecture ตามดวยชื่อ และจบดวย End ตามดวยชื่อ ดังหนาถัดไปนี้

22

Architecture Syntax

Syntax:architecture architecture _name of

entity_name isdeclarations

beginconcurrent_statements

end architecture _name ;

ชื่อชื่อ architecture นั้นบรรยาย entity ใดarchitecture นั้นบรรยาย entity ใด

อยูระหวาง arc และ begin สวนนี้ใชในการเขียนประกาศกําหนดคาตางๆ ที่จะนําไปใชใน arc นั้นอาทิเชน ประเภทของ type, signal,constant, function, procedure, component ที่จะใช

อยูระหวาง arc และ begin สวนนี้ใชในการเขียนประกาศกําหนดคาตางๆ ที่จะนําไปใชใน arc นั้นอาทิเชน ประเภทของ type, signal,constant, function, procedure, component ที่จะใช

23

Architecture

การบรรยายความสัมพันธของขอมูลที่ไหลเขาออก model นั้นจะถูกบรรยายระหวาง begin กับ end ชุดคําสั่งทุกคําสั่งที่อยูในบริเวณนี้จะเปนชุดคําสั่งแบบแขงขนาน (concurrent statement) เทานั้น arc จะตองปดทายดวย end และชื่อของ arc นั้นๆ

การบรรยายความสัมพันธของขอมูลที่ไหลเขาออก model นั้นจะถูกบรรยายระหวาง begin กับ end ชุดคําสั่งทุกคําสั่งที่อยูในบริเวณนี้จะเปนชุดคําสั่งแบบแขงขนาน (concurrent statement) เทานั้น arc จะตองปดทายดวย end และชื่อของ arc นั้นๆ

Syntax:architecture architecture _name of entity_name is

declarationsbegin

concurrent_statementsend architecture _name ;

24

Architecture จะเปนสวนทีจ่ะใชในการอธิบายการทํางาน หรือโครงสรางของวงจร

ตัวอยาง เปน Architecture ของ Half Adder (HA) ที่มีชื่อวา “BEHAVE” ของ Entity ทีม่ีชื่อวา “HALFADD” ซึ่งจะมีการอธิบายการทํางานระหวาง Begin => End

Architecture

25

Architecture Styles

Algorithmic description

Netlist representation

Behavioral + Structral

26

เปนการเขียนรูปแบบ VHDL ที่ใชบรรยายการทํางานที่มีลักษณะคลายกับการเขียนโปรแกรม ดวยภาษา C หรือ PASCAL มากกวาจะเปนโครงสรางของ hardware เชนมีการใชงานคําสั่งประเภท if-then-else, for-loop เปนตน รูปแบบ VHDL เชนนี้จึงจัดใหอยูในประเภท behaviouralQ:ขอดีของการบรรยายแบบนี้คืออะไร?

Behavioural

27

ตัวอยาง Behavioural Style

architecture behavioural of mux isbegin

process ( IN0,IN1,SEL)begin

if (SEL=‘0’) thenOUTPUT <= IN0;

elseOUTPUT <= IN1;

end if;end process;

end behavioural;

28

Structural

• เปนการเขียนเพื่อบรรยายลักษณะทางโครงสรางของวงจร หรือระบบ ที่ประกอบดวยอุปกรณหลาย ๆ ตัวตอกัน

• ในการเขียนเพื่ออธิบายนั้น จําเปนตองรูวาขาของอุปกรณแตละตัวตอกันอยางไร ทําใหเราสามารถมองเห็น หรือกําหนดโครงสรางได เชนมีการทํางานพรอม ๆ กัน (ขนาน) ของอุปกรณตัวใดบาง

• ตัวอยางเชน การสรางวงจรแบบ Pipeline เราจําเปนตองเขียนในลักษณะของ Structural

29

ตัวอยาง Structural Style

architecture structural of mux iscomponent INV

port( I1 : in bit; O1 : out bit );end component;component AND2

port( I1,I2 : in bit; O1 : out bit );end component;component OR2

port( I1,I2 : in bit; O1 : out bit );end component;

signal INT0 ,INT1 ,INT2 :bit;begin

G0 :INV :port map (I1 => SEL, O1=>INT0);

G1 :AND2 :port map (I1 => IN0, I2=>INT0, O1=>INT1);G2 :AND2 :port map (I1 => SEL, I2=>IN1, O1=>INT2);G3 :OR2 :port map (I1 => INT1, I2=>INT2, O1=>OUTPUT);

end structural;

O1I1 G0

I1

I1

I2

I2O1

O1

I1

I2O1

SEL

IN1

IN0

OUTPUT

muxG1

G2

G3INT0

INT1

INT2

30

Hierarchy Design

Hierarchy เปนการออกแบบที่เปนลักษณะของลําดับชั้น ซึ่งจะทาํใหงายในการทําความเขาใจ ตรวจสอบ และแกไข

ตัวอยาง เปนการออกแบบวงจร Full Adder (FA) ซึ่งประกอบดวย HA สองตัว และ OR gate เปนลักษณะของ Hierarchy ดังแผนภาพดานบน

FA

HA HA OR

31

การเขยีน VHDL ในลักษณะของ Hierarchy (1)

32

การเขยีน VHDL ในลักษณะของ Hierarchy (2)

เราสามารถแสดงโครงสรางการเชื่อมตอกันของ HA และ OR ไดโดย3 บรรทัดที่อยูระหวาง Begin และ End U1 และ U2 แทน HA และ U3 แทน OR โดยทีท่ัง้ U1, U2, U3 เราเรียกวา Instant Nameมีจดุเชื่อมตอภายในวงจร 3 จดุดวยกันคือ I1, I2,

I3 ซึ่งใน VHDL ถือวาเปน Signal

33

การเขยีน VHDL ในลักษณะของ Hierarchy (3)

• ตัวอยางการเชื่อมตอระหวาง HA กับจุดตาง ๆ โดยรอบ เราจะใชคําสั่ง Port map ซึ่งจะทําการเชื่อมตอใหตรงตามตําแหนงการเรียงกันของพอรตที่กําหนดไวใน Entity

34

Local Declaration

สําหรบัการกําหนดวา เราตองการใช HA และ OR ในการสราง จะตองกําหนดไวเปนลักษณะของ Component ในบริเวณของ Local Declarationชื่อของ Component และตําแหนงของพอรต จะตองเหมือนกับทีก่ําหนดไวใน Entity

35

VHDL ที่สมบรูณของ Full Adder

36

Data Type

37

Type in VHDL

Signal ใน VHDL ที่ใชในการสงผานคาจากจุดหนึ่ง ไปยังอีกจุดหนึ่งนั้น มีไดหลายชนิด (Type) ซึ่งแตละ Type นั้นจะกําหนดชุดของคาที่ Signal ถูกอนุญาตใหใชได

38

Type

Type แบงออกไดเปนสองกลุมใหญ ๆ คือ- Pre-Defined- User-Defined

39

Pre-defined Type

ใน Package ที่ชื่อวา standard จะถูกโหลดเขามาใชงานโดยอัตโนมัติ โดยไมตองกําหนดไวที่บรรทัดตนไฟล ซึ่งมีชนิดตาง ๆ ของ Type ดังนี้

40

Standard Pre-defined Type

Boolean : FALSE, TRUEBit : ‘0’, ‘1’Bit_Vector : “00010”, “111”,...Character : ‘a’, ‘b’, ‘A’, ‘Z’, ‘1’, ’0’,...String : “Hello”, “VHDL”,...Integer : 0, 1, -45, 137, 256,...Real : 1.02, -37.4,...Time : 10 ns, 200 fs, 2.5 ps,...

41

แนวคิดของการกําหนด Type

เมื่อเราตองการกําหนด (assign) คาใหกับ Signal ชนิดของ Type ทัง้ดานซาย และดานขวา ของตัวสงผานคา (<=) จะตองเปนชนิดเดียวกัน ดังตัวอยาง

42

Pre-defined Type ชนิดอืน่

นอกจากนี้ เรายังมี Type ทีก่ําหนดอยูใน Package อื่น ทีไ่มใช Standard package ดังตาราง ดังนั้นกอนที่เราจะใชงานตองกําหนดการใชงาน Package ไวตอนตนดวย

signed, unsignedstd_logic_arith

std_logic, std_logic_vectorstd_ulogic, std_ulogic_vector

std_logic_1164

TypePackage

‘U’ ‘X’ ‘0’ ‘1’ ‘Z’‘W’ ‘L’ ‘H’ ‘-’

std_logic หรือ std_ulogic

“1010”signed = -6

unsigned = 10

43

‘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

Standard Logic Type

44

การใช Standard Logic

45

Signed & Unsigned type

ชนิดสัญญาณ SIGNED และ UNSIGNED ตองกําหนดใชในPackage std_logic_arith.all ในไลบราลี่ IEEE UNSIGNED type จะแสดงคาตัวเลขหรือการกระทําทางตัวเลขเปนคา บวก หรือ 0 เทานั้น และถาเปนเลข binary bitทางดานซายมือสุดจะเปน bit ที่มีนยัสําคัญสูงสุด MSB

“0110” = +6“1010” = +10

46

SIGNED type จะแสดงคาตัวเลขหรือการกระทําทางตัวเลขเปนคา บวก (0) หรือ ลบ (1) เทานั้น โดยที่การกระทําทางตัวเลขจะเปนแบบ 2’complement

“0110” = +6 “1010” = -6

Signed & Unsigned type

47

Type Conversion

• เนื่องจากทัง้ดานซาย และดานขวา ของตัวสงผานคา (<=) จะตองเปน Type ชนิดเดียวกัน ถาตางชนิดกันจะทําอยางไร?

LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;

ENTITY adder ISPORT (op1, op2 : IN UNSIGNED(3 downto 0);

result : OUT INTEGER);END adder;

ARCHITECTURE maxpld OF adder ISBEGIN

result <= CONV_INTEGER(op1 + op2);END maxpld;

48

Type Conversion

49

User-defined Type

เราสามารถที่จะกําหนดคาตาง ๆ ที่เปนไปไดสําหรับ Type ที่เรากําหนดขึ้นมาเองการใชงานจะตองเปนไปตามกฎ นั่นคือ ดานซาย และดานขวาของตัวสงผานคาจะตองเปน Type ชนิดเดียวกัน

50

การใชงาน User-defined Type

User-defined type อาจจะใชในการกําหนดชื่อของแตละ State ที่อยูใน State Machine ซึ่งเวลานําไปแปลดวยเครื่อง จะมีการเขาระหัส เปนเลขฐานสอง เรียงตามลําดับที่กําหนดไวดังรูป

51

Array

52

Arrayเปนกลุมของสัญญาณ ซึ่งเราสามารถกําหนดชวง หรือขนาดของ Array โดยใช “to” หรือ “down to”ในการสงคา (assign) ขนาดของ Array จะตองเทากัน และเปน Type ชนิดเดียวกนัการสงผานคา จะกระทําโดยอางอิงถึงตําแหนงที่ตรงกัน มิใชอางอิงโดยเลขดัชนี

53

Slice of Array

การแบงอารเรย เพื่อนํามาใชงานบางสวน เราสามารถกําหนดไดดังตัวอยาง

ผดิเพราะวา ทิศทางของอารเรย (to หรือ down to ) จะตองสมัพันธกับที่กําหนดไวตอนเริ่มตน

54

Concatenation & Aggregate

เราสามารถนําสัญญาณยอย ๆ หรืออารเรยยอย มาตอกัน หรือรวมกันได ซึ่งทําไดสองวิธีคือการใชเครื่องหมาย & (ampersand) ตอเชื่อมสวนยอย ๆ เขาดวยกัน เราเรียกวา concatenationการใชวงเล็บ ( ) และจุลภาค , เพื่อรวมสวนยอย ๆ ตาง ๆ เขาดวยกันเราเรียกวา aggregate

55

ตัวอยางของ Concatenation

56

ตัวอยางของ Aggregate

57

ในบางกรณี เราอาจกําหนดไดโดยอางถึงดัชนี และกาํหนดคาใหกบัตําแหนงที่เหลอืโดยใชคําวา others

ตัวอยางของ Aggregate

58

Operators

59

VHDL Operators

ตัวกระทํา (operator) ใน VHDL ทําใหเราสามารถกระทํา โอเปอรเรชั่น ตาง ๆ ระหวาง Signal ไดแบงไดเปน 3 ประเภทดวยกันคือ

- Logical Operators- Relational Operators- Arithmetic Operators

Type ชนิดหนึ่ง อาจจะใชตัวกระทําไดเปนบางประเภท

60

Logical Operators

AND, OR, NAND, NOR, XOR ถือวาเปน Logical operators ที่มีความสําคัญเทากนัNOT ถือวามีลําดับความสําคัญมากกวา นัน่คือจะกระทาํกอน ยกเวนเราจะกําหนดใหกระทําใน เครื่องหมายวงเล็บกอน

61

Logical Operators

เราสามารถใช Logical Operator กระทํากับตัวแปรประเภทอารเรยได ตราบใดที่ตัวกระทํา และตัวถูกกระทําเปน Type ชนิดเดียวกัน และมีขนาดเทากัน

62

Relational Operators

ตัวกระทําประเภท Relational Operators นั้นจะใชในการเปรียบเทียบคา ระหวางสองตัวแปรที่เปนชนิดเดียวกัน โดยที่จะใหผลลัพธออกมาเปนคา Boolean (TRUE, FALSE)สวนใหญจะใชในคําสั่งที่มีการตรวจสอบเงื่อนไขกอนเชน If Then

63

Arithmetic Operators• จะใชไดกับ Pre-Defined Type ประเภท

Integer, Real, Time, Signed และ Unsigned เทานั้น

• สําหรับตัวคูณ และตวัหาร เชน A*B หรือ C/DB และ D ตองเปนเลข 2^n เทานัน้

• A**X หมายถึง A ยกกําลัง X โดยที่ A มีคาเปน 2^n เหมือนกัน

64

Arithmetic Operators

จากตัวอยางการใชงาน จะเห็นวา เราสามารถกาํหนดชวงของตัวตั้ง ตัวกระทํา และผลลัพธไดโดยใชคําสั่ง Range ซึ่งหลังจากนี้ถานาํไปจําลองการทํางาน ตัว Simulator จะทําการตรวจสอบชวงของอินพุท และ เอาทพุท วาอยูในชวงหรือไม และจะแสดง error ออกมาเมื่อคาไมอยูในชวงที่กาํหนด

65

Type and Operators

std_logic*std_logic_vector*

std_ulogic*std_ulogic_vector*

signedunsigned

ArithmeticOperators

RelationalOperators

LogicalOperators

std_logic**std_logic_vector**

std_ulogic**std_ulogic_vector*

*

Integerbooleanbitbit_vector

*ไมใช std_logic_{signed,unsigned}**ใช std_logic_{signed,unsigned}

66

Concurrent vs. Sequential Statement

67

Concurrent and Sequential Statement

Concurrent Statement จะทําการแปล หรือประมวลผลในเวลาเดียวกนั หรือทุกบรรทัดพรอมกันเปนแบบขนาน เชนคําสั่งWhen Else, With SelectSequential Statement จะทําการแปล หรือประมวลผลเปนลําดับเรียงกนัไปในแตละบรรทัด เชนคําสั่ง If Then, Case, For Loop เวลาจะใชงาน Sequential Statement จะตองใชใน “Process” เทานั้นระวัง! Sequential Statement เมื่อนําไปสรางวงจร ไมจําเปนตองเปน Sequential Circuit

68

ตําแหนงของ Concurrent และ Sequential Statement

69

ตัวอยางของ Concurrent Statement

จากตัวอยาง จะเห็นวาเราสามารถสลบับรรทัดได เนื่องจากเปนการประมวลผลแบบขนานวงจรที่ไดจาก Concurrent Statement แสดงถึงลักษณะทางดานฮารดแวรที่แตละโหนด จะตองตอกันเปนลักษณะของ Concurrent โดยที่เราสามารถวาดรูปจากบรรทัดไหนกอนก็ได

70

Concurrent Statement

เปนคําสั่งแบบแขงขนาน สามารถทีจ่ะเขียนลงในตําแหนงใดๆ ภายใน Architecture ได จงึเปนขอดีทีจ่ะคอยๆ แปลง การออกแบบจาก behavioral model ไปสู structural model ได Concurrent statement สามารถมองใหเปนสวนยอยแบบ (subdesign) ที่เปนอิสระในการทํางาน และจากการที ่concurrent statement เปนอิสระตอกัน ฉะนั้นภายใน Architecture เดียวกัน สามารถทีจ่ะมี concurrent statement ไดหลายๆ Statement

71

Concurrent Statements in VHDL

When - Else statementWith - Select statementSignal assignment statementComponent instantiation statementProcess statementProcedure statement

72

When - Else Statement

คําสั่ง When - Else มีลักษณะคลายกับคําสั่ง If - Then - Else แตมีความยืดหยุนนอยกวา

73

With - Select Statement

คําสั่ง With - Select จะมีความหมายคลายกับ Case แตมีความยืดหยุนในการใชงานไดนอยกวา

74

Process Statement

Architecture simple_seq OF mux ISbegin

process (input,sel)begin

CASE sel ISWHEN “00” => output <= input (0) AFTER 5 ns;WHEN “01” => output <= input (0) AFTER 5 ns;WHEN “10” => output <= input (0) AFTER 5 ns;WHEN “11” => output <= input (0) AFTER 5 ns;

end CASE;end process;

end simple_seq;

75

Sequential Statement in VHDL

VHDL นั้นเปนภาษาที่มีคุณสมบัติแบบแขงขนาน นั่นคือชุดคําสั่งภายในตัวโครงสราง จะเปนชุดคําสั่งแบบแขงขนานโครงสรางที่ประกอบดวย Sequential Statement เชน if-then-else, case, for-loop, wait จะไปอยูสวนไหนอยางไรภายใน architecture ของ model? คําตอบก็คือ … อยูในชุดคําสั่ง Process ใน architecture หนึ่ง สามารถมีไดหลายๆ Process ที่ทํางานขนานกัน

76

Process

77

Process

สําหรับบางคําสั่งที่เปน Sequential Statement ตองกําหนดใหอยูใน Process ซึ่งจะทําการแปลความหมายลงมาทีละบรรทัดดังรูปใน Architecture หนึ่ง ๆ อาจจะมีหลาย ๆ Process ซึ่งทํางานพรอม ๆ กันเปนลักษณะของ Concurrentแตละ Process จะทํางานเมื่อ Signal ที่กําหนดไวใน Sensitivity List มีการเปลี่ยนแปลง

78

ตัวอยางการใชงาน Process

จากตัวอยาง label จะมีหรือไมมีก็ได ตามดวย Processและชื่อ Sensitivity List อยูในวงเล็บSequential Statement จะอยูระหวาง Begin และ End Processจากตัวอยางนี้ เมื่อนําไปสังเคราะหเปนวงจรจะไดเปนวงจร Combinational Logic ธรรมดา ไมใช Sequential Logic!

79

การประมวลผลใน Process

การประมวลผลใน Process จะเรียงลําดับกันเปนบรรทัดลงมา (Sequential) ซึ่งตางกับ บรเิวณที่อยูขางนอก Process ซึ่งจะทําพรอม ๆ กัน (Concurrent) ดังนั้นถาเรากําหนดไวทีบ่ริเวณตางกัน กจ็ะไดลอจิกที่ตางกันดวย ดังตัวอยางตอไปนี้

ตัวอยางที่ 1

ตัวอยางที่ 2

80

จากตัวอยางที ่1 เนื่องจาก Z ถูกกาํหนดคาพรอม ๆ กนัเนื่องจากเปน Concurrent ดังนั้นคาของ Z จะตองเลือกเอาคาใด คาหนึ่งของเอาทพุทลอจิก ทั้งสองตัวที่เขามาสําหรบัตัวอยางที ่2 คาของ Z จะมีการเปลีย่นแปลงคา หรือถกู Update ดวยคาสุดทายที่เกิดขึน้ที่บรรทัดสุดทาย บรรทัดแรกจะถูกมองขามไปเนื่องจากจะถูกแปลทบัดวยบรรทดัที่สอง เพราะวาเปนลักษณะการแปลความหมายเรียงกันลงมาทลีะบรรทัด

การประมวลผลใน Process

ตัวอยางที่ 1 ตัวอยางที่ 2

81

Sensitivity List

Process จะทํางานเมื่อสัญญาณใน Sensitivity List มีการเปลี่ยนแปลง ดังนั้นเราควรจะกาํหนดสัญญาณที่เปนอินพุท ที่จะมีผลตอการทํางานใน Process ทั้งหมด อยูใน List

82

Label : Process (sensivity list)process declarative part

Beginprocess statement part

--Sequential statement--end process label;

กฎเกณฑการเขียน Process

ตั้งชื่อ process (จะมีหรือไมมีก็ได)ตั้งชื่อ process (จะมีหรือไมมีก็ได)

ถาตั้งชื่อ process จะตองมีชื่อหลังend process ดวยถาตั้งชื่อ process จะตองมีชื่อหลังend process ดวย

83

ตัวอยางการใชงาน Process

Architecture behavioral of muxMUT : Process (select)

--process declarative partBeginif (select =‘1’) then

data_out <= a;else

data_out <= b;end if

end process MUT;end architecture behavioral;

84

Variable in Process

สําหรับ Process ใน VHDL เราสามารถกําหนดตัวแปรเปน Variable ได ซึ่งจะมีลักษณะเหมอืนกับภาษาชั้นสูงโดยทั่วไป นั่นคือ จะมกีาร update คาทันที ซึ่งตางกับ Signal ที่จะมีการ update คาในตอนสิ้นสุด Process เทานั้นในการกําหนดคาให Variable จะใชเครื่องหมาย :=Variable จะรูจักเฉพาะใน Process ที่กาํหนดขึ้นมาเทานั้น ซึ่งตางกับ Signal ที่จะรูจักตลอดทั้งใน ArchitectureVariable เปนเพียงตัวแปร ไมมีความเกี่ยวของทาง Hardware แตอยางไร สวน Signal นั้นเปนตัวที่ทําหนาที่เปนพาหะ รับ-สง คาของสัญญาณจึงเปนสวนของ Hardware

85

ตัวอยางการใชงาน 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;

Z <= M + N;

M := C;

Y <= M + N;

end process;

Take Effect Immediately...

Take Effect When Suspend...

Z =Y =

A + BC + B

86

Quiz

ลองดูตัวอยาง VHDL ไฟลนี้ แลวหาคาของ Y และ Z ตอนสิ้นสุด Process

87

Sequential Statements in Process

88

ชุดคําสั่งที่ใชใน Process

เปนชุดคําสั่งที่สําคัญที่สุดสําหรับการเขียนรูปแบบในลักษณะของการบรรยายพฤติกรรมของระบบดิจิตอลชุดคําสั่งเหลานี้จะทํางานเปนลําดับจากบนลงลางเมื่อ Process ถูกกระตุนใหทํางานจะเปนตัวกําหนดเขตในสวนของ Sequential statementการทํางานภายใน Process จะไมขึน้กับเวลา นั่นหมายความวา ชุดคําสั่ง Process จะทํางานตลอดเวลา

89

If-Then-Else Statement

กฎเกณฑ (Syntax) ในการเขียนภาษา VHDL มีดังนี้

IF condition THEN{sequential-

statement(s)}[{ ELSIF condition THEN}

{sequential-statement(s)}]

[ ELSE END IF;

90

Case Statement

กฎเกณฑ (Syntax) ในการเขียนภาษา VHDL มีดังนี้

CASE expression ISWHEN choice => sequential-statement(s)

[ WHEN choice => sequential-statement(s)]

END CASE;

คําสั่ง WHEN ใชสําหรับกําหนดตัวเลือกที่จะนํามาเปรียบเทยีบกับ expression ตัวเลือกใดเปนไปตาม expression ขางบน PROCESS จะเริม่ตนทํางานที่ชุดคําสั่งลําดับที่ตามมาจนกระทัง้คําสั่งสุดทายของตัวเลือกนั้นๆ และออกจาก CASE statement โดยไมทําหนทางอื่นๆทีย่ังเหลืออยู

91

Loop Statement

คือการทาํงานในลักษณะทีเ่ปนวงรอบ (loop) มีกฏเกณฑในการเขียนดังนี้

Label: interation_scheme loopsequential-statement(s)

END loop label;

เราสามารถสราง loop ได 3 ลักษณะดวยกันคือ LOOP ธรรมดา , FOR-LOOP และ WHILE-LOOP

92

For-Loop Statement

กลุมคําสั่ง for-loop จะทํางานเปนวงรอบตราบเทาที ่คาพารามิเตอรยังอยูในขอบขาย(range)ที่กําหนด

Label: FOR loop_parameter IN discrete_range loopsequential-statement(s)

END loop label;

ตัว loop_parameter เปนพารามิเตอรทีแ่ผงอยูในโครงสรางที่ไมตองประกาศหรือกําหนดขึ้น คาพารามิเตอรนี้หามถูกแกไขดัดแปลงดวยคําสั่งใดๆ ทัง้จากภายในและจากภายนอก for loop

93

ตัวอยาง For-Loop

b1: FOR index IN 0 to 7 loopdout(index) <= din(index);

END loop b1;

จากตัวอยางเปนการยายขอมูลในรูปของ array ชื่อ din ไปยัง array ที่ชื่อ dout ตําแหนงตอตําแหนง โดยอาศัย loop_parameter ชื่อ indexสิ่งที่พึงจําในการสรางคือ discrete range จะตองเปนคาที่ลงตัว ตัวเลขจํานวนเต็มสามารถใชได หรือตัวอักษร เชน a to f

94

While Loop Statement

Label: while boolean_expression loopsequential-statement(s)

END loop label;

กลุมคาํสั่งลาํดับใน WHILE-LOOP จะทํางานเปนวงรอบไปเรอืยๆ ตราบเทาทีข่อแมของ boolean_expression ใน while-loop ยังคงมีคาเปน true จํานวนครั้ง(รอบ) ที่ทําจะถูกควบคุมจากในตัวของ loop เอง นั้นคืออการที่จะออกจากวงรอบไดก็ตอเมือ่ผลลพัธของ boolean_expression ไดคาเปน false ขอแมที่ใชควบคุมการทาํงานนี้จะถูกตรวจสอบทกุครั้งกอนการทาํงานตอไปในวงรอบ

95

ตัวอยาง While Loop

P1: process (A)variable index : integer:=0; begin Loop1 : while index < 8 loop

dout(index <= din(index);index := index+1;

end loop Loop1;end process P1;

96

จากการที่ชุดคําสั่ง Process จะถูกกระตุนไดจากการที่สัญญาณใดสัญญาณหนึ่งใน sensitivity list เกิด event ขึน้เทานัน้ หลังจากกระตุนแลวคําสั่งภายในจะทาํงานเปนลาํดับลงมาจนกระทัง่หมด และชุดคําสั่ง Process จะหยุดทํางานชั่วคราวจนกวาสัญญาณใน list สัญญาณใดสัญญาณหนึ่งเกิด event ขึน้อีกถาในกรณทีี่ภายในรายชื่อภายใน list ประกอบดวยสัญญาณหลายๆ ตัว และ เกิด event ขึน้ในเวลาเดียวกนั จะมีสัญญาณตัวเดียวจากทั้งหมดเทานั้น ทีก่ระตุนการทํางานของชุดคําสั่ง process ซึ่งไมสามารถที่จะบอกไดวาเปนสัญญาณใด ดังนัน้การใชคําสั่ง process รวมกบั sensitivity list จึงมีขีดจํากัดใน VHDL จึงหลีกเลี่ยงปญหานีโ้ดยใชคําสั่งที่มีความออนตัวมากกวา ไดแกชุดคําสั่ง wait statement

Wait Statement

97

Wait Statement

สามารถกําหนดลงตรงตําแหนงใดๆ ภายในชุดคําสั่ง ลําดับได เพื่อระงบัการทํางานภายในชุดคําสั่ง process ตรงตําแหนงที ่wait statement อยูสามารถทีจ่ะกําหนด wait statement ไดหลายๆอันในแตละตําแหนงตามความตองการโดยไมจาํกัดwait statement ไมสามารถใชรวมกับ sensitivity list ภายใน process เดียวกันได

98

Label : wait [on { , signal_list}]

[ until condition is boolean_expression ][for time_expression]

กฎเกณฑการเขียน Wait Statement (1)

ตั้งชื่อ wait (จะมีหรือไมมีก็ได)ตั้งชื่อ wait (จะมีหรือไมมีก็ได)

การใช on รวมกับ until การทํางานจะถูกหยุดจนกระทั่งสัญญาณในสวนของ on มี event และ ขอแมในสวนของ until เปนจริงการใช on รวมกับ for การทํางานจะถูกหยุดจนกระทั่งสัญญาณในสวนของ on มี event หรือ เมื่อเวลาในสวน for ผานไป

99

การใช until รวมกับ for การทาํงานจะถูกหยุดจนกระทัง่ขอแมในสวนของ until เปนจรงิ หรอื เมื่อเวลา for ผานไปถาชุดคําสั่ง process ใดไมมี sensitivity list และ wait statement ภายในโครงสราง process นั้นจะเกิดการทํางานเปนวัฎจักรที่ไมมีจุดจบ

กฎเกณฑการเขียน Wait Statement (2)

100

การใชงาน Wait Statement (1)

1. wait ON signal_list; - - signal sensitivityEx. wait ON clock,clear,preset,d; คําสั่งนี้จะหยุดการทํางานของชุดคําสั่งลําดับจนกวาจะเกิด event ขึ้นที่ signal_list

2. wait UNTIL condition - - conditionEx. wait UNTIL (clock=‘1’);การทาํงานของชุดคําสั่งลําดับจะหยุดทํางานทีต่ําแหนง condition และทาํงานตอไปเมื่อ condition เกิด event และคา boolean expression ของ condition เปนจรงิ ลําดับการทํางานจะหยุดตรงนี ้

101

3. wait FOR time; --timeoutEx. wait FOR 10 ns

คําสั่งนี้เปนการรอหรือหยุดในขณะที่จําลองการทํางานจนกวาเวลาการจําลองจะผานไปแลว time จะมีผลทําให processเริ่มทํางานตอไปได4. wait; -- forever

Ex. wait; เปนคําสั่งให process หยุดทํางานตลอดไป โดยไมมีการเริม่ทํางานใหม

การใชงาน Wait Statement (2)

102

Wait Statement Example

Library IEEE;use IEEE.std_logic_1164.all;entity D_FLOP isport (D,CLK :in std_logic;

Q : out std_logic);end D_FLOP;architecture A of D_FLOP isbegin

process begin

wait until CLK’ event and CLK =‘1’;Q<= D;;

end process;end A;

103

State Machine in VHDL

104

คือคือ วงจรวงจร sequential sequential มสีัญญาณมสีัญญาณ Clock Clock มาควบคุมมาควบคุมการทํางานการทํางานซึ่งซึ่งออกแบบโดยแบงสถานะการทํางานออกแบบโดยแบงสถานะการทํางาน ((สเตทสเตท)) ของของ วงจรวงจร ออกเปนหลายออกเปนหลาย ๆๆ สถานะสถานะแตแตละสเตทละสเตทมีลอจิกการทํางานที่ตางกันมีลอจิกการทํางานที่ตางกัน เพื่อกําเนิดคาเพื่อกําเนิดคาเอาตพุตเอาตพุต และคาสเตทและคาสเตทถัดไปถัดไปมีมีสัญญาณสสัญญาณสเตทเตท ที่กําหนดวาที่กําหนดวา สเตทสเตทปจจุบันปจจุบันเปนสเตทเปนสเตทไหนไหน

State State MachineMachineclkclk

statestate

inputinput outputoutput

State Machine

105

สัญญาณสเตทสัญญาณสเตทจะจะถูกเก็บในรีจีสเตอรถูกเก็บในรีจีสเตอร ดังนั้นดังนั้น สเตทจะสามารถสเตทจะสามารถเปลี่ยนแปลงไดที่ขอบของเปลี่ยนแปลงไดที่ขอบของ clock clock เทานั้นเทานั้น State Machine State Machine มีมี 2 2 ประเภทประเภท

Moore MachineMoore Machine มีมีเอาตพุตเอาตพุตเปลี่ยนแปลงตามเปลี่ยนแปลงตามจังหวะของจังหวะของ clock clock เทานั้นเทานั้น ((แตละสเตทจะมีแตละสเตทจะมีคาคาเอาตพุตที่กําหนดแนนอนเอาตพุตที่กําหนดแนนอน,, เอาตพุตจะเปลี่ยนเอาตพุตจะเปลี่ยนก็ก็ตอเมื่อสเตทตอเมื่อสเตทเปลี่ยนเปลี่ยน))Mealy MachineMealy Machine เอาตพุตเอาตพุตไมจําเปนตองไมจําเปนตองเปลี่ยนแปลงตามจังหวะของเปลี่ยนแปลงตามจังหวะของ clock clock ((ภายในภายใน สเตทสเตท หนึ่งหนึ่ง ๆๆ เอาตพุตสามารถเปลี่ยนแปลงไดเอาตพุตสามารถเปลี่ยนแปลงได ถาถาอินพุตเปลี่ยนอินพุตเปลี่ยน))

State Machine

106

Moore Machine

Stat

e R

egis

ter

C1

x(t)

s(t+1)

s(t)

z(t)

clk

init

presentstatepresent

input

nextstate

C2

107

Mealy Machine

Stat

e R

egis

ter

C1

x(t)

s(t+1)

s(t)z(t)

clk

init

presentstatepresent

input

nextstate

C2

108

สําหรับสําหรับ State Machine State Machine ในใน VHDLVHDLทําไดโดยใชทําไดโดยใชคําสั่งคําสั่ง Type Type กับกับ Signal Signal ประกอบกันเพื่อกําหนดประกอบกันเพื่อกําหนดชื่อของแตละชื่อของแตละ สเตทสเตท และตัวแปรที่จะใชและตัวแปรที่จะใชแทนสเตทแทนสเตท มักนิยมทํามักนิยมทํา Moore Moore และและ Mealy Machine Mealy Machine ดวยดวยคําสั่งคําสั่ง CaseCase

S0 S1

i/p = 1

i/p = 0i/p = 0

State Machine in VHDL

109

ตัวอยางการใชงาน FSM

FSM

din

doutclk

clr

dindout

1 0 1 1 0 1 1 0 1 0 0 1 1 0 1 00 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0

Detect input sequence 1101

110

State Diagram to Detect “1101” Sequence

S00

S10

S110

S1100

S11011

11

0

1

0 10

0

1

0

CLR

111

FSM.vhd (1)

entity fsm is port (clk: in STD_LOGIC; clr: in STD_LOGIC; din: in STD_LOGIC; dout: out STD_LOGIC);end;

architecture fsm_arch of fsm is

type state_type is (S0, S1, S11, S110, S1101);signal present_state, next_state: state_type;

begin

112

FSM.vhd (2)

synch: process(clk, clr)begin if clr = '1' then present_state <= S0; elsif clk'event and clk = '1' then present_state <= next_state; end if;end process;

Stat

e R

egis

ter

C1

x(t)

s(t+1)s(t)

z(t)

clk

init

presentstatepresent

input

nextstate

C2

113

FSM.vhd (3)

comb1: process(present_state, din)begin case present_state is

when S0 => if din = '1' then next_state <= S1; else next_state <= S0; end if;when S1 => if din = '1' then next_state <= S11; else next_state <= S0; end if;

S00

S10

S110

S1100

S11011

11

0

1

0 10

0

1

0

CLR

Stat

e R

egis

ter

C1

x(t)

s(t+1)s(t)

z(t)

clk

init

presentstatepresent

input

nextstate

C2

114

FSM.vhd (4)

when S11 => if din = '0' then next_state <= S110; else next_state <= S11; end if;when S110 => if din = '1' then next_state <= S1101; else next_state <= S0; end if; when S1101 => if din = '0' then next_state <= S0; else next_state <= S11; end if;when others => null;end case;

end process;

S00

S10

S110

S1100

S11011

11

0

1

0 10

0

1

0

CLR

115

FSM.vhd (5)

comb2: process(present_state)begin if present_state = S1101 then dout <= '1'; else dout <= '0'; end if;end process;

end fsm_arch;

Stat

e R

egis

ter

C1

x(t)

s(t+1)s(t)

z(t)

clk

init

presentstatepresent

input

nextstate

C2

116

Design Examples in VHDL Code

117

Multiplexer

118

Shift Register (p1)

119

Shift Register (p2)

120

Counter (p1)

121

Counter (p2)

122

RAM (p1)

123

RAM (p2)

124

RAM (p3)

125

ROM (p1)

126

ROM (p2)

127

THANK YOU