cpld_2

20
39 6. การออกแบบลอจิกโมดูลดวยวิธีเขียนโปรแกรมภาษา HDL ภาษา HDL (HDL: Hardware Description Language) เปนภาษาโปรแกรมที่ใชออกแบบ วงจรลอจิก แทนการออกแบบดวยวิธีการเขียนเปน Schematic Diagram การออกแบบวงจรลอจิก ดวยวิธีเขียนเปนภาษา HDL มีขอดีคือ สามารถออกแบบวงจรที่มีความซับซอนมาก ได ไมตองใช คณิตศาสตรบูนลีนในการลดรูปวงจร ไมตองเสียเวลาลากเสนวงจร ภาษา HDL มีหลายภาษาที่นิยม ใชกันอยูไดแก - ภาษา Abel HDL - ภาษา VHDL - ภาษา Verilog แตละภาษาก็มีขอดีขอดอยแตกตางกันไป สําหรับในเอกสารเลมนี้ผูเขียนเลือกใชภาษา Abel – HDL เนื่องจากเปนภาษาที่ติดมาในโปรแกรม XILINX Foundation ver 2.1i โดยไมตองลงทะเบียนลิขสิทธิและมีโครงสรางภาษาคลายกับภาษาปาสคาลที่เราคุนเคย สวนภาษา VHDL เปนภาษาที่นิยมใชอีก ภาษาหนึ่งที่มีโครงสรางคลายกับภาษาซี 6.1 โครงสรางและองคประกอบของภาษา Abel – HDL 6.1.1 ตัวอยางโครงสรางของโปรแกรมภาษา Abel – HDL module mygate1 Title 'mygate1' Declarations A PIN; B PIN; EN PIN; and_out PIN istype 'com'; or_out PIN istype 'com'; sum_out PIN istype 'com'; not_a PIN istype 'com'; c_out PIN istype 'com'; Equations and_out = ( A & B) & EN; or_out = (A # B) & EN; sum_out = (A $ B) & EN; c_out = (A & B) & EN; not_a = (!A) & EN; end mygate1

Upload: wanchai-ratchatasomboon

Post on 11-Mar-2015

32 views

Category:

Documents


0 download

DESCRIPTION

CPLD_2

TRANSCRIPT

Page 1: CPLD_2

39

6. การออกแบบลอจิกโมดูลดวยวิธีเขียนโปรแกรมภาษา HDL ภาษา HDL (HDL: Hardware Description Language) เปนภาษาโปรแกรมที่ใชออกแบบวงจรลอจิก แทนการออกแบบดวยวิธีการเขียนเปน Schematic Diagram การออกแบบวงจรลอจกิดวยวิธีเขียนเปนภาษา HDL มีขอดีคือ สามารถออกแบบวงจรที่มีความซับซอนมาก ๆ ได ไมตองใชคณิตศาสตรบูนลีนในการลดรูปวงจร ไมตองเสียเวลาลากเสนวงจร ภาษา HDL มีหลายภาษาที่นยิมใชกันอยูไดแก - ภาษา Abel HDL - ภาษา VHDL - ภาษา Verilog แตละภาษาก็มขีอดีขอดอยแตกตางกันไป สําหรับในเอกสารเลมนี้ผูเขียนเลือกใชภาษา Abel – HDL เนื่องจากเปนภาษาที่ตดิมาในโปรแกรม XILINX Foundation ver 2.1i โดยไมตองลงทะเบียนลิขสิทธิ์ และมีโครงสรางภาษาคลายกับภาษาปาสคาลที่เราคุนเคย สวนภาษา VHDL เปนภาษาที่นิยมใชอีกภาษาหนึ่งที่มโีครงสรางคลายกับภาษาซ ี 6.1 โครงสรางและองคประกอบของภาษา Abel – HDL 6.1.1 ตัวอยางโครงสรางของโปรแกรมภาษา Abel – HDL

module mygate1 Title 'mygate1' Declarations A PIN; B PIN; EN PIN; and_out PIN istype 'com'; or_out PIN istype 'com'; sum_out PIN istype 'com'; not_a PIN istype 'com'; c_out PIN istype 'com'; Equations and_out = ( A & B) & EN; or_out = (A # B) & EN; sum_out = (A $ B) & EN; c_out = (A & B) & EN; not_a = (!A) & EN; end mygate1

Page 2: CPLD_2

40

จากตัวอยางของโปรแกรมของภาษา Abel-HDL ซ่ึงเปนโปรแกรมออกแบบลอจิกโมดูลแบบ Combination Logic อยางงาย จะมีองคประกอบดังตอไปนี้คือ 1. module เปนขอความสวนหวัของโปรแกรมที่ใชกําหนดชื่อของลอจิกโมดูล คือ mygate1 หลักการกําหนดชื่อลอจิกโมดูล ตองขึ้นตนดวยตวัอักษรติดกันไมเกนิ 8 ตัว 2. Title เปนขอความสั้น ๆ ที่อธิบายรายละเอียดเพิ่มเติมเปนภาษาอังกฤษตองมีเครื่องหมาย ฝนทอง (quotation mark) 3. Declarations เปนสวนที่ใชประกาศชือ่ขา I/O หรือ ขา Hierachy I/O ports ของโมดูลประกอบดวย 2 สวนคือ input pin และ output pin เฉพาะ output pin จะตองกาํหนดชนิดดวยวา เปนชนิดใด โดยใชขอความ istype แลวตามดวย attribute เชน ‘com’ หมายถึงเปนขาoutput ชนิด Combination logics และ ‘reg’ หมายถึงเปนขา output ชนิด Sequential Logic หรือ register output 4. Equations เปนสวนทีใ่ชเขียนสมการลอจิก ที่จะไดผลลัพทที่ขา Output แตละขาตามตองการ การเขียนสมการคลายกับรูปแบบของภาษาปาสคาล 5. end เปนสวนปดทายของโปรแกรม end ตองตามดวยช่ือโมดูล 6.1.2 องคประกอบของภาษา Abel – HDL - Attributes เปนสวนกําหนดชนิดของขา pin หรือตัวแปร node ไดแก 'buffer' - no inverter in target device

'collapse' - collapse (remove) this signal 'com' - combinational output 'dc' - unspecified logic is don't care 'invert' - inverter in target device 'keep' - do not collapse this signal (ABEL6) 'neg' - unspecified logic is 1 'pos' - unspecified logic is 0 'retain' - do not minimize this output 'reg' - clocked memory element 'reg_d' - D-type flip-flop 'reg_g' - D-type flip-flop with gated clock 'reg_jk' - JK-type flip-flop 'reg_sr' - SR-type flip-flop 'reg_t' - T-type flip-flop 'xor' - xor gate

ตัวอยาง q3,q2,q1,q0 NODE ISTYPE 'reg_SR'; reset PIN; reset ISTYPE 'com'; Output PIN 15 ISTYPE 'reg,invert'; QOUT PIN ISTYPE 'reg,dc,keep';

Page 3: CPLD_2

41

- Dot extensions เปนสวนตอช่ือขา pin ที่เปนตัวแปรสําหรับกําหนดขาใชงานเฉพาะทั้ง Combination และ Sequential Logics ไดแก CLOCK CONTROL

.CE clock-enable input to a gated-clock flip-flop .CLK clock input ตัวอยาง declarations DFFCE PIN ISTYPE 'reg_G'; Clk,ClkEn,DIn PIN; equations DFFCE.CLK = Clk; DFFCE.CE = ClkEn; DFFCE := DIn; ------------------------------------------ REGISTER CONTROL Flip-flop inputs .D D input to a D flip-flop .J J input to a JK flip-flop .K K input to a JK flip-flop .R R input to a SR flip-flop .S S input to a SR flip-flop .T T input to a T flip-flop Latch enable inputs .LE latch-enable input to a latch (active LOW) .LH latch-enable input to a latch (active HIGH) Other .FC flip-flop mode control .LD register load input .PR register preset (synchronous or asynchronous) .RE register reset (synchronous or asynchronous) ตัวอยาง declarations foo PIN ISTYPE 'reg_JK'; Clock,A,B,C PIN; equations foo.clk = Clock; foo.J = A & B; foo.K = A $ C; ------------------------------------------

Page 4: CPLD_2

42

Dot extensions (ตอ)

Device-independet .ACLR asynchronus register reset .ASET asynchronous register reset .CLR synchronous register preset .SET synchronous register reset Device-specific .AP asynchronous register preset .AR asynchronous register reset .SP synchronous register preset .SR synchronous register reset ตัวอยาง declarations RST,A,B pin; Q pin istype 'reg'; equations Q := A & B; " flip-flop Q output condition Q.ACLR = !RST; " flip-flop Q reset condition ------------------------------------------ .OE output enable ตัวอยาง declarations OUT pin istype 'com'; A,B,C,D pin; equations OUT = A $ D; OUT.OE = C & D; " OUT tristate output buffer control

- รูปแบบทั่ว ๆ ไปของภาษา Abel-HDL 1. Block format ของ Statements ใชเครือ่งหมายวงเล็บปกกาเชนเดยีวกับภาษาซี หรือปาสคาล รูปแบบ { set of instructions } 2. Comment format มี 2 แบบคือ ใชเครื่องหมาย “ comment “ และ // comment ตัวอยาง " comment text " " comment text to the end of line // comment text to the end of line count := count.fb + 2; " count by 2 count.clk = clk; "clock equation" count.oe = !enable; // enable equation 3. Number notation หมายถึงเครื่องหมายกํากับฐานเลข ซ่ึงกําหนดใหใชได 4 ฐานดังนี้คือ

Page 5: CPLD_2

43

- binary: ^B or ^b - decimal: ^D or ^d

- hex: ^H or ^h - octal: ^O or ^o

default is decimal, but it can be changed by directive @RADIX

ตัวอยาง input = ^b010101;

DATA = ^HFA0; Address1 = 101; " default is decimal - 'Address1' is decimal value 101 @RADIX 2; Address2 = 101; " NOW default is binary - 'Address2' is decimal value 5 @RADIX 1010; " return to default decimal

4. String format รูปแบบการใชเครื่องหมายกํากับขอมลูที่เปนตัวอักขระหรือขอความ กําหนดใหใชเครื่องหมาย ‘ (Quotation mark) เชน ' string ' ` string ` ` this is also correct string ' title 'Abel HDL binary adder'

- Object Declarations คือรูปแบบของการประกาศคาตาง ๆ ที่ใชในการเขียนโปรแกรม ไดแก 1. attribute declaration เชน F0, A istype 'neg, reg' ;

q3,q2,q1,q0 node istype 'reg_SR'; reset pin;

reset istype 'com'; Output pin 15 istype 'reg,invert,dc';

2. constant declaration เชน X =.X.; " X means 'don't-care' ADDR = [1,0,15]; " ADDR is a set with 3 elements G = [1,2]+[3,4]; " set operations are legal A = B & C; " operations on identifiers are valid

3. macro declaration เชน " macro with arguments NAND3 macro (a,b,c) { !(?a & ?b & ?c) }; " macro without arguments Y1 macro {B # C};

" constant subexpression Y2 = B # C;

equations X1 = A & Y1 "RESULT: X1 = A & B # C; X2 = A & (Y1); "RESULT: X2 = A & (B # C); X3 = A & Y2; "RESULT: X3 = A & (B # C); D = NAND3 (Clock,Hello,Busy); "RESULT: D = !(Clock & Hello & Busy);

Page 6: CPLD_2

44

4. node declaration หมายถึงการประกาศตัวแปร node เชน SClr0, SClr1 node 25,26; " counter reset

CHd0, CtHd1 node 28,29; " counter !HOLD

" Counter bits, input to AND-array C0,C1,C2,C3,C4,C5 node 55,56,57,58,59,60;

" Buried SR-regs P0,P1,P2,P3,P4,P5,P6,P7 node istype 'reg_SR' ;

5. pin declaration หมายถึงการประกาศชื่อขา pin หรือกลุมขา pin เชน D7,D6,D5,D4,D3,D2,D1,D0 pin 2,3,4,5,6,7,8,9;

A,B,C,D pin istype 'com'; Q7 .. Q0 pin 15 .. 22; Q7 .. Q0 istype 'reg,invert'; Clk,OC,E,I2,I1,I0 pin; 6. set declaration หมายถึงการประกาศเพื่อกําหนดชื่อของกลุมขาหรือคาตัวแปรกอนนํามาใชในสมการ เชน

multiple syntax of set declaration RPM = [RPM3,RPM2,RPM1,RPM0]; SREG = [ Q2 , Q1 , Q0 ]; IDLE = [ L , L , L ]; SLOW = [ L , L , H ];

FAST = [ L , H , H ]; BRAKE = [ H , H , H ];

MULOUT = [B0..B7]; SELECT = [S3..S2];

- Operators หมายถึงตัวดาํเนินการที่เปนเครื่องหมายหรอืตัวสัญลักษณที่กระทําทางดาน ตาง ๆ ดังตอไปนี้ คือ 1. arithmetic operators เปนตัวดําเนินการทางดานคณติศาสตร เชนเดียวกับภาษาซีและปาสคาล แตมีรายละเอยีดเพิ่มเติมทางดานฮารดแวร

- (one argument) twos complement (negation) - (two argument) subtraction + addition Operators not supported for sets * multiplication / unsigned integer division % modulus: remainder from / << shift left >> shift right

Page 7: CPLD_2

45

2. assignment operators เปนตัวกาํหนดคาทางดาน Output ของ pin หรือตัวแปร ตาง ๆ ในสมการ ไดแก

Operator Description = combinational assignment (on-set) := registered assignment (on-set) ?= combinational assignment (dc-set) ?:= registered assignment (dc-set) -> truth table assignment

ตัวอยาง A B -> Y 0 0 -> 1 0 1 -> 0 1 0 -> - don't care 1 1 -> 1 @DCSET Y = A !$ B; " on-set Y ?= A & !B; " dc-set

3. logical operators เปนตัวกระทําดานลอจิก ไดแก

Operator Description ! NOT: ones complement & AND # OR $ XOR: exclusive OR !$ XNOR: exclusive NOR

4. relational operators เปนตัวกระทําทางดานการเปรยีบเทียบ ไดแก

Operator Description == equal != not equal < less than <= less than or equal > greater than >= greater than or equa

Page 8: CPLD_2

46

- Definition Constructions หมายถึงรูปแบบการเขียนโปรแกรมเพื่อประมวลผล มี 3 รูปแบบดังนี้ 1. Expession Definition เปนการสรางโปรแกรมแบบปรกติทั่วไป

Module comp4 Title '4-bit look-ahead comparator' Declarations A3..A0,B3..B0 pin; E3..E0 pin istype 'com'; A_EQ_B,A_NE_B,A_GT_B,A_LT_B pin istype 'com'; A = [A3,A2,A1,A0]; B = [B3,B2,B1,B0]; E = [E3,E2,E1,E0]; Equations E = A !$ B; " intermediate An = Bn A_EQ_B = E3 & E2 & E1 & E0; " A=B A_NE_B = !A_EQ_B; " A!=B A_GT_B = (A3>B3) # " A>B E3 & (A2>B2) # E3 & E2 & (A1>B1) # E3 & E2 & E1 & (A0>B0); A_LT_B = !A_GT_B & !A_EQ_B; " A<B End comp4

2. State Definitions เปนการสรางโปรแกรมแบบสรางเปนงานยอย ๆ (Subroutine Program) งานยอยแตละงานเรียกวา State ตัวอยาง โปรแกรมที่เขียนแบบ State Equation

Module counter Title 'Decimal Up/Down Counter wit Synchronous Clear' Declarations Clk pin; Clr,Dir pin; Q3..Q0 pin istype 'reg'; " Counter States S0 = ^b0000; S4 = ^b0100; S8 = ^b1000; S1 = ^b0001; S5 = ^b0101; S9 = ^b1001; S2 = ^b0010; S6 = ^b0110; S3 = ^b0011; S7 = ^b0111;

Page 9: CPLD_2

47

CNT = [Q3,Q2,Q1,Q0]; Equations CNT.CLK = Clk; State_diagram [Q3,Q2,Q1,Q0] State S0: if Clr then S0 else if Dir then S1 else S9; State S1: if Clr then S0 else if Dir then S2 else S0; State S2: if Clr then S0 else if Dir then S3 else S1; State S3: if Clr then S0 else if Dir then S4 else S2; State S4: if Clr then S0 else if Dir then S5 else S3; State S5: if Clr then S0 else if Dir then S6 else S4; State S6: if Clr then S0 else if Dir then S7 else S5; State S7: if Clr then S0 else if Dir then S8 else S6; State S8: if Clr then S0 else if Dir then S9 else S7; State S9: if Clr then S0 else if Dir then S0 else S8; End counter

3. Truth Table Definition เปนการสรางโปรแกรมใหทํางานในลักษณะเปน Truth Table เราสามารถกําหนดคาผลลัพททางดานเอาทพุทใหเปนไปตามเงื่อนไขตาม Truth table คาตาง ๆ ได การทํางานจะเปนไปตามลําดับของคาที่อยูใน Truth table

Page 10: CPLD_2

48

ตัวอยาง โปรแกรมที่เขียนแบบ Truth table equation

Module bcd2led Title '7-segment display decoder' " a " --- BCD-to-seven-segment decoder similar to the 7449 " f| g |b " --- segment identification " e| d |c " --- Declarations D3,D2,D1,D0 pin; a,b,c,d,e,f,g pin istype 'com'; bcd = [D3,D2,D1,D0]; led = [a,b,c,d,e,f,g]; ON,OFF = 0,1; " for common anode LEDs L,H,X,Z = 0,1,.X.,.Z.; @dcset Truth_table (bcd -> [ a , b , c , d , e , f , g ]) 0 -> [ ON, ON, ON, ON, ON, ON, OFF]; 1 -> [OFF, ON, ON, OFF, OFF, OFF, OFF]; 2 -> [ ON, ON, OFF, ON, ON, OFF, ON]; 3 -> [ ON, ON, ON, ON, OFF, OFF, ON]; 4 -> [OFF, ON, ON, OFF, OFF, ON, ON]; 5 -> [ ON, OFF,ON, ON, OFF, ON, ON]; 6 -> [ ON, OFF,ON, ON, ON, ON, ON]; 7 -> [ ON, ON, ON, OFF, OFF, OFF, OFF]; 8 -> [ ON, ON, ON, ON, ON, ON, ON]; 9 -> [ ON, ON, ON, ON, OFF, ON, ON]; End bcd2led

- Sequential Statements เปนชุดคําสั่งสําหรับควบคุมลําดับการทํางานของโปรแกรมใหเปนไปตามเงือ่นไขของสัญญาณอินพุทตาง ๆ และคาตัวแปร node ชุดคําสั่งเหลานี้จะใชเฉพาะการออกแบบวงจรลอจิกแบบ Sequential ที่ตองมีขาปอนสัญญาณ Clock เพื่อใหเกิดจังหวะของการทํางาน ที่ทําใหตวัแปร node เปล่ียนแปลงคา ดังนัน้ ในระบบจะตองกําหนดวงจร Counter เปนองคประกอบดวย ซ่ึงมีชุดคําสั่งดังตอไปนี้ 1. case statement เปนชุดคําสั่งสําหรับเลือกทํางานไปตามกรณีของเงื่อนไขอินพุท

Page 11: CPLD_2

49

ตัวอยาง การใชคําสั่ง case

STATE SA : CASE (?COND == ^H2A): SC with ?OUT.D = [0,1,0,0, 0,0,0,0]; "H40; endwith; (?COND == ^H1F): SB with ?OUT.D = [0,0,1,0, 0,0,0,0]; "H20; endwith; !(?COND == ^H1F) & !(?COND == ^H2A): SA with ?OUT.D = [0,0,0,0, 0,1,0,0]; "H04; endwith; ENDCASE;

2. goto statement เปนชุดคําสั่งสําหรับใหกระโดดไปทํางานใน state อ่ืน แบบไรเงื่อนไข ตัวอยาง การใชคําสั่ง goto

"implemented for state transition description " SC, SD, SE, SF state identifiers STATE SC : goto SD with ?OUT.D = [0,0,0,0, 1,0,0,0]; "H08; endwith; STATE SD : goto SG with ?OUT.D = [1,0,0,0, 0,0,0,0]; "H80; endwith; STATE SE : goto START with ?OUT.D = [0,1,0,0, 0,0,0,0]; "H40; endwith; STATE SF : goto SG with ?OUT.D = [0,0,0,0, 0,0,1,0]; "H02; endwith;

Page 12: CPLD_2

50

3. if chained statement เปนชุดคําสั่งสําหรับตรวจสอบเงื่อนไขแบบหลายทางเลือก ตัวอยาง การใชคําสั่ง if chained statement STATE START: if (?COND == ^H3C) then SA with

?OUT.D = [1,0,0,0, 0,0,1,0]; "H82; endwith; else if (?COND == ^HAA) then SE with ?OUT.D = [0,0,0,1, 0,0,0,1]; "H11; endwith; else SF with ?OUT.D = [0,0,1,1, 0,0,0,0]; "H30; endwith;

4. if statement เปนชุดคําสั่งสําหรับตรวจสอบเงื่อนไขแบบ 2 ทางเลือก ตัวอยาง การใชคําสั่ง if statement

STATE START : if (?COND == ^H3C) then SA with ?OUT.D = [1,0,0,0, 0,0,1,0]; "H82; endwith; else START with ?OUT.D = [0,0,0,0, 0,0,0,0]; "H00; endwith; STATE END : if (?COND == ^HAA) then SE with ?OUT.D = [0,0,0,1, 0,0,0,1]; "H11; endwith; else SF with ?OUT.D = [0,0,1,1, 0,0,0,0]; "H30; endwith;

5. with statement เปนชุดคําสั่งสําหรับสงเอาทพุทออกไปเมื่ออยูใน State นั้น หรือเรียกวาใหทํา State action ขณะที่เขาไปอยูใน State นั้น STATE START: if (?COND == ^H3C) then SA with

?OUT.D = [1,0,0,0, 0,0,1,0]; "H82; endwith; STATE SC : goto SD with ?OUT.D = [0,0,0,0, 1,0,0,0]; "H08; endwith; STATE SA : CASE (?COND == ^H2A): SC with ?OUT.D = [0,1,0,0, 0,0,0,0]; "H40; endwith; ENDCASE;

Page 13: CPLD_2

51

- Set and Bit Operations เปนตัวกําหนดคาในสมการทั้งในระดับบิท และชุดของบิท ไดแก 1. arithmetic operations เปนตัวกระทําทางคณิตศาสตร

when EN == 0 then DataOut = DataA + DataB else DataB = -DataIn; DataOut = DataA - !DataB; -A " negate A – B " subtraction A + B " addition

2. assignment operations เปนตัวกาํหนดคาใหขาเอาทพุท หรือตัวแปร node "combinational asssignments

ADDRA.D = ((ADDRA.FB + 1) & INCAD & !ENDFR); ADCARRY.D = (ADDRA.FB == 510); ADDRB.D = ((ADDRB.FB + 1) & INCAD & !ENDFR & ADCARRY) # (ADDRB.FB & INCAD & !ENDFR & !ADCARRY); "register assignment /4-bit counter/ io1 := !io1; io2 := io1 $ io2; io3 := (io1 & io2) $ io3; io4 := (io1 & io2 & io3) $io4;

3. logical operations เปนตวักระทําทางลอจิก CNTA.T = ((CNTA.FB + 1) $ CNTA.FB) & !LD "count

# (DIN $ CNTA.FB) & LD; "load CNTA.CK = CLK; CNTB.T = ((CNTB.FB + 1) $ CNTB.FB) & !LD "count # (CNTA.FB $ CNTB.FB) & LD; "load !A " NOT (ones complement) A & B " AND A # B " OR A $ B " XOR: exclusive OR A!$ B " XNOR: exclusive NOR

Page 14: CPLD_2

52

4. relational operations เปนตัวกระทาํในการเปรียบเทียบคาซึ่งจะใหคาออกมาเปนจริง หรือเท็จเทานั้น

CarryOut = (Enable != Data & Score # CarryIn); Score := Score $ Data $ CarryIn; Bust = (Score > 21); Hit = (Score < 17); A == B " equal A != B " not equal A < B " less than A <= B " less than or equal A > B " greater than A >= B " greater than or equal

- when-then-else statement เปนชุดคําสั่งในการตรวจสอบเงื่อนไขและกําหนดทางเลือกทํางาน ตัวอยาง การใชคําสั่ง when-then-else

when !RESET then Count := 0; else when LOAD then Count := DataIn; else when CLKEN then when UP then { Count := Count + 1; when Count == 14 then TERMCNT := 1; else TERMCNT := 0; } else { Count := Count - 1; when Count == 1 then TERMCNT := 1; else TERMCNT := 0; }

Page 15: CPLD_2

53

- ขั้นตอนการออกแบบลอจิกโมดูลดวยวิธีการเขียนโปรแกรมภาษา Abel – HDL ในการออกแบบลอจิกโมดูลดูลดวยวิธีการเขียนโปรแกรมภาษา Abel – HDL สามารถออกแบบได 2 วิธีคือ

1. วิธี ใช HDL Design Wizard ที่ใหโปรแกรมเปนผูลําดับขั้นตอนการออกแบบตั้งแตตนจนถงึขั้นตอนการเขียนสมการ

2. พิมพคําสั่งภาษา Abel – HDL เองใน HDL Editor ที่วางเปลาตั้งแตตนจนจบ วิธี นี้เหมาะสําหรับผูที่เรียนรูขั้นตอนและมีประสบการณในการเขียนโปรแกรมมาดแีลว สําหรับในเอกสารฉบับนี้จะอธิบายเฉพาะขั้นตอนตามวธีิที่ 1 โดยใช HDL Design Wizard ซ่ึงเปนวิธี สําหรับผูที่ยังไมมีประสบการณมากอน ซ่ึงมีขั้นตอนดังตอไปนี้ คือ ตัวอยาง ลอจิกโมดูลที่ตองการออกแบบ ตามรูปที่ 40 เปนลอจิกโมดลูที่ออกแบบดวยภาษา Abel- HDL มี - ขั้ว A , B , EN เปนอินพุท

- ขั้ว AND_OUT เ ปนผลลัพทของอินพุท A AND กับอินพุท B - ขั้ว OR_OUT เ ปนผลลัพทของอินพุท A OR กับอินพุท B - ขั้ว NOT_A เ ปนผลลัพทของ NOT อินพุท A - ขั้ว SUM_OUT เ ปนผลลัพทของอินพุท A บวกกับอนิพุท B - ขั้ว C_OUT เ ปนผลลัพทของตัวทดที่เกดิจากอินพุท A บวกกับอนิพุท B

แตขั้วเอาทพทุทั้งหมดตอง AND กับขั้วอินพุท EN

รูปที่ 40 แสดงลอจิกโมดูลที่ตองการออกแบบ

Page 16: CPLD_2

54

ขั้นลําดับตอน การใช HDL Design Wisard 1. อยูที่ Project Manager 3.คลิก OK

2.คลิก 1.คลิก

5.คลิก ABEL

4.คลิก Next

6.พิมพช่ือโมดูล mygate1

7.คลิก Next

14.คลิก OK

13. คลิก Combinatorial

12.คลิก Advanced

11. คลิก Output

10.คลิก New

9.พิมพช่ือขาอินพุท แลวคลิก New ทําไปจนหมด

8.คลิก New

Page 17: CPLD_2

55

15.พิมพช่ือขาเอาทพุท แลวคลิก New ทําไปจบครบทุกขา แลวคลิก Finish

หลังจากกําหนดขา I/O หมดแลว คลิกปุม Finish โปรแกรมจะเขาสู HDL Editor และจะเหน็ตัว โครงรางของโปรแกรม และเห็นการประกาศชื่อขา I/O แตยังไมเรียบรอย ตามรูปขางลางนี้

Page 18: CPLD_2

56

2. การเขียนสมการดานเอาทพุท โดยการพิมพสมการลอจิกของเอาทพุทแตละขา ตามรูป

ขางลางนี้

คลิก Synthesis แลวเลือกรายการ Check Syntax เพื่อตรวจสอบ ดูวา พิมโปรแกรมผิดตรงไหนบาง

พิมพสมการดานเอาทพุท ทุกขา แลว Save โปรแกรม

เมื่อตรวจสอบโปรแกรมดู และไมมีที่ผิดแลว ขั้นตอนตอไปคือ 3. การสังเคราะหโปรแกรมเปนลอจิกโมดลู โดยการคลิกเมนู Project Create macro ตามรูปขางลางนี้

Page 19: CPLD_2

57

รอจนกวาจะเสร็จเรียบรอย จากนั้นจะมขีอความบอกวาเสร็จเรียบรอย ลอจิกโมดูลที่เสร็จเรียบรอย จะถูกบรรจุไวในตารางของโปรเจ็คปจจุบนั เมื่อตองการจะดูลอจิกโมดูลที่สังเคราะหขึ้นมา ใหเปด Schematic Editor และเปดตาราง Library ดู จะมีช่ือลอจกิโมดูลที่สังเคราะห ตามรปูขางลางนี้

ช่ือลอจิกโมดูล ที่ถูกสราง

4. การแกไขเปลี่ยนแปลงลอจิกโมดูลที่สรางมาจากโปรแกรม Abel-HDL ทําไดโดยการเขาสูวินโดว Schematic Editor แลวเรียกลอจิกโมดลูที่ตองการมาแกไข ตามขั้นตอนตามรูปขางลางนี้

2. ดับเบิ้ลคลิกโมดูล

1. คลิกปุมนี ้ หลังจากทําตามขั้นตอนตามรูปขางบนนี้ โปรแกรมจะเขาสูวินโดวของ HDL Editor ซ่ึงจะเหน็

Page 20: CPLD_2

58

โปรแกรมที่ฝงอยูในลอจกิโมดูล เราสามารถเปลี่ยนแปลงแกไขไดตามตองการ ตามรูปขางลางนี้

เมื่อแกไขเสร็จแลวให Save แลวคลิกเลือกรายการ Update Macro

เมื่อแกไขโปรแกรมแลว คลิกเลือกราย Update Macro โครงสรางและคุณสมบัติของลอจิกก็จะเปลี่ยน ไปทันท ี