Микроэлектроника/Создание библиотеки для синтеза в LeonardoSpectrum

Использование библиотеки в формате Liberty (Synopsys)

править
 
Рисунок 0 - Маршрут конвертирования библиотеки

XlibCreator™ представляет собой законченную систему для разработки библиотеки для Leonardo Spectrum, основанной на библиотеке для Synopsys`а (в формате Liberty) и Synopsys- or EDIF-файле символов. XlibCreator состоит из двух утилит syngen и lGen, которые используются для создания библиотеки для Leonardo Spectrum. На рисунке 0 показан маршрут создания библиотеки.

Для конвертации Liberty в формат lGen используется программа syngen, формат вызова которой следующий:

syngen <lib_name>.lib <lib_name>.lgn
где <lib_name>.lib - имя входного файла библиотеки Synopsys (в формате Liberty);
<lib_name>.lgn - имя выходного файла библиотеки LeonardoSpectrum (в формате LGen).

Компиляция библиотеки

править

LeonardoSpectrum работает с библиотекой синтеза, представленной в скомпилированном виде (файл с расширением .syn). Этот файл создает программа lGen, которой необходимо передать в текстовом файле с расширением .lgn информацию о параметрах элементов библиотеки. Как создать этот файл, будет рассказано позже. Запуск программы lGen выполняется следующим образом:

lgen.exe -i l -o b имя_файла.lgn имя_файла.syn

Здесь ключ -i означает тип входного файла, а ключ -o задает тип выходного файла [27]. Например, если файл с исходным описанием называется bmk.lgn, то после выполнения командной строки

lgen.exe -i l -o b bmk.lgn bmk.syn > bmk.log

в текущем директории будет создано два файла: bmk.syn и bmk.log. Файл bmk.syn представляет двоичное (скомпилированное) описание библиотеки, файл bmk.log – список всех входящих в библиотеку элементов.

 
Рис. 1. Соответствие параметров:
а) условное обозначение; б) электрическая схема

Для использования всех возможностей синтезатора LeonardoSpectrum, необходимо задать как можно больше информации о параметрах элементов библиотеки. Например, если необходимо, синтезировать схему, оптимизируя ее по критерию минимальной площади, а для элементов библиотеки не задан соответствующий параметр (area), то программа синтеза не сможет в полной мере минимизировать схему по площади.

Для описания элементов имеется ряд параметров. На рисунке 1 показано соответствие между физическими параметрами ТТЛ-элемента И-НЕ и параметрами, задаваемыми для LeonardoSpectrum.

Параметры элементов библиотеки

править
  • cap_load (или LIN) – задает входную емкость (CВХ A, CВХ B) вывода элемента (рис. 1); обычно задается для каждого входного вывода, измеряется в пФ (пикофарадах).
  • max_cap_load (или LMAX) – задается для выходного полюса (вывода) логического элемента, чтобы указать максимальную емкостную нагрузку (CВЫХ), которую способен перезаряжать этот выходной полюс.
  • fanout_load – задает нагрузку разветвления (fanout load) для входного вывода; может быть эквивалентен входному току (IВХ A, IВХ B) логического ТТЛ-элемента.
 

Для КМОП-элементов параметр fanout_load обычно не задается, так как входной ток таких элементов практически равен нулю.

  • max_fanout_load – определяет максимальную нагрузку разветвления, которую выходной вывод может коммутировать (переключать); cоответствует физическому параметру IВЫХ МАКС.
 

Сумма всех значений свойства fanout_load (cap_load) для входных выводов, подключенных к управляющему выходному выводу не должна превышать значение max_fanout_load (max_cap_load) для этого выходного вывода. В случае нарушения данного условия для какого-либо сигнала в синтезированной схеме LeonardoSpectrum проведет буферизацию этого сигнала. Отличие между cap_load (LIN), max_cap_load (LMAX) и fanout_load, max_fanout_load заключается в том, что cap_load влияет на задержку распространения сигнала, а fanout_load – не влияет.

  • max_transition – значение свойства max_transition задает ограничение для максимально возможного времени установления сигнала (transition time) входного или выходного вывода. Если свойство задается выходному выводу, то такой вывод может управлять только такой связью, для которой этот элемент может обеспечить время переходного процесса не большее, чем значение свойства max_transition. Если свойство задано входному выводу, то такой вывод не может быть подсоединен к связи, время переходного процесса которой больше значения свойства max_transition для этого входного вывода.

Таким образом, управление буферизацией связей в схеме осуществляется по трем механизмам. В создаваемой библиотеке можно задействовать все из них или только один в зависимости от ситуации (необходимости). Однако, как показывает опыт работы, лучше задавать только один из параметров (емкость, ток, суммарная задержка), так как программе синтеза задание многих (жестких) ограничений затрудняет работу. Наиболее удобным ограничивающим разветвление схемы параметром является max_transition.

 
Рис. 2. Временные характеристики элементов:
а) – входной сигнал; б) выход неинвертирующего элемента; в) выход инвертирующего элемента
  • PROP = (rise_delay, fall_delay) – параметр задает значение собственной задержки логического элемента. Параметр определяется по переходной характеристике (рис. 2), при отключенной внешней нагрузке – к выходу логического элемента не подключена внешняя емкостная нагрузка. Данный параметр соответствует слагаемому DINTRINSIC в модели (1.1) вычисления задержки. Различают задержку при переходе выхода из 0 в 1 (rise_delay) и из 1 в 0 (fall_delay), что обусловлено несимметричностью схемы выходного каскада логического элемента, т. е. выходная емкость перезаряжается до уровня логического 0 и 1 через разные пути. Например, на рис. 1 показана схема ТТЛ-элемента И-НЕ. Выход этой схемы заряжается до уровня питания (логической 1) через резистор R01, а до уровня земли (логический 0) через открытый npn-транзистор, эквивалентное сопротивление которого (R10) может быть более чем в десять раз меньше сопротивления R01. Следовательно, скорость (время) переключения выхода из 0 в 1 и из 1 в 0 будут отличаться.
  • DRIVE = (rise_drive, fall_drive) – параметр задает эквивалентное сопротивление выхода логического элемента. Оно различается для положительного (rise_drive, переход из 0 в 1) и отрицательного (fall_drive, переход из 1 в 0) фронтов выходного сигнала: на рис. 1 параметр обозначен как R01 и R10 соответственно. Резистор R10 не является частью схемы (нарисован пунктиром), а показывает сопротивление, эквивалентное сопротивлению выходного транзистора VT2.
 
Рис. 3. Параметры SETUP и HOLD D-триггера
  • SETUP = (setup_rise, setup_fall) – параметр задает время предустановки сигнала относительно синхросигнала. Задается для входа данных в триггерах, рис. 3. Также различают для положительного и отрицательного фронтов сигнала данных D.
  • HOLD = (hold_rise, hold_fall) – параметр задает время удержания сигнала относительно синхросигнала. Задается для входа данных в триггерах, рис. 3. Также различают для положительного и отрицательного фронта сигнала данных D.

На рис. 3 показаны время установки и удержания сигнала данных относительно синхросигнала. Сигнал данных не должен меняться в течении времени tSETUP до активного изменения синхросигнала и в течении времени tHOLD после.

  • PHASE = INV, NONINV или UNKNOWN – параметр определяет характер выходного сигнала относительного входного (инвертирующий или неинвертирующий элемент, см. рис. 2).

Основные правила и ограничения описания библиотеки

править
  • Программа lGen требует по крайней мере двух элементов в библиотеке: элемент И-НЕ и инвертор.
 

Минимальный состав библиотеки в LeonardoSpectrum – это элементы типа И-НЕ, НЕ.

  • В библиотеку должны быть добавлены элементы VCC (константа 1) и GND (константа 0) с соответствующими функциями.
  • В именах элементов и портов не различаются строчные и прописные буквы.
  • Функции триггеров и буферов описываются [27] с помощью специальных «заготовок» – примитивов, перечисленных в табл. 1.3.
  • имена элементов и портов, которые совпадают с ключевыми словами, должны заключаться в кавычки. Например, логический элемент с именем PAD должен быть записан следующим образом: GATE "PAD".

Список ключевых слов программы lGen приведен в табл. 1.4.

Описание логического элемента

править

Описание логического элемента в формате программы lGen можно разделить на несколько структурных частей:

  • название элемента
GATE <имя_элемента> (...);
  • декларация портов ввода/вывода
INPUTS имя1, имя2, ..., имяN;
OUTPUTS имя1, имя2, ..., имяN;
  • описание логической функции
FUNCTION (описание);
  • задание специальных свойств (например, AREA);
  • задание электрических параметров.


Рассмотрим пример описания инвертора (листинг 1.2) в формате программы lGen

Листинг 1.2
Описание инвертора для программы lGen

GATE N (
INPUTS A; 
OUTPUTS Y;

FUNCTION (Y = !A;);  

AREA = 2;

INPUT A (
  LIN = 0.022; 
  DELAY (
    PROP = (0.160,0.135);
    DRIVE = (2.378,2.009);););
OUTPUT Y (LMAX = 0.3552;); 
);

Описание каждого элемента начинается с имени (N) элемента, записываемого после ключевого слова GATE:

GATE N (...);

Далее внутри круглых скобок идет описание параметров, относящихся к этому элементу. Сначала перечисляются (объявляются) имена портов. После ключевого слова INPUTS записывается список входных портов, а после OUTPUTS – список выходных. Для инвертора описание входа А и выхода Y (в соответствии с табл. 1.2), имеет вид

INPUTS A; 
OUTPUTS Y;

Затем следует описание логической функции элемента, она задается после ключевого слова FUNCTION. Функция инвертора записывается следующим образом:

FUNCTION (Y = !A;);

Обозначения логических операций: ! (инверсия), * (конъюнкция), + (дизъюнкция). Значение площади, занимаемой элементом, задается с помощью параметра

AREA = 2;

Единица измерения площади элемента задается глобальным параметром AREA_UNITS. Площадь может задаваться в единицах реальной площади (например, в квадратных микрометрах, лис-тинг 1.3, пример справа) или же в условных единицах, выражаемых, например, числом элементарных ячеек БМК (листинг 1.3, пример слева), которые занимает данный логический элемент. В табл. 1.2 площади элементов выражаются в числе элементарных ячеек БМК. Перейти от элементарных ячеек БМК к площади очень просто, зная что одна элементарная ячейка равна 110 мкм2. Затем в листинге 1.2 описываются электрические параметры, относящиеся к каждому входному и выходному порту:

INPUT A (
  LIN = 0.022;

Параметр LIN задает входную емкость порта A в пикофарадах.

DELAY (
  PROP = (0.160,0.135);
  DRIVE = (2.378,2.009);
);

Внутри описания параметра DELAY определяются значения свойств: PROP – значение собственной задержки для положительного (0,160 нс) и отрицательного (0,135 нс) фронтов выходного сигнала; DRIVE – задает значение выходного сопротивления для перехода из 0 в 1 (2.378) и из 1 в 0 (2.009). Следующая строка (листинг 1.2) определяет значение 0.3552 максимальной емкостной нагрузки LMAX на выход Y инвертора:

OUTPUT Y (LMAX = 0.3552;);

На практике встречаются два подхода к заданию нагрузочных параметров библиотечных элементов. В первом случае параметры задаются в физических величинах – фарадах (чаще в производных единицах – пико- или фемтофарадах). Так в листинге 1.2 параметры LIN и LMAX заданы в пикофарадах. В другом случае входная емкость нормируется к одному значению емкости, например к емкости входа инвертора, приняв ее за 1. При этом значения всех остальных параметров для других элементов будут указываться уже относительно этой единичной емкости. Данный подход удобен тем, что максимально допустимая нагрузка (LMAX) будет равна максимальному количеству инверторов, которые можно подключить к элементу. С точки зрения синтеза, эти два подхода задания параметров библиотечных элементов приведут к одной и той же схеме, если коэффициенты разветвления будут одинаковы. В листинге 1.3 показан пример задания инвертора и одним, и другим способами.

 

В описании одной библиотеки синтеза нельзя использовать и тот, и другой подходы описания нагрузочных параметров элементов. Следует использовать только один из подходов для всех элементов библиотеки.

Листинг 1.3
Возможные варианты описания инвертора для программы lGen

GATE N (                        GATE N (
INPUTS A;                       INPUTS A;
OUTPUTS Y;                      OUTPUTS Y;

FUNCTION (Y = !A;);             FUNCTION (Y = !A;);

AREA = 2.000;                   AREA = 220;

INPUT A (                       INPUT A (
  LIN = 1.000;                    LIN = 0.022;
  DELAY (                         DELAY (
    PROP = (0.1,0.1);               PROP = (0.132,0.136);
    DRIVE = (0.5,0.5);););          DRIVE = (5.0,2.9);););
OUTPUT Y (                      OUTPUT Y (
  LMAX = 16.000;););              LMAX = 0.3552;););

О параметрах коэффициент разветвления и нагрузочная способность следует сказать отдельно.

Коэффициент разветвления по выходу (нагрузочная способность; англ. fanout) логического вентиля – это число входов, которые можно подключить к нему, не нарушая предельных требований по нагрузке, т. е. не нарушая нормальную работу элемента. Коэффициент разветвления по выходу зависит не только от характеристик схемы по выходу, но также и от свойств подключаемых к ней входов. Разветвление по выходу может различаться для высокого и низкого уровней выходного сигнала.

Нагрузочная способность – параметр выхода, характеризующий величину выходного тока, которую может выдавать в нагрузку данный выход без нарушения работы. Чаще всего нагрузочная способность прямо связана с коэффициентом разветвления.

Коэффициент разветвления N определяется как отношение максимального выходного тока, при котором еще обеспечиваются требуемые уровни 0 и 1, к входному току элемента. Обычно коэффициент разветвления различен для 0 и 1 на выходе. Таким образом, принимается меньшее значение коэффициента:

N = min(I0вых/I0вх, I1вых/I1вх)
 
Рис.4. Логический КМОП-элемент:
а) условное обозначение; б) электрическая схема

Такое определение коэффициента разветвления характерно для схем, которые имеют «значительный» входной ток по сравнению с максимальным выходным током, такие как ТТЛ, ТТЛШ, ЭСЛ. Коэффициент разветвления для таких схем 10 – 20 элементов. В КМОП-элементах (рис. 4) входной ток практически равен нулю, в сравнении с максимальным выходным током.

Следует заметить, что речь идет о внутренних элементах на кристалле, а не о дискретных элементах, выполненных в виде от-дельных КМОП микросхем, в которых входной ток порядка микро-ампер. Поэтому коэффициент разветвления для КМОП-элементов может достигать нескольких тысяч. Все вышесказанное относится для статического коэффициента разветвления, т. е. когда все уровни схемы установлены в 0 или 1.

Свойства max_fanout_load, fanout_load определяют статический коэффициент разветвления NDC:

NDC = max_fanout_load / fanout_load

С подключением каждого входа к выходу элемента не только прибавляется входной ток, но и входная емкость элемента. Таким образом, при переходе выхода из одного состояния в другое необходимо перезарядить подключенную к выходу емкость. Чем больше эта емкость, тем дольше время переключения и более пологий выходной фронт. Поэтому динамический коэффициент разветвления зависит от допустимой максимальной емкости, которую можно подключить к выходу. Значение этой емкости определяется тем, на сколько может быть увеличена задержка на элементе и, соответственно, на сколько может быть растянут выходной фронт переключения. Свойствами, определяющими динамический коэффициент разветвления NAC, являются max_cap_load (LMAX) и cap_load (LIN):

NAC = max_cap_load (LMAX) / cap_load (LIN)

Иногда проще задать не максимальную выходную емкость, которая будет зависеть от выходного сопротивления каждого элемента, а максимально допустимую задержку переключения выхода, которая задается свойством max_transition. В данном случае коэффициент разветвления будет определяться следующим образом:

NAC = max_transition / (DRIVE * cap_load (LIN))

Таким образом, для библиотеки, состоящей из КМОП-элементов, определяющим при построении схемы будет динамический коэффициент разветвления NAC.

 

Коэффициент разветвления, рассчитанный по формулам (1.3)–(1.5), является максимальным значением, реально в синтезированной схеме он может ограничиваться требуемой суммарной задержкой блока, дополнительной емкостью связей и др.

В листинге 1.4 приведено описание элемента И-НЕ, имеющего имя NA2. Описание данного элемента не имеет принципиальных отличий от описания инвертора, поэтому ограничимся только короткими комментариями по тексту листинга. Комментарий начинается с символа # и продолжается до конца строки.

Листинг 1.4
Описание логического элемента И-НЕ для программы lGen

GATE NA2 (          # Имя элемента - NA2
INPUTS A,B;         # Имена входных портов
OUTPUTS Y;          # Имя выходного порта
# Описание выполняемой логической функции
FUNCTION (Y = !(A*B);); 
# Занимаемая площадь
# (в элементарных ячейках БМК)
AREA = 3; 
#  Описание параметров входного порта A
INPUT A (
  LIN = 0.0234;             # входная емкость порта А
# Описание задержек
  DELAY (
    PROP = (0.179,0.272);   # собственная задержка
    DRIVE = (4.700,4.300);  # выходное сопротивление
    ););
#  Описание параметров входного порта B
INPUT B (
# Описание задержек
  LIN = 0.0234;             # входная емкость порта B
  DELAY (
    PROP = (0.150,0.275);   # собственная задержка
    DRIVE = (4.700,4.300);  # выходное сопротивление
    ););
#  Описание параметров выходного порта Y
OUTPUT Y (
  LMAX = 0.1776;);   # максимально допустимая выходная
);                   # нагрузочная емкость

Описание триггеров

править

Для описания функций триггеров используются зарезервированные функции:

DFF(SD, RD, D, CK, Q, QN);
DFFE(SD, RD, D, CK, E, Q, QN);
DLATCH(SD, RD, D, G, Q, QN);
RSLATCH(S, R, Q, QN).

Описание этих функций приведено в табл. 1.3. При описании функции создаваемого триггера не обязательно использовать все аргументы стандартных функций, однако в этом случае на месте неиспользуемого аргумента требуется ставить знак «–» дефис. Например, для описания функции элемента D-триггера (вход данных – DATA), синхронизируемого положительным фронтом синхросигнала (CLOCK), с асинхронным сбросом (RESET) и прямым выходом (Q) надо записать:

FUNCTION (DFF(-, RESET, DATA, CLOСK, Q, -););

Вход SD и выход QN в этом случае не используются. В листинге 1.5 приведено описание D-триггера с одним неиспользуемым выходом QN.

Листинг 1.5
Описание D-триггера, управляемого положительным фронтом, с асинхронным сбросом и установкой (для программы lGen)

GATE FDRS (         # Имя элемента
INPUTS C,D,R,S;     # Имена входных портов
OUTPUTS Q;          # Имя выхода
# Описание выполняемой функции
FUNCTION (DFF(S,R,D,C,Q,-););
# Занимаемая площадь
AREA = 25;
# Описание электрических параметров портов
# Описание параметров порта D
INPUT D (
  LIN =  0.0222;     # задание входной емкости
# Задание временных параметров относительно
# порта С
  DELAY C (
    SETUP = (0.600, 0.500); # задание времени
                            # предустановки
    HOLD = (0.500, 0.400);  # задание времени
    ););                    # удержания
# Описание параметров порта C
INPUT C (
  LIN =  0.022;     # задание входной емкости
  DELAY Q (
    PROP = (1.299,1.270);   # собственная задержка
    DRIVE = (2.500,2.300);  # выходное сопротивление
    );); 
# Описание параметров порта R 
INPUT R (
  LIN = 0.044;      # задание входной емкости
  DELAY Q (
    PROP = (1.042,1.042);   # собственная задержка
    DRIVE = (2.200,2.200);  # выходное сопротивление
    );); 
# Описание параметров порта S 
INPUT S (
  LIN = 0.022;      # задание входной емкости
  DELAY Q (
    PROP = (1.806,1.806);   # собственная задержка
    DRIVE = (2.500,2.500);  # выходное сопротивление
  );); 
# Описание параметров порта Q 
OUTPUT Q (
  LMAX = 0.3552;);); # максимально допустимая выходная
                     # нагрузочная емкость

Более полное описание правил создания библиотеки синтеза можно найти в документации к программе lGen [27].

Задание глобальных параметров библиотеки

править

Глобальные параметры задаются для всей библиотеки в целом, они определяют свойства элементов, которые характерны всем элементам библиотеки.

Задание глобальных параметров осуществляется с помощью команды SET по следующему формату:

SET <глобальный_параметр> = <значение>;

Параметры могут принимать числовое или символьное значение.

Если библиотечные элементы имеют одинаковые значения свойств cap_load, max_cap_load, fanout_load, max_fanout_load, max_transition, то можно не перечислять значения этих параметров в описании каждого элемента, а задать их с помощью следующих глобальных параметров, задающих значение по умолчанию для соответствующих свойств элементов: default_cap_load, default_max_cap_load, default_fanout_load, default_max_fanout_load, default_max_transition.

Следующую группу параметров можно назвать вспомогательными, так как они не влияют на процесс синтеза:

  • lib_version данному параметру можно присвоить текст (например, версию библиотеки), который будет выводиться на экран и в файл отчета при загрузке библиотеки, например
set lib_version = 3.1415;
  • area_units с его помощью задаются единицы измерения площади элементов в библиотеке, задаваемых свойством AREA (например, step, blocks, gates, square mils):
set area_units = step;
  • delay_units задает единицы измерения задержки (PROP) элементов библиотеки, например
set delay_units = ns;

Коэффициенты изменения номинальных параметров

править

Следующие параметры предназначены для вычисления задержек элементов в зависимости от внешних условий, таких как технологический процесс, напряжение питания и температура окружающей среды:

  • typical_process, worst_process, fast_process задают значение коэффициента технологического процесса для типового, наихудшего и лучшего случая соответственно, например:
set typical_process = 1;
set worst_process = 1.100000;
set fast_process = 0.900000;
  • max_voltage, min_voltage, max_temp, min_temp задают максимальное и минимальное значения допустимых напряжений и температур для библиотеки элементов, например:
set max_voltage = 3.600000;
set min_voltage = 3;
set max_temp = 85;
set min_temp = -40;
  • nominal_process, (typical, worst, fast), nominal_voltage, nominal_temp: задают те значения, которые будут использоваться по умолчанию, например:
set nominal_process = typical;
set nominal_voltage = 3.300000;
set nominal_temp = 27;
  • voltage_slope, temp_slope задают зависимость изменения времени задержки при изменении напряжения и температуры соответственно, например:
set voltage_slope = -0.140000;
set temp_slope = 0.002500;

Для определения задержки при различных внешних условиях используется формула:

Delay = KP × KT × KV × DTOTAL ,

где DTOTAL – суммарная задержка элемента, определяемая по формуле (1.1);

KP – коэффициент влияния технологического процесса (fast, typical, worst); значение коэффициента задается следующими параметрами: worst_process, typical_process, fast_process; выбор процесса осуществляется с помощью параметра process;
KT – коэффициент влияния температуры, определяется выражением
KT = 1 + KTEMP × (T0 – T),

где KTEMP – коэффициент изменения времени задержки при изменении температуры на один градус, задается с помощью параметра temp_slope;

T0 – значение номинальной температуры, задается с помощью параметра nominal_temp;
T – температура, для которой выполняется расчет задержек, задается с помощью параметра temp;
KV – коэффициент влияния напряжения питания, определяется выражением
KV = 1 + KVOLT× (V0 – V),
KVOLT – коэффициент изменения времени задержки при изменении температуры на один градус, задается с помощью глобального параметра voltage_slope;
V0 – номинальное напряжение питания, задаваемое с помощью параметра nominal_voltage;
V – напряжение, для которого выполняется расчет задержек, задается с помощью параметра voltage.

Задать требуемую температуру, напряжение и технологический процесс можно с помощью следующих команд:

set temp -40
set voltage 5
set process worst

Такие команды можно использовать в Tcl-скрипте или в графической оболочке LeonardoSpectrum.

Использование «собственной» библиотеки в LeonardoSpectrum

править

После того как скомпилирован исходный текст описания библиотеки элементов, ее можно использовать при синтезе в LeonardoSpectrum. Наиболее простой способ – это выполнить каждый раз Tcl-команду загрузки скомпилированной библиотеки

load_library имя_файла>.syn;

когда требуется провести синтез в этой библиотеке. Эта команда доступна в командной строке графической оболочки LeonardoSpectrum и может использоваться в Tcl-скрипте. В поле <имя_файла> может содержаться не только имя файла, но и полный путь к нему, если файл библиотеки находится не в рабочем директории.

Другой способ – сделать доступной библиотеку в графической оболочке LeonardoSpectrum в окне выбора библиотеки. Для этого необходимо:

  • переписать скомпилированный файл (в нашем случае это файл bmk.syn) в директорий EXEMPLAR/LIB. Именно в этом директории содержатся служебные файлы с описаниями библиотек синтеза, которые могут использоваться в LeonardoSpectrum.
  • в файл devices.ini (в директории EXEMPLAR/LIB) необходимо добавить строку
DEVICE_192=BMK_K1574

Здесь 192 – это номер библиотеки, для различных версий LeonardoSpectrum он может быть различным; BMK_K1574 – это имя метки, после которой будет дана дополнительная информация о библиотеке. Далее в конец файла devices.ini добавляется следующая информация:

[BMK_K1574]
CONTACT=
DIRECTION=BOTH
FORM=ASIC
LIBRARY_NAME=bmk
FAMILY=bmk
TECHNOLOGY_TYPE=ASIC
MANUFACTURER=BOOK
VENDOR_NAME=Author

В результате пользователь увидит созданную библиотеку bmk в разделе ASIC/BOOK (рис. 1.9).

[[Image:]]
Рис 1.9. Подключение новой библиотеки bmk

Описание библиотеки на языке VHDL

править

После того как схема синтезирована в заданной библиотеке элементов, обычно проводится ее моделирование. Для этого в LeonardoSpectrum с помощью команды

write -format VHDL -downto PRIMITIVES имя_файла>.vhd;

сохраняется структурное описание схемы (netlist) на языке VHDL, которое представляет собой список связей между библиотечными элементами, входящими в схему. Для моделирования схемы в ModelSim (или другой системе моделирования) необходимо иметь VHDL-модели библиотечных элементов. Такие модели можно написать «вручную». Например, VHDL-модель инвертора, описанного в листинге 1.2, представлена в листинге 1.6.

 

При написании VHDL-моделей элементов библиотеки синтеза необходимо строгое соответствие имен портов и реализуемых функций в VHDL-моделях и в описаниях элементов для программы lGen.

Листинг 1.6
VHDL-модель инвертора для программы моделирования
-- Подключение стандартных пакетов
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity N is
  generic(
    del : time := 0.160 ns; ); -- Задание задержки
  port(
    A : in std_ulogic;
    Y : out std_ulogic);
end N;

architecture beh of N is
begin
  -- Описание функции элемента
  Y := (not A) after del;
end beh;

Приведенное в листинге 1.6 описание VHDL-модели инвертора является наиболее простым. Параметр del в модели задает задержку сигнала на этом элементе. Такая модель не учитывает зависимость задержки от количества элементов, подключенных к выходу. К тому же, нет различия между задержками для положительного и отрицательного фронтов сигнала. При использовании таких VHDL-моделей для моделирования синтезированной схемы не будет соответствия между задержками логических цепей, полученными в программе синтеза LeonardoSpectrum, и задержками, полученными при моделировании в ModelSim.

Существует возможность [26] создания (с помощью LeonardoSpectrum) VHDL-описаний элементов библиотеки синтеза. В листинге 1.7 приведен текст Tcl-скрипта, который создает и сохраняет VHDL-модели элементов библиотеки bmk в файл bmk.vhd. По сути, это перевод информации из одного формата (формата программы lGen) в другой формат – язык VHDL.

Листинг 1.7
Tcl-скрипт создания VHDL-моделей элементов библиотеки
# выполняется сброс установок
clean_all

# определяется значение bmk для переменной lib
set lib bmk

# загрузка библиотеки
load_library $lib.syn

foreach i [list_design -short .$lib] {
present_design .$lib.$i.NETLIST

# сохранение VHDL-моделей элементов в файле
write -downto PRIMITIVES -format VHDL - >> $lib.vhd
}

Если приведенный в листинге 1.7 текст сохранен в файле make_vhd.tcl, то его можно выполнить в командной строке LeonardoSpectrum следующим образом:

source make_vhd.tcl

При этом подразумевается, что данный файл должен находиться в рабочем директории синтеза, иначе нужно указать полный путь к файлу. В VHDL-описании, созданным с помощью скрипта (листинг 1.7) не учитываются задержки элементов. При необходимости, в данное VHDL-описание можно добавить параметр generic, как это сделано в листинге 1.6, для учета «какой-либо» задержки. В главе 6 будет рассмотрена возможность моделирования синтезированной схемы с учетом задержек, полученных программой синтеза LeonardoSpectrum. В листинге 1.8 приведен пример VHDL-описания библиотечного элемента И-НЕ (NA2), созданного программой LeonardoSpectrum в результате выполнения скрипта (листинг 1.7).

Листинг 1.8
VHDL-описание библиотечного элемента И-НЕ (NA2), созданное программой LeonardoSpectrum
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity NA2 is
  port (
    Y : OUT std_logic ;
    A : IN std_logic ; B : IN std_logic) ;
end NA2 ;

architecture NETLIST of NA2 is
  signal NOT_B, NOT_A: std_logic ;
begin
  NOT_B <= NOT B ;
  NOT_A <= NOT A ;
  Y <= NOT_B OR NOT_A ;
end NETLIST ;