ABEL
ABEL | |
---|---|
Парадигма | паралельна |
Дата появи | 1983 |
Розробник | «Data I/O Corporation» |
ABEL (англ. Advanced Boolean Expression Language) — мова проектування апаратури, розроблена спеціалістами Пеллеріним (англ. David Pellerin) та Холлі (англ. Michael Holley) з компанії «Data I/O Corporation» у 1983 році в Редмонді, Вашингтон. Окрім цього, вони були програмістами вихідного коду першого її компілятора[1].
Мова широко використовувалась для програмування різних видів ПЛІС — CPLD та FPGA, оскільки при її проектуванні основний акцент було зроблено на автоматизації проектування ПЛІС та генерації конфігураційних файлів. В той же час основні конкуренти — VHDL та Verilog були спрямовані на моделювання мікросхем. Проте станом на 2013 рік ABEL практично не використовується, оскільки опис великих схем, що складаються з кількох тисяч логічних вентилів на цій мові непрактичний[джерело?].
Концепція ABEL вперше була створена Расселом де Піна (англ. Russel de Pina) з дослідницької групи Data I/O's Applied Research Group в 1981 році. Згодом робота була продовжена спеціалістами Мері Бейлі (англ. Mary Bailey), Бйорном Бенсоном (англ. Bjorn Benson), Вальтером Брайтом (англ. Walter Bright), Міхаелем Холлі (англ. Michael Holley), Чарльзом Олівером (англ. Charles Olivier) та Девідом Пеллеріним (англ. David Pellerin) на чолі з доктором Лі (англ. Kyu Y. Lee)[2].
Після серії продаж був придбаний компанією «Xilinx»[3], що розробила власну мову на її основі — XABEL[4].
![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/33/ABEL_HDL_example_SN74162.png/200px-ABEL_HDL_example_SN74162.png)
Програма на мові ABEL являє собою текстовий файл наступного змісту[1][5]:
- шапка (англ. header) з назвою модуля, параметрами та заголовком.
Для спрощення сприйняття, програма поділяється на модулі, назва яких вказується в шапці файлу після ключового слова module. Великі файли можуть мати кілька модулів, з власними назвами, оголошеннями, логічними описами та тестовими векторами. Заголовок, що пишеться після зарезервованого слова title не є обов'язковим і використовується для ідентифікації проекту та створення документації. Також в шапці, після ключового слова device інколи вказують пристрій, для якого розробляється модуль.
Цей розділ файлу призначений для визначень об'єктів програми і починається з ключового слова declarations. Наприклад, для оголошення піна використовують його назву та ключове слово pin. Необов'язково, проте можливо задати його номер виводу на мікросхемі, а після зарезервованого слова istype — тип, наприклад com означає комбінаційний вихід.
- логічні описи (англ. logic descriptions) рівнянь, таблиць істинності, діаграм станів.
Починається з ключового слова equations і описує функціональну частину створюваного модуля. Рівності записуються подібно до оператора присвоєння в мовах програмування і закінчуються символом ;.
- тестові вектори (англ. test vectors).
Особливістю мови ABEL є використання тестових векторів як спеціальних конструкцій для функціонального тестування розроблюваного пристрою. Воно здійснюється методом припущення, тобто комбінаціям вхідних сигналів ставляться в відповідність очікувані значення вихідних.
Закінчується файл ключовим словом end.
Окрім того, будь-де в тексті програми можуть зустрічатися коментарі, що починаються з символу " і продовжується до цього ж символу або кінця рядка.
До множини символів мови входять латинські літери, арабські цифри та спеціальні символи. Вони використовуються для утворення рядків (оточуючи їх з обох боків символом ') та ідентифікаторів.
Мова передбачає використання 28 зарезервованих слів. Використання їх в назвах пристроїв, пінів, вузлів, констант, множин, макросів чи сигналів забороняється і приведе до помилки.
DECLARATIONS | DEVICE | ELSE | ENABLE | END | ENDCASE | ENDWITH |
FUSES | EQUATIONS | FLAG | IF | IN | ISTYPE | LIBRARY |
MACRO | MODULE | NODE | OPTIONS | PIN | PROPERTY | STATE_DIAGRAM |
TEST_VECTORS | THEN | TITLE | TRACE | TRUTH_TABLE | WHEN | WITH |
Мова ABEL підтримує запис чисел в десятковій, двійковій, вісімковій та шістнадцятковій системах числення. Таблиця нижче ілюструє формат запису чисел.
Основа системи | Формат |
---|---|
10 | <послідовність цифр 0..9> |
2 | ^b<послідовність цифр 0, 1, X> |
8 | ^o<послідовність цифр 0..7> |
16 | ^h<послідовність цифр 0..9, A..F> |
За замовчуванням, числа інтерпретуються як десяткові, проте використання директиви @RADIX змінює це.
@RADIX 2 " двійкова система @RADIX 1010 " десяткова система
MODULE trafficlight TITLE 'trafficlight' DECLARATIONS " вхідні піни clk PIN 11; en PIN 9; q0 NODE ISTYPE 'reg'; q1 NODE ISTYPE 'reg'; " вихідні піни red PIN 36 ISTYPE 'com'; yellow PIN 42 ISTYPE 'com'; green PIN 39 ISTYPE 'com'; EQUATIONS q0 := !q0 & !en; q1 := (q1 $ q0) & !en; q0.clk = clk; q1.clk = clk; red = q1; yellow = !q0; green = !(q1 & !q0); TEST_VECTORS ([clk, en] -> [red, yellow, green]); @repeat 1 {[.C., 1] -> [.X., .X., .X.];} @repeat 7 {[.C., 0] -> [.X., .X., .X.];} @repeat 3 {[.C., 1] -> [.X., .X., .X.];} @repeat 40 {[.C., 0] -> [.X., .X., .X.];} END
Нижче представлено код 4-розрядного двійкового лічильника на мові ABEL, який випускається американською промисловістю як інтегральна мікросхема 74x163[1].
MODULE Z74X163 TITLE '4-bit Binary Counter' DECLARATIONS " вхідні піни clk, ld_l, clr_l, enp, ent PIN; a, b, c, d PIN; " вихідні піни qa, qb, qc, qd PIN ISTYPE 'reg'; rc0 PIN ISTYPE 'com'; " визначення шин input = [d, c, b, a]; count = [qd, qc, qb, qa]; ld = !ld_l; clr = !clr_l; EQUATIONS count.clk = clk; count := !clr & (ld & input # !ld & (ent & enp) & (count + 1) # !ld & !(ent & enp) & count); rc0 = (count == [1, 1, 1, 1]) & ent; END Z74X163
- ↑ а б в John F. Wakerly Digital Design: Principles and Practices. — 4th Edition, 2005. — ISBN 0-13-186389-4 (англ.)
- ↑ Lee, Kyu Y.; Holley, Michael; Bailey, Mary; Bright, Walter (June 1985). A High-Level Design Language for Programmable Logic Devices. VLSI Design. Manhasset NY: CPM Publications. 6 (6): pp. 50–62. ISSN 0279-2834.
{{cite journal}}
:|pages=
має зайвий текст (довідка) - ↑ XILINX COMPLETES PURCHASE OF SOFTWARE ASSETS (англ.). Архів оригіналу за 23 квітня 2000. Процитовано 19 вересня 2013.
- ↑ Xilinx ABEL User Guide (англ.) (PDF). Архів оригіналу (PDF) за 21 вересня 2013. Процитовано 21 вересня 2013.
- ↑ University of Pennsylvania's ABEL primer, as recommended by Walter Bright (англ.). Архів оригіналу за 6 лютого 2007. Процитовано 6 лютого 2007.
- http://mazsola.iit.uni-miskolc.hu/cae/docs/xabel.html [Архівовано 21 вересня 2013 у Wayback Machine.]
- http://www.ue.eti.pg.gda.pl/cup/abel_ref.pdf [Архівовано 21 вересня 2013 у Wayback Machine.]
- For those who use ABEL(англ.)
- David Pellerin and Michael Holley. Digital Design Using ABEL. Prentice Hall, 1994. (англ.)