Thông báo

Collapse
No announcement yet.

Lập trình GAL16V8

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Lập trình GAL16V8

    Mình là DuyPhi, tìm hiểu chút ít về lập trình và vi điều khiển
    Ai cũng hiểu nhưng có mình Phi là không hiểu: cách Lập trình GAL16V8
    Người ta nói, biết thì nói không thì thôi, mà hôm trc có 1 em sinh viên hỏi về Lập trình GAL16V8.
    Mình cũng thú thật cái dốt của mình và nói là để anh lên diễn đàn, cao nhân hạ nhân nhiều lắm, hi hi- chắc có ng chỉ thôi, do đó mình không buồn và không ngại mở cái mục này nhờ anh chị em bà con giúp đở, mỗi người 1 chút, mỗi chút thành nhiều, he he.
    Mong anh chị em giúp đở.

  • #2
    GIỚI THIỆU VỀ CÁC THIẾT BỊ LOGIC LẬP TRÌNH ĐƯỢC PLDs – Programmable Logic Devices

    Bất cứ các thiết kế logic số nào cũng có thể được thực hiện nhờ PLD (thiết bị logic lập trình được).

    Nếu trước đây bạn đã từng bắt đầu thiết kế một mạch số của mình bằng cách:
    • Sử dụng bảng sự thật hay các sơ đồ trạng thái
    • Sử dụng các hàm AND, OR, NOT
    • Chọn các họ IC 74xx và 45xx, v.v…
    thì bây giờ bạn đã có thể thiết kế sử dụng các PLD cũng không khó khăn lắm.

    Vậy làm thế nào để thiết kế một bộ vi xử lý cho một hệ thống với bộ nhớ và các thiết bị I/O, thiết kế một mạch giao tiếp bus, sử dụng các máy trạng thái để điều khiển nhiều tín hiệu ngõ ra, sử dụng bộ đếm để chia nhỏ tần số xung clock, biến đổi song song sang nối tiếp và ngược lại và quan trọng là làm chủ được IC số mà mình mong muốn không còn phải lo tìm trên thị trường eo hẹp của Việt nam xem có IC đó không, v.v…. Tất cả điều này đều có thể thực hiện được bằng PLD.

    Đầu tiên ta tìm hiểu PLD là gì? PLD là tên gọi tổng quát của một IC số mà người ta có thể lập trình được nó để thực hiện các hàm logic khác nhau. Nó là một chip chứa các cấu trúc mạch có qui luật cho phép người thiết kế tạo các ứng dụng cụ thể. Cấu trúc mạch trong PLD thông thường là một dãy các ô nhớ đồng dạng mà có thể lập trình từng ô nhớ được (các dãy OR hoặc dãy AND hoặc cả hai). Các loại PLD thông dụng là: PLA, PAL, LCA, EPLD, PEEL, GAL, v.v…


    Hình 1. Một đoạn các ô nhớ với dãy AND, OR và cấu trúc ngõ ra của PLD


    Và đây là một trong số những lý do quan trọng để sử dụng PLD

    Tăng khả năng tích hợp. Bạn có thể giảm khối lượng về mạch thiết kế trong khi vẫn có thể tăng chức năng cho mạch của bạn
    Công suất thấp. CMOS và một số ít hơn các mạch kết hợp sẽ làm giảm đáng kể công suất nguồn cung cấp
    Tăng độ tin cậy. Nguồn cung cấp thấp và việc giảm tối đa các mạch liên kết ở ngoài làm cho việc truyền giữa các khối đáng tin cậy hơn
    Giá thành thấp.
    Dễ sử dụng. Dù tin hay không, thì sau khi bạn trải qua thời gian ban đầu nghiên cứu về PLD, bạn sẽ thấy PLD rất dễ sử dụng hơn các hàm logic riêng rẽ
    Dễ dàng thay đổi. Khi bạn cần có sự thay đổi trong thiết kế của bạn, bạn không cần phải thêm thắt các “dây nối”, tất cả là thay đổi bên trong của PLD và bạn có thể thực hiện các thay đổi đó một cách nhanh chóng.

    Quá trình thiết kế PLD như sau
    Hình dưới đây mô tả một quá trình thiết kế PLD. Sau khi bạn làm chủ quá trình này. Bạn hoàn toàn có thể ứng dụng PLD vào các thiết kế của bạn. Nào, hãy bắt đầu nhé.


    Hình 2. Quá trình thiết kế PLD


    Công việc đầu tiên là bạn cần có một máy tính với một trình soạn thảo. Nếu bạn có phần mềm và một trình soạn thảo mạch (schematic editor) bạn có thể đưa thiết kế của bạn vào bằng cách sử dụng các khối logic quen thuộc. Còn nếu bạn chỉ có trình soạn thảo text thông thường, bạn có thể tạo gián tiếp các hàm logic bằng ngôn ngữ lập trình thông dụng cho các PLD như ABEL dưới dạng text file (điều đương nhiên là bạn phải có sơ đồ bên trong của các IC này, tùy vào các dạng ngõ ra mà bạn có thể sẽ phải thay đổi một chút ở trong chương trình của mình, các sơ đồ này bạn có thể download dễ dàng từ các website điện tử như www.altera.com, www.chipcenter.com, www.atmel.com, www.pc circuit.com, bạn có thể dễ dàng tìm các website khác bằng cách đưa vào ô search của các trình duyệt web từ ‘programmable logic device’ và bạn sẽ có cả trăm website điện tử về vấn đề này).
    Cấu trúc của một chương trình ABEL như sau
    module module name
    title string
    deviceID device deviceType;
    pin declarations
    other declarations

    equations
    equations
    test_vectors
    end
    module name


    Công việc kế là mở một trình biên dịch (compiler) logic đối với thiết kế của bạn. Trình biên dịch sẽ biến thiết kế của bạn thành sơ đồ đốt các cầu chì bên trong IC. Mặc dù hầu hết các PLD được lập trình bằng biểu thức dưới dạng tích chuẩn (minterm), các ngôn ngữ như ABEL cho phép các phương trình của PLD có thể được viết dưới hầu hết các dạng format. Trình biên dịch sẽ tự động cực tiểu hóa các phương trình sao cho phù hợp với cấu trúc của PLD. Sau đó phần mô phỏng sẽ kiểm tra lại các vector kiểm tra mà bạn đã đưa vào trong phần soạn thảo, so sánh với phần đã biên dịch.

    Sau khi kết thúc, trình biên dịch sẽ tạo ra một file JEDEC, file này là một định dạng chuẩn đối với các thiết bị phần cứng để nạp vào IC. Bạn chỉ cần cầm file này ra nơi có thiết bị nạp PLD (chợ Nhật Tảo chẳng hạn) và thực hiện công việc nạp vào IC. Phải chắc chắn rằng chương trình bạn nạp vào IC và thiết bị phần cứng là tương thích nhau. Các phần cứng sẽ thực hiện kiểm tra luôn cho bạn nếu bạn đặt thêm các vector kiểm tra vào trong file JEDEC.

    Cuối cùng, bạn đưa IC sau khi đã được nạp chương trình vào hệ thống của bạn, kiểm tra lại, nếu phát hiện sai, bạn có thể mở lại trình soạn thảo và thực hiện những thay đổi cần thiết. Lập lại cho đến khi nào thành công, và bạn sẽ cảm thấy sử dụng PLD là rất dễ dàng

    Một ví dụ đơn giản về thiết kế bằng ABEL
    Thiết kế sau đây là một ví dụ đơn giản sử dụng ABEL để thiết lập file mô tả logic (dùng IC PAL16L8) thực hiện việc giải mã 3 sang 8



    Đoạn chương trình viết bằng ngôn ngữ ABEL (bạn có thể đặt tên file là Decoder.abl)

    Module Decoder_3_to_8
    title ‘MACH GIAI MA 3 SANG 8’
    ABINDEC device ‘P16L8’;

    “Input pins
    /CS, /RD, A0, A1, A2 pin 1, 2, 3, 4, 5;

    “Output pins
    /Y0, /Y1, /Y2, /Y3 pin 19, 18, 17, 16;
    /Y4, /Y5, /Y6, /Y7 pin 15, 14, 13, 12;

    equations
    Y0 = CS * RD * (/A2 * /A1 * /A0);
    Y1 = CS * RD * (/A2 * /A1 * A0);
    Y2 = CS * RD * (/A2 * A1 * /A0);
    Y3 = CS * RD * (/A2 * A1 * A0);
    Y4 = CS * RD * (A2 * /A1 * /A0);
    Y5 = CS * RD * (A2 * /A1 * A0);
    Y6 = CS * RD * (A2 * A1 * /A0);
    Y7 = CS * RD * (A2 * A1 * A0);

    test_vectors

    ([/CS,/RD,A2,A1,A0] -> [/Y0,/Y1,/Y2,/Y3,/Y4,/Y5,/Y6,/Y7]);
    [ 1, 0,.X.,.X.,.X.]-> [ 1, 1, 1, 1, 1, 1, 1, 1] ;
    [ 0, 1,.X.,.X.,.X.]-> [ 1, 1, 1, 1, 1, 1, 1, 1] ;
    [ 1, 1, 0, 0, 0] -> [ 0, 1, 1, 1, 1, 1, 1, 1] ;
    [ 1, 1, 0, 0, 1] -> [ 1, 0, 1, 1, 1, 1, 1, 1] ;
    [ 1, 1, 0, 1, 0] -> [ 1, 1, 0, 1, 1, 1, 1, 1] ;
    [ 1, 1, 0, 1, 1] -> [ 1, 1, 1, 0, 1, 1, 1, 1] ;
    [ 1, 1, 1, 0, 0] -> [ 1, 1, 1, 1, 0, 1, 1, 1] ;
    [ 1, 1, 1, 0, 1] -> [ 1, 1, 1, 1, 1, 0, 1, 1] ;
    [ 1, 1, 1, 1, 0] -> [ 1, 1, 1, 1, 1, 1, 0, 1] ;
    [ 1, 1, 1, 1, 1] -> [ 1, 1, 1, 1, 1, 1, 1, 0] ;

    END


    Cuối cùng chúc bạn thành công với những thiết kế mới của bạn.
    ThS. Nguyễn Trọng Hải


    Hi vọng cái này giúp ích được anh Phi. ah` Hẹn anh cuối tuần gặp mặt mà bận dọn qua nhà mới nên không gặp được.
    Hôm khác gặp nhé anh. sorry.
    Last edited by phuongnhoc; 30-11-2009, 22:38.

    Comment


    • #4
      ok- Thanks em rất nhiều.
      Anh đang quan tâm đến 1 số thứ như sau:
      - Phần mềm nào dùng để biên dịch được code của GAL này
      - Ngôn ngữ lập trình cho nó là loại gì, anh cũng không biết luôn
      - Mạch nạp cho nó như thế nào, tự làm hay kiếm ở đâu
      - Có thể hướng dẫn anh xây dựng 1 phần cứng ứng dụng nhỏ.
      Em xem thế nào, có được không?

      Comment


      • #5
        Hehe. Nó nằm trong mấy cái link em post đó. Đầy đủ kiến thức. Có cả một chương nói về GAL 16V8. Em trích dẫn một đoạn:

        Cấu trúc linh kiện PLD và các ngôn ngữ lập trình phần cứng (phần 3)


        Khách @ www.EMBEonline.com - Thursday, 15, June

        Như đã giới thiệu ở phần trước, GAL là linh kiện được xếp vào thế hệ thứ hai sau PAL do đó nó là linh kiện được cải tiến rất nhiều so với PAL, chế tạo từ công nghệ CMOS, tốc độ xử lý nhanh, xóa chương trình bằng xung điện một cách nhanh chóng (<100ms ) . Có thể sửa đổi, nạp lại chương trình nhanh chóng và hiệu quả, lưu dữ liệu trong thời gian dài .






        GAL 16V8

        GAL16V8 thực hiện các chức năng logic bằng cách lập trình trên các OLMC. Có ba mode hoạt động : SIMPLE, COMPLEX , REGISTED, được điều khiển bởi các bit như sau :

        Bit SYN , ACO : điều khiển mode cho tất cả các MACROCELL .
        Bit XOR của mỗi MACROCELL: điều khiển giá trị xuất của MACROCELL.
        Bit AC1 : điều khiển cấu hình ngõ ra của MACROCELL .

        Chi tiết của các mode sẽ được mô tả sau đây :

        + Registred mode ( mode thanh ghi ):
        Trong mode này cấu hình của mỗi MACROCELL (MRC) được xem như ngõ ra thanh ghi hoặc ngõ vào/ra I/O , vậy ta có đến 8 thanh ghi hoặc 8 ngõ vào ra I/O tương ứng với các MRC trong linh kiện. Mỗi ngõ ra I/O có 8 biểu thức nhân (hay là đường tích - product term) . Tất cả các MRC này được nối chung với tín hiệu CLOCK (chân số 1) ,tín hiệu OUTPUT ENABLE (chân số 11) , các bit định vị mode này có giá trị như hình sau.

        + Complex mode (mode phức ):
        Ở mode này cấu hình của MRC được tạo như ngõ ra hoặc ngõ vào/ra I/O. Trong mode này thì chỉ có sáu ngõ vào ra I/O , 2 MRC còn lại chỉ thực hiện chức năng của ngõ ra ( chân số 12 , 19), không có ngõ hồi tiếp như các MRC khác . Nếu yêu cầu thiết kế cần dùng đến 8 ngõ ra I/O ta nên nghĩ đến việc dùng mode thanh ghi .
        Có 7 biểu thức nhân được nối đến ngõ ra của một MRC, biểu thức nhân còn lại được dùng vào việc lập trình cho phép xuất giá trị ngõ ra. Chân 1, 11 đóng vai trò là chân đưa dữ liệu vào mảng lập trình AND.

        + Simple mode (mode đơn ):
        Cấu hình của mode này được xem như ngõ vào hoặc ngõ ra tổ hợp .Tất cả các ngõ ra có tới 8 biểu thức nhân được nối đến, hai MRC (chân 15,16) đơn thuần chỉ là ngõ ra không có đường hồi tiếp . Chân 1, 11 luôn là ngõ cho tín hiệu vào mảng AND .

        Mode đơn của GAL16V8



        Mode phức của GAL16V8



        Mode thanh ghi của GAL16V8






        Cấu trúc linh kiện PLD và các ngôn ngữ lập trình phần cứng (phần 4)


        Khách @ www.EMBEonline.com - Thursday, 15, June

        Giống như ROM hay PROM, một PLD có thể được lập trình cơ bản bằng cách truy xuất trực tiếp đến khối cầu chì, hay diode . Tuy nhiên rất ít người thiết kế làm việc đó, ngay cả việc gián tiếp qua một file văn bản thập lục. Thay vào đó người thiết kế dùng một số ngôn ngữ lập trình cho PLD đề định ra những chức năng logic cần thiết cho những ứng dụng.





        Một ngôn ngữ lập trình được trợ giúp bởi một bộ xử lý ngôn ngữ (Language Prosessor) hay gọi đơn giản là bộ biên dịch . Bộ biên dịch này có chức năng chuyển một chương trình nguồn (ở dạng văn bản) được viết bằng ngôn ngữ lập trình sang một tập tin sơ đồ cầu chì (tập tin dạng *.jed) theo chuẩn JEDEC (Joint Electron Device Egineering Council). Sau đó, tập tin *.jed sẽ được nạp cho linh kiện PLD thông qua một thiết bị nạp đặt biệt. Mặc dù hầu hết PLD có thể lập trình thật sự với những biểu thức tổng tích, nhưng với ngôn ngữ lập trình cho PLD cho phép viết các biểu thức dưới bất cứ dạng nào, bộ biên dịch sẽ tính toán và rút gọn biểu thức cho phù hợp nếu có thể với một cấu trúc PLD cho trước .

        Những bộ biên dịch tiến bộ còn cho phép định nghĩa lưu đồ trạng thái (state machine) đối với PLD tuần tự, tự động chọn PLD thích hợp, trình bày sự thực hiện gán trạng thái và phát triển những công thức logic.

        Sau đây là 3 ngôn ngữ lập trình phổ biến sẽ được đề cập ở phần sau:
        + ABEL(Advanced Boolean Expression Language) : chạy trên nền DOS.
        + WINCUPL(Windows Universal Compiler for Programmable Logic) : chạy trên nền WINDOWS.
        + PALASM (PAL Assembler and Simulator): chạy trên nền DOS.

        Ngôn ngữ lập trình ABEL(Advanced Boolean Equation Language)

        Cấu trúc cú pháp
        Các phát biểu
        * Phát biểu module :
        CÚ PHÁP : Module [(Dummy-arg[...])]
        Module: Là tên hợp lệ được đặt làm tên gọi cho một module chương trình. Một chương trình lớn có thể có nhiều module, mỗi module có tựa (title ) , các khai báo (declaration ) ,các biểu thức (equation ) riêng
        Tên phải bắt đầu với một chữ cái hay dấu gạch dưới ‘_’ dài tối đa 31 chữ cái chữ số hay dấu gạch dưới :
        VÍ DỤ : Module Counter 16;

        * Phát biểu Title :
        CÚ PHÁP : Title “string”
        Chỉ ra một chuỗi tựa (title string ) sẽ được chèn vào các file dữ liệu (các tập tin *.doc, *.jed …).
        Chuỗi là một dãy kí tự được đóng trong hai dấu nháy đơn (&apos; &apos .
        VÍ DỤ : TITLE ‘couter module_16 using PAL16V8’

        * Phát biểu Equation :
        CÚ PHÁP : Equations
        Để chỉ ra những biểu thức logic theo sau định nghĩa tín hiệu ra (output signal) như là các hàm của tín hiệu vào .
        Biểu thức logic viết dưới dạng các phát biểu gán bằng ngôn ngữ lập trình, mỗi biếu thức được kết thúc bằng một dấu chấm phẩy( .
        VÍ DỤ : Equations
        Q0 = D1 & D2 ;
        Q1 = D1 # D2 ;

        * Phát biểu Truth_table:
        CÚ PHÁP : Truth_table ( input -> output )
        Hay Truth_table ( input :> reg_outs )
        Hay Truth table ( input:>reg_out -> outputs)
        Input ,Output : Là các ngõ vào ngõ ra của hàm logic .
        Reg_outs : Các ngõ ra của hàm thanh ghi (FF).
        Dấu -> : Biểu diễn hệ tổ hợp .
        Dấu :> : Biểu diễn hệ tuần tự .
        Truth_ table ghi lại đáp ứng của các tín hiệu ngõ ra theo các tín hiệu ngõ vào.
        Truth_table có thể thay thế hoặc bổ sung thêm cho các biểu thức ( Equation), hay sơ đồ trạng thái (State Diagram).
        VÍ DỤ : Truth _table ([A,B -> C ])
        [0,1] -> 1 ;
        [1,0] -> 1 ;
        [1,1] -> 1 ;
        [0,0 ] -> 0 ;
        Bảng sự thật trên biểu diễn cho biểu thức C = A + B .

        * Phát biểu state_diagram :
        CÚ PHÁP : State_diagram <state variable>
        State <state exp> :[ equation];
        State <state exp> :[equation];
        ...........
        ...........
        ...........
        [trans-stmt..];
        State variables : Tập hợp các biến trạng thái trong lưu đồ trạng thái .
        State : Từ khóa để biểu diễn những hoạt động sẽ diễn ra ở trạng thái hiện tại .
        State exp : Biểu thức hay hằng số định nghĩa trạng thái hiện tại .
        Equation : Là biểu thức logic ngõ ra hiện tại của lưu đồ trạng thái .
        Trans-stmt : Một phát biểu dạng cú pháp IF-THEN-ELSE, GO -TO, CASE
        (tùy chọn để mô tả sự chuyển biến trạng thái hiện tại sang trạng thái kế tiếp theo điều kiện tác đôïng của ngõ vào).

        Phát biểu State _diagram định nghĩa các biến trạng thái tham gia hoạt động trong lưu đồ trạng thái.

        VÍ DỤ : giả sử ta có hai ngõ vào X0 và X1 ngõ ra là Z. Đồ hình trạng thái có ba trạng thái kí hiệu S0, S1, S2 có hai biến trạng thái [Q1 ,Q0 ] = Q (hai ngõ ra của FF).
        Đoạn chương trình sau tương ứng với lưu đồ trạng thái trên :
        State_diagram Q
        State S0: if (X1& X0 == 0) then S2
        else S1 ;
        State S1: Z=1;
        goto S2 ;
        State S2: Z=0 ;
        goto S0 ;



        * Phát biểu Goto :
        CÚ PHÁP : Goto state exp .
        Nhảy đến trạng thái kế tiếp không có ràng buộc điều kiện .
        VÍ DỤ : Si : goto Sj ; Từ trạng thái Si nhảy đến trạng thái Sj ;
        Si : goto X+Y -//- X+Y ;

        * Phát biểu If-then-else :
        CÚ PHÁP : if exps then stateexp1
        [ese state exp2] ;
        hay if exps1 then stateexps1
        else if exps2 then stateexps2
        .................
        [ else if .... ]
        else state exp n;
        Exps : Là bất cứ biểu thức nào hợp lệ .
        State exp1 ;state exp2.....: Biểu thức biểu diễn trạng thái kế tiếp.

        Phát biểu IF-THEN-ELSE : Mô tả sự chuyên trạng thái theo điều kiện ngõ vào. Nếu biểu thức sau từ khóa IF là đúng thì chuyển hướng đến trạng thái ngay sau từ khóa THEN, nếu sai thì chuyển đến trạng thái ngay sau từ khóa ELSE.
        Các phát biểu có thể được nối tiếp nhau liên tiếp nhưng kết thúc phải có dấu chấm phẩy (.

        VÍ DỤ : State 1:if (A==B) then 2. Nếu A=B chuyển đến trạng thái 2
        State 2:if A then 3 else 4 . Nếu A đúng chuyển đến trạng thái 3
        Nếu A sai chuyển đến trang thái 4.

        * Phát biểu Case :
        CÚ PHÁP : Case [exps1: state exps1 ;]
        [expsXi :state expsXi ;]
        End case;
        Phát biểu CASE mô tả sự chuyển biến trạng thái trong trường hợp có nhiều điều kiện tác động đến chương trình .

        VÍ DỤ : State 0 : case A == 0 :1 ;
        A == 1 :2 ;
        A == 2 :3 ;
        A == 3 :0 ;
        end case ;

        * Phát biểu Test_vectors :
        CÚ PHÁP : test_vectors[‘note’](input -> output)
        [invalues -> outvalues ]
        Note là một chuỗi ký tự để mô tả các test_vectors .
        Input là một ký hiệu hay tập hợp các ký hiệu của các tín hiệu ngõ vào hay hồi tiếp về ngõ vào của hệ.
        Output : Ký hiệu các tín hiệu ngõ ra .
        Invalues : Các giá trị gán bởi ngõ vào .
        Out : Là giá trị ngõ ra, hàm logic của các tín hiệu ngõ vào, hay giá trị trạng thái của hệ tuần tự.

        CÁCH DÙNG :
        Dùng cú pháp Test_vectors để mô phỏng hoạt động của hệ. Kiểm tra các chức năng của hệ khi chạy chương trình mô phỏng.

        VÍ DỤ: Equation
        C = A & B ; “C = A. B
        D = A # B ; “D = A+B
        Test_vestor ([ A , B] -> [ C , D ])
        [ 0 , 0] -> [ 0 , 0 ];
        [ 0 , 1] -> [ 0 , 1 ];
        [ 1 , 0] -> [ 0 , 1 ];
        [ 1 , 1] -> [ 1 , 1 ];

        * Phát biểu Istype :
        CÚ PHÁP : signal [,signal]....istype ‘ attr [,attr ]...’;
        Hay signal [,signal]...pinistype ‘ attr [,attr ]...’;
        Signal : Ký hiệu của pin, node .
        Attr : Là một chuỗi ký tự xác định các thuộc tính (attribution) chứa các signal.

        MụC ĐÍCH - CÁCH DÙNG :
        Phát biểu Istype định nghĩa lại các thuộc tính của chân, nút của linh kiện. Các thuộc tính của pin hay node có thể khai báo trên một dòng.
        Các thuộc tính hợp lệ là :
        ‘Buffer‘ : Đệm .
        ‘Com’ : Hệ tổ hợp.
        ‘Invert’ : Đảo .
        ‘Neg’ : Tích cực mức cao.
        ‘Reg’ : Thanh ghi hệ tuần tự .
        ‘Reg-D ,Reg-T........các loại thanh ghi.

        VÍ DỤ : FO, A là tín hiệu ra của thanh ghi tác động mức thấp, được khai báo như sau:
        Output pin 15 istype ‘reg,invert’;

        * Phát biểu End:
        CÚ PHÁP : End
        hay End <modname>
        modname: tên module của chương trình, dùng kết hợp với module để mở đầu và kết thúc chương trình .

        * Các khai báo khác :
        + Chân - pin :
        CÚ PHÁP : [!]pin_id[,[!]pin_id...]pin[#[,pin#]]istype’attr’;
        Pin_id : Ký hiệu dùng để đặt tên cho chân của linh kiện.
        Pin# : Số thứ tự chân trên linh kiêïn thiết kế .
        Attr : Là chuỗi ký tự xác định thuộc tính chân .
        [!] : Ký hiệu NOT ,tác động ở mức thấp.
        Từ khóa pin dùng để khai báo những tín hiệu Input , Output ,In/Out đã được quy định sẵn trên linh kiện.
        Khai báo còn có thể định nghĩa thuộc tính chân .

        VÍ DỤ : !Q0 ,RESET, S1 pin 12,13,5 ;
        Có nghĩa là ta gán Q0 vào chân 12, Q0 tác động ở mức thấp.
        RESET ... 13 ........ cao.
        S1 ... 5 ........ cao.

        + Nút - node :
        CÚ PHÁP :
        [!]node_id[,[!]node_id...]node[node#[,node#....][istype,attr’]];
        Node_id : Ký hiệu dùng để đặt tên cho một nút.
        Node# : Số thứ tự của nút trên linh liện, số nút do nhà sản xuất quy định.
        Từ khóa NODE dùng để khai báo những tín hiệu gán cho nút.

        VÍ DỤ : C node istype ‘reg’;
        A,B NODE 25,26 ;
        Xác định C là một nút trong linh kiện, thuộc tính thanh ghi .
        Gán tên A cho nút 25 và tên B cho nút 26.

        + Linh kiện - device :
        CÚ PHÁP : Device_id device real device ;
        Device_id : Tên của file fusemap (dạng * .jed).
        Real device : Mô tả mã số linh kiện (PLD) đặt giữa hai dấu (‘).
        Khai báo linh kiện để gắn tên linh kiện sử dụng trong một module với một linh kiện thật .
        Phải có dấu ( sau khai báo .

        VÍ DỤ : D1 device ‘PAL 16L8’;
        Khai báo trên cho biết D1 là PAL16 L8, và chương trình ABEL sẽ tạo ra tập tin sơ đồ cầu chì có tên là D1.jed .

        + Hằng - constant :
        CÚ PHÁP : id[,id] ..... = exp [ , exp ]...;
        Id : Ký hiệu đặt tên cho hằng.
        Exp : Xác định giá trị hằng
        Khai báo hằng dùng để định nghĩa hằng số đươc dùng trong một module .
        VÍ DỤ : X = X ; ‘X mang ý nghĩa không xác định’.
        Z = Z ; ‘Z mang ý nghĩa tổng trở cao’
        C = C ; ‘C mang ý nghĩa tác động cạnh lên’.
        A = ^b01; ‘A được gán bởi giá trị là số nhị phân’
        B = ^h16; ‘H được gán bởi giá trị là số hex’
        C = 157 ; ‘C được gán bởi giá trị là số thập phân&apos;

        + Tập hợp - set :
        ĐịNH NGHĨA :
        Tập hợp các tín hiệu và hằng số mà thao tác thực hiện như là một đơn vị.
        Bất cứ một thao tác nào áp dụng cho một tập hợp sẽ được áp dụng cho mỗi phần tử trong tập hợp .
        Tập hợp sẽ làm đơn giản việc mô tả logic và các vector thử bằng cách chỉ dùng tên gọi tập hợp .
        Một tập hợp được biểu diễn bởi một danh sách các hằng số và tín hiệu, các hằng số và tín hiệu này được ngăn cách bởi dấu chấm phẩy ( hay dấu (...) , được đặt trong dấu ngoặc ([ ]) sau mỗi khai báo phải có dấu (.

        VÍ DỤ : Mulout = [ B0,B1,B2,B3,B4,B5,B6,B7 ];
        Mulout = [ B0...B7 ];
        Khai báo trên là gán Mulout là tên một tập hợp gồm 8 tín hiệu từ B0...B7 .

        + Macro :
        CÚ PHÁP : Macro_id macro[(dummy_arg[,dummy_arg]...)]{block};
        Macro_id : Một ký hiệu đạêt tên cho macro .
        Dummy_arg : Thông số hình thức .
        Block : Là các biểu thức logic .
        Khai báo Macro để định nghĩa một macro thực hiện chức năng các phép toán,
        chỉ định nghĩa Macro một lần ở phần khai báo macro trong module và sẽ được dùng bất cứ nơi nào khác trong module .
        Macro chỉ được dùng trong module nào mà nó được khai báo .

        VÍ DỤ : NAND 3 macro (A,B,C) {!(A&B&C)}
        NAND 3 : là macro thực hiện chức năng hàm logic đảo của A.B.C với A, B, C là các thông số hình thức .
        Trong module ta khai báo macro như sau :
        D = NAND 3 (clock, hello, hi ) ;
        Khi đó kết quả là : D = !(CLOCK&HELLO&HI );

        + Enable :
        CÚ PHÁP : Enable output_id = [!]expr ;
        Output_id : Ký hiệu được đặt tên cho mỗi ngõ ra hay tổ hợp các ngõ ra.
        Expr : Biểu thức logic .
        - Khai báo ENABLE cho phép ngõ ra ba trạng thái hoạt động theo tín hiệu điều khiển bởi giá trị của Exprt .
        - Sử dụng khai báo này sau khai báo của biểu thức .

        VÍ DỤ : OE pin 11;
        F0,F1,F2,F3 pin 19,18,17,16 ;
        COUNT = [ F0,F1,F2,F3 ] ;
        Equation
        Enable COUNT = ! OE ;
        Các ngõ ra từ F0.......F3 trong tập hợp COUNT là ngõ ra ba trang thái được truy xuất khi OE = 0 và cấm khi OE = 1 (ở trạng thái tổng trở cao ). Có thể thay thế tiếp vị ngữ OE thay cho ENABLE .

        * Các toán tử ( Operator ) :
        - Toán tử chuẩn (standard) :
        ! : NOT ;
        # : OR ;
        & : AND ;
        $ : XOR ;
        !$ : XNOR ;
        = : Toán tử gán cho biểu thức tổ hợp .
        := : Toán tử gán cho biểu thức thanh ghi (tuần tự ).
        Ngoài ra từ khóa @ALTERNATE thông báo cho trình biên dịch biết chương trình đang sử dụng bộ toán tử tương đương (ALTERNATE), thay thế cho bộ toán tử chuẩn . Các toán tử thay thế được biểu diễn như sau :

        / : NOT ;
        * : AND ;
        + : OR ;
        :+: : XOR ;
        :*: : XNOR ;

        Muốn sử dụng bộ toán tử thay thế cần phải có từ khóa @ALTERNATE ở đầu module chương trình, khi đó trình biên dịch mới hiểu các toán tử thay thế .

        - Các toán tử so sánh (comparator):
        = = : bằng ;
        ! = : không bằng ;
        < : nhỏ hơn ;
        > : lớn hơn ;
        <= : nhỏ hơn hoăc bằng ;
        >= : lớn hơn hoăc bằng ;
        Ta có thể viết các biểu thức điều kiện kết hợp với các toán tử trên, các biểu thức sẽ có giá trị 1 nếu biểu thức đúng (thỏa điều kiện ) ,có giá trị 0 nếu không thỏa điều kiện .

        VÍ DỤ : Q = ( P = = 1 ) ;
        Khi đó Q = 1 nếu P = 1.
        Q = 0 nếu P != 1 .

        * Các tiếp đầu ngữ, tiếp vị ngữ :
        + Tiếp đầu ngữ (prefix) :
        Toán tử NOT (! Hay / ) được dùng như tiếp đầu ngữ để báo cho trình biên dịch biết tín hiệu đang hoạt động ở mức tác động là HIGH hay LOW (1 hay 0) .

        VÍ DỤ : !Q0 pin 15 ;
        Tương đương với Q0 pin 15 is type ‘neg’ ;
        Q0 tác động ở mức thấp ;

        + Tiếp vị ngữ (suffix ) :
        Tiếp vị ngữ thường dùng trong chế đỘ thanh ghi , để truy xuất các chế độ liên quan đến thanh ghi .
        VÍ DỤ : Q0.CK truy xuất đến chân CLK đối với tín hiệu ra Q0 ở chế độ thanh ghi .
        Sử dụng tương tự đối với các tiếp vị ngữ sau : .RE, .PR, .D, .T ....
        .RE : có sử dụng chân reset của FlipFlop.
        .PR : có sử dụng chân preset của FlipFlop.
        .D : chân của FlipFlop D .
        .T : chân của FlipFlop T .
        Tiếp vị ngữ . OE cho phép truy xuất đến ngõ ra 3 trạng thái .
        Out .OE = ! ENABLE ;
        ENABLE = 0 ngõ ra được phép xuất .
        ENABLE = 1 ngõ ra không được phép xuất .

        * Ghi chú (comment ) :
        Các ghi chú, minh họa, giải thích chương trình thường bắt đầu bằng dấu (“) phía bên trái hoặc xuống dòng .
        VÍ DỤ : Q1,Q2,Q3 pin 15,16,17 “chân output

        * Kết cấu cơ bản một chương trình ABEL:
        Module Module_name
        Title String
        Device_indentifier Device device_type
        @alternate " có hoặc không cũng được
        Pin declarations “comment
        Other declarations
        Equations
        End module_name

        ...
        Anh coi thêm trên link em đưa nhé. Nó viết chi tiết lắm.

        Comment


        • #6
          Sorry vì post sai nội dung nhé. Cũng không coi kỹ nữa.
          Last edited by phuongnhoc; 03-12-2009, 12:56.

          Comment


          • #7
            Bạn ơi, hình như mạch này dùng cho 8051 thôi mà, con GAL là linh kiện trên mạch chứ đâu phải nạp GAL đâu, muốn làm được mạch này còn phải kiếm mạch khác nạp con GAL đó nữa! Nhưng mà bạn thật tốt !, cảm ơn bạn nhé !

            Comment


            • #8
              các bạn có thể coi lại link không.sao k xem dc.có các mạch ứng dụng cụ thể không các bạn.

              Comment

              Về tác giả

              Collapse

              MicroDuyphi Tìm hiểu thêm về MicroDuyphi

              Bài viết mới nhất

              Collapse

              Đang tải...
              X