Главная страница
Навигация по странице:

  • Таблица 17. Мегафункции запоминающих устройств Имя

  • User Libraries

  • Create Default Include File

  • Choose Create Default Symbol

  • Project Save Check

  • Учебник по языку ahdl оглавление Введение 2 Элементы языка ahdl 3 Структура описания проекта на языке ahdl 25


    Скачать 0.61 Mb.
    НазваниеУчебник по языку ahdl оглавление Введение 2 Элементы языка ahdl 3 Структура описания проекта на языке ahdl 25
    Дата28.04.2019
    Размер0.61 Mb.
    Формат файлаdoc
    Имя файлаahdl.doc
    ТипУчебник
    #75494
    страница18 из 18
    1   ...   10   11   12   13   14   15   16   17   18

    1.36.Реализация запоминающих устройств


    MAX+PLUS II (и AHDL) снабжены несколькими LPM и мегафункциями, которые позволяют Вам реализовать RAM и ROM в устройствах MAX+PLUS II. Универсальная, масштабируемая природа каждой из этих функций гарантирует, что Вы можете использовать их для реализации любых поддерживаемых типов RAM или ROM в MAX+PLUS II.

    Altera не рекомендует создавать заказные логические функции для реализации памяти. Вы должны использовать поставляемые Altera функции во всех случаях, где Вы хотите реализовать RAM или ROM.

    Таблица 17. Мегафункции запоминающих устройств

    Имя

    Описание

    lpm_ram_dq

    Синхронная или асинхронная память с раздельными портами ввода вывода

    lpm_ram_io

    Синхронная или асинхронная память с единственным портов I/O

    lpm_rom

    Синхронная или асинхронная память только для считывания

    csdpram

    Двухпортовая память

    csfifo

    Буфер FIFO

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

    1.37.Реализация иерархических проектов


    TDF файлы, написанные на языке AHDL, можно смешивать с другими файлами в проектную иерархию. Файлы низкого уровня могут быть или файлами, поставляемыми Altera-ой, или мега и макрофункциями, определенными пользователем.

    1.37.1.Использование непараметрических функций


    MAX+PLUS II включает библиотеки примитивов и непараметрических макрофункций. Все логические функции MAX+PLUS II можно использовать для создания иерархических проектов. Мега и макрофункции автоматически устанавливаются в подкаталогах каталога \maxplus2\max2lib, созданного во время инсталляции. Логика примитивов встроена в AHDL.

    Существует два способа использовать (т.е. вставлять экземпляр) непараметрическую функцию в языке AHDL:


    • Объявить переменную для функции, т.е. имя экземпляра, в разделе Variable объявления Instance и использовать порты экземпляра функции в разделе Logic.

    • Использовать ссылку на логическую функцию в разделе Logic TDF файла.


    Объявления Instance обеспечивают именование узлов, которые полезны для ввода присваиваний ресурсов и моделирования проекта. С другой стороны с помощью ссылок на логические функции, имена узлов, основанные на ID номерах, можно менять при изменениях логики проекта.

    Входы и выходы мега и макрофункций должны объявляться с помощью оператора прототипа функции (Function Prototype). Прототипы функций не требуются для примитивов. MAX+PLUS II снабжена файлами включения (Include Files), которые содержат прототипы для всех мега и макрофункций MAX+PLUS II в каталогах \maxplus2\max2lib\mega_lpm и \maxplus2\max2inc, соответственно. С помощью оператора Include, Вы можете передавать содержимое Include файла в файл TDF, для объявления прототипа мега или макрофункции MAX+PLUS II.

    Файл macro1.tdf, приведенный ниже, демонстрирует 4-битный счетчик, соединенный с дешифратором 4 в 16. Экземпляры этих функций создаются с помощью объявлений Instance в разделе Variable.
    INCLUDE "4count";

    INCLUDE "16dmux";

    SUBDESIGN macro1

    (

    clk : INPUT;

    out[15..0] : OUTPUT;

    )

    VARIABLE

    counter : 4count;

    decoder : 16dmux;

    BEGIN

    counter.clk = clk;

    counter.dnup = GND;

    decoder.(d,c,b,a) = counter.(qd,qc,qb,qa);

    out[15..0] = decoder.q[15..0];

    END;
    Этот файл использует операторы Include, для импортирования прототипов функций для двух макрофункций: 4count и 16dmux. В разделе Variable переменная counter объявлена как экземпляр функции 4count, а переменная decoder объявлена как экземпляр функции 16dmux. Входные порты функций, в формате <имя экземпляра>.<имя порта>, определены с левой стороны булевых уравнений в разделе Logic, а выходные порты с правой стороны.

    Файл macro2.tdf, приведенный ниже, имеет такую же функциональность как и macro1.tdf, но создает экземпляры двух функций с помощью ссылок и узлов q[3..0]:
    INCLUDE "4count";

    INCLUDE "16dmux";

    SUBDESIGN macro2

    (

    clk : INPUT;

    out[15..0] : OUTPUT;

    )

    VARIABLE

    q[3..0] : NODE;

    BEGIN

    (q[3..0], ) = 4count (clk, , , , , GND, , , , );

    % эквивалент подставляемой ссылки со связью по имени порта %

    % (q[3..0], ) = 4count (.clk=clk, .dnup=GND); %
    % эквивалент подставляемой ссылки со связью по имени порта %

    % и предложением RETURNS, определяющим требуемый выход %

    % q[3..0] = 4count (.clk=clk, .dnup=GND) %

    % RETURNS (qd, qc, qb, qa); %
    out[15..0] = 16dmux (.(d, c, b, a)=q[3..0]);
    % эквивалент подставляемой ссылки со связью по положению порта %

    % out[15..0] = 16dmux (q[3..0]); %
    END;
    Прототипы функций 4count.inc и 16dmux.inc приведены ниже:
    FUNCTION 4count (clk, clrn, setn, ldn, cin, dnup, d, c, b, a)

    RETURNS (qd, qc, qb, qa, cout);

    FUNCTION 16dmux (d, c, b, a)

    RETURNS (q[15..0]);
    Ссылки на 4count и 16dmux появляются в первом и втором булевых уравнениях в разделе Logic, соответственно. Ссылка на 4count использует связь по положению порта, тогда как ссылка на 16dmux использует связь по имени порта. Входные порты обоих макрофункций определяются с правой стороны ссылки, а выходные порты с левой.

    Комментарии демонстрируют эквивалентные ссылки для различных видов связи с портом. В ссылке порты с правой стороны символа равенства (=) можно перечислять с помощью или связи по положению или по имени порта. Порты с левой стороны символа равенства всегда используют связь по положению. При использовании связи по положению важен порядок портов, так как существует соответствие один в один между порядком портов в прототипе функции и портами, определенными в разделе Logic. В ссылке на 4count запятые используются как разделители для портов, которые не соединяются точно.

    Предложение RETURNS является дополнительным с ссылке. RETURNS можно использовать для перечисления подмножества выходов функции, которые используются в экземпляре.

    Примитивы и макрофункции всегда имеют значения по умолчанию для не подсоединенных входов. Напротив, мегафункции необязательно имеют их.

    1.37.2.Использование параметрических функций


    MAX+PLUS II содержит параметрические мегафункции, а также функции библиотеки параметрических модулей (LPM). Например, параметры используются для определения ширины порта или будет ли блок памяти RAM реализован как синхронный или асинхронный. Параметрические функции могут содержать другие подпроекты, которые в свою очередь могут быть параметрическими или непараметрическими. Параметры можно использовать с некоторыми макрофункциями, которые не являются параметрическими. (Примитивы не могут быть параметрическими). Все логические функции MAX+PLUS II можно использовать для создания иерархических проектов. Мега и макрофункции автоматически устанавливаются в подкаталоги каталога \maxplus2\max2lib, созданного во время инсталляции; логика примитивов встроена в язык AHDL.

    Параметрические функции объявляются с помощью ссылки на функцию или объявления Instance таким же образом как для непараметрических функций, но с некоторыми дополнительными шагами:


    • Экземпляр логической функции должен содержать в себе предложение WITH, которое основано на предложении WITH в прототипе функции, в котором приводится список параметров, используемых экземпляром. Вы можете использовать предложение WITH для дополнительного присваивания значений параметрам экземпляра, однако, для всех необходимых параметров в функции, параметрическое значение должно прикладываться где-нибудь в пределах проекта. Если сам по себе экземпляр не содержит некоторых или всех значений для требуемых параметров, компилятор ищет их в порядке поиска значений параметров.

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


    Файл lpm_add1.tdf, приведенный ниже, реализует 8-битный сумматор с помощью ссылки на параметрическую мегафункцию lpm_add_sub.
    INCLUDE "lpm_add_sub.inc";

    SUBDESIGN lpm_add1

    (

    a[8..1], b[8..1] : INPUT;

    c[8..1] : OUTPUT;

    carry_out : OUTPUT;

    )

    BEGIN

    % Экземпляр мегафункции со связью порта по положению %

    (c[], carry_out, ) = lpm_add_sub(GND, a[], b[], GND,,)

    WITH (LPM_WIDTH=8,

    LPM_REPRESENTATION="unsigned");

    %Эквивалентный экземпляр со связью по имени %

    --(c[],carry_out,)= lpm_add_sub(.dataa[]=a[],.datab[]=b[],

    -- .cin=GND, .add_sub=GND)

    -- WITH (LPM_WIDTH=8,

    LPM_REPRESENTATION="unsigned");

    END;
    Прототип функции для lpm_add_sub приведен ниже:
    FUNCTION lpm_add_sub(cin, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0], add_sub)

    WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ADDERTYPE,

    ONE_INPUT_IS_CONSTANT)

    RETURNS (result[LPM_WIDTH-1..0], cout, overflow);
    Здесь требуется только параметр LPM_WIDTH и экземпляр функции lpm_add_sub в файле lpm_add1.tdf определяет значения параметров только для LPM_WIDTH и LPM_REPRESENTATION.

    Файл lpm_add2.tdf, приведенный ниже, идентичен с lpm_add1.tdf, но реализует 8-битный сумматор с помощью объявления Instance.
    INCLUDE "lpm_add_sub.inc";

    SUBDESIGN lpm_add2

    (

    a[8..1], b[8..1] : INPUT;

    c[8..1] : OUTPUT;

    carry_out : OUTPUT;

    )

    VARIABLE

    8bitadder : lpm_add_sub WITH (LPM_WIDTH=8,

    LPM_REPRESENTATION="unsigned");

    BEGIN

    8bitadder.cin = GND

    8bitadder.dataa[] = a[]

    8bitadder.datab[] = b[]

    8bitadder.add_sub = GND

    c[] = 8bitadder.result[]

    carry_out = 8bitadder.cout

    END;

    1.37.3.Использование заказных мега- и макрофункций


    Вы можете легко создать и использовать заказные мега и макрофункции в TDF файле.

    После того как Вы определили логику для заказной функции в файле проекта, необходимо выполнить несколько шагов при использовании функции в других TDF файлах или в других типах файлов проекта.

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


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

    2. Если Вы планируете использовать функцию в нескольких проектах, Вы должны назначить каталог для хранения файла проекта в качестве библиотеки пользователя с помощью команды User Libraries (меню Options) или сохранения копии файла в существующем каталоге пользовательской библиотеки. Или же сохраните копию файла в каталоге, содержащем проект, который будет использовать заказную функцию.

    1. С помощью открытия файла в окне текстового редактора создайте Include файл и символ, который представляет текущий файл:

      1. Выберите команду Create Default Include File (меню File) для создания Include файла, который можно использовать в TDF файле верхнего уровня. С помощью оператора Include Вы можете импортировать содержимое Include файла в TDF файл, объявляя прототип мега или макрофункции.

      2. Выберите команду Choose Create Default Symbol (меню File) для создания символа, который можно использовать в GDF файле.

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

    1.37.4.Импорт и экспорт конечных автоматов


    Вы можете импортировать и экспортировать конечные автоматы между TDF файлами и другими файлами проекта, определяя входные и выходные порты как MACHINE INPUT или MACHINE OUTPUT в разделе Subdesign. Прототип функции, который представляет файл, содержащий конечный автомат, должен указывать, какие входы и выходы принадлежат конечному автомату с помощью предварения имен сигналов ключевым словом MACHINE.

    Типы портов MACHINE INPUT и MACHINE OUTPUT нельзя использовать в файле проекта верхнего уровня. Хотя высокоуровневый файл с этими портами полностью не компилируется, Вы можете использовать команду Project Save & Check (меню File) для проверки его синтаксиса и команду Create Default Include File (меню File) для создания Include файла, который представляет текущий файл.

    Вы можете переименовать конечный автомат с помощью временного имени, вводя объявление псевдоимени автомата в раздел Variable. Вы можете использовать это псевдоимя в файле, где создан этот автомат или в файле, который использует порт MACHINE INPUT для импорта конечного автомата. Затем Вы можете применить это имя вместо исходного имени автомата.

    Файл ss_def.tdf, приведенный ниже, определяет и экспортирует конечный автомат ss с помощью порта ss_out.
    SUBDESIGN ss_def

    (

    clk, reset, count : INPUT;

    ss_out : MACHINE OUTPUT;

    )

    VARIABLE

    ss: MACHINE WITH STATES (s1, s2, s3, s4, s5);

    BEGIN

    ss_out = ss;
    CASE ss IS

    WHEN s1=>

    IF count THEN ss = s2; ELSE ss = s1; END IF;

    WHEN s2=>

    IF count THEN ss = s3; ELSE ss = s2; END IF;

    WHEN s3=>

    IF count THEN ss = s4; ELSE ss = s3; END IF;

    WHEN s4=>

    IF count THEN ss = s5; ELSE ss = s4; END IF;

    WHEN s5=>

    IF count THEN ss = s1; ELSE ss = s5; END IF;

    END CASE;
    ss.(clk, reset) = (clk, reset);

    END;
    Файл ss_use.tdf, приведенный ниже, импортирует конечный автомат с помощью порта ss_in.
    SUBDESIGN ss_use

    (

    ss_in : MACHINE INPUT;

    out : OUTPUT;

    )

    BEGIN

    out = (ss_in == s2) OR (ss_in == s4);

    END;
    Файл top1.tdf, приведенный ниже, использует ссылки для вставки экземпляров функций ss_def и ss_use. Прототипы функций для ss_def и ss_use содержат ключевые слова MACHINE, которые указывают какие входы и выходы являются автоматными.
    FUNCTION ss_def (clk, reset, count)

    RETURNS (MACHINE ss_out);

    FUNCTION ss_use (MACHINE ss_in)

    RETURNS (out);
    SUBDESIGN top1

    (

    sys_clk, /reset, hold : INPUT;

    sync_out : OUTPUT;

    )

    VARIABLE

    ss_ref: MACHINE; %объявление псевдоимени автомата %

    BEGIN

    ss_ref = ss_def(sys_clk, !/reset, !hold);

    sync_out = ss_use(ss_ref);

    END;
    Внешний конечный автомат можно также реализовать в TDF файле верхнего уровня с помощью объявления экземпляра в разделе Variable. Файл top2.tdf, приведенный ниже, имеет такую же функциональность, как и top1.tdf, но использует объявления экземпляров, вместо ссылок.
    FUNCTION ss_def (clk, reset, count)

    RETURNS (MACHINE ss_out);

    FUNCTION ss_use (MACHINE ss_in)

    RETURNS (out);
    SUBDESIGN top2

    (

    sys_clk, /reset, hold : INPUT;

    sync_out : OUTPUT;

    )

    VARIABLE

    sm_macro : ss_def;

    sync : ss_use;

    BEGIN

    sm_macro.(clk, reset, count) = (sys_clk, !/reset, !hold);

    sync.ss_in = sm_macro.ss_out;

    sync_out = sync.out;

    END;

    Синтаксис языка AHDL

    Стилизация описаний на языке AHDL

    "Золотые" правила использования языка AHDL

    Контекстно-зависимая справка по языку AHDL


    Для получения контекстно-зависимой помощи, Вы сперва должны сохранить Ваш текстовой файл с расширением .tdf.

    Контекстно-зависимая помощь доступна для следующих элементов:

    • Арифметические операторы (в булевых выражениях)

    • Арифметические операторы (в арифметических выражениях)

    • Компараторы

    • Логические операторы

    • Мегафункции

    • Макрофункции

    • Примитивы

    • Зарезервированные идентификаторы

    • Зарезервированные ключевые слова

    • Символы


    1   ...   10   11   12   13   14   15   16   17   18


    написать администратору сайта