Московский Государственный Технический Университет
им. Н.Э.Баумана

Кафедра САПР(РК6)

Федорук А.В.

Методические указания по лабораторной работе
"Использование языка VHDL для моделирования цифровых устройств на регистровом уровне"

Цель работы: освоение языка VHDL для использования в задачах описания и анализа дискретных устройств (на регистровом уровне).

Практическая часть.
Пусть необходимо дать описание на языке VHDL счетчика по модулю 10, построенного на JK-триггерах с запрещающими связями. Полученное описание должно быть использовано для анализа поведения устройства средствами системы моделирования и анализа Active-VHDL.
Используемый в примере счетчик описывается приведенной ниже логической схемой:
JK-триггер также описывается логической схемой:
Используемые для построения счетчика элементы могут быть представлены в языке VHDL двояко:
Например, функциональное описание элемента 2И выглядит следующим образом:
entity and2 is
 port (
    x1: in BIT;
    x2: in BIT;
    o: out BIT );
end and2;
architecture and2 of and2 is
 begin
     o<= x1 and x2 after delay;
 end and2;
где delay - задержка на элементе.
Структурное описание JK-триггера в базисе элементов 3И-НЕ выглядит следующим образом:
entity jktrigger is
 port (
     R: in BIT;
     S: in BIT;
     J: in BIT;
     C: in BIT;
     K: in BIT;
     Q: out BIT;
     NQ: out BIT
      );
end jktrigger;
architecture jktrigger of jktrigger is
   component and_no_3
          port (
             x1: in BIT;
             x2: in BIT;
             x3: in BIT;
             o: out BIT
              );
    end component;
    signal Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8: BIT;
    begin
          E1: and_no_3
                port map (Q8, J, C, Q1);
          E2: and_no_3
                port map (Q7, K, C, Q2);
          E3: and_no_3
                port map (S, Q1, Q4, Q3);
          E4: and_no_3
                port map (Q3, Q2, R, Q4);
          E5: and_no_3
                 port map (Q2, Q3, Q1, Q5);
          E6: and_no_3
                 port map (Q2, Q4, Q1, Q6);
          E7: and_no_3
                 port map (S, Q5, Q8, Q7);
          E8: and_no_3
                 port map (Q7, Q6, R, Q8);
          Q <= Q7;
         NQ <= Q8;
 end jktrigger;
Рассматриваемый в примере счетчик на основе JK-триггеров и элементов 2И описывается так:
entity counter is
   port (
            reset: in BIT;
            clk: in BIT;
            q: out BIT_VECTOR (4 downto 1)
            );
  end counter;
architecture counter of counter is
 component jktrigger
        port (
                  R: in BIT;
                  S: in BIT;
                  J: in BIT;
                 C: in BIT;
                 K: in BIT;
                 Q: out BIT;
                 NQ: out BIT
               );
        end component;
  component and2
         port (
                  x1: in BIT;
                  x2: in BIT;
                  o: out BIT
                 );
 end component;
 signal Q1, NQ1, Q2, NQ2, Q3, NQ3, Q4,NQ4,L1,L2,L3: BIT;
 begin
     T1: jktrigger
            port map (Reset, '1','1',CLK,'1',Q1, NQ1);
     T2: jktrigger
            port map (Reset, '1', L1, CLK, Q1, Q2,NQ2);
     T3: jktrigger
            port map (Reset, '1', L2, CLK, L2, Q3,NQ3);
     T4: jktrigger
            port map (Reset, '1', L3, CLK, Q1, Q4, NQ4);
     A1: and2
            port map (Q1, NQ4, L1);
     A2: and2
            port map (Q1, Q2, L2);
     A3: and2
            port map (Q3, L2, L3 );
     q(1) <=  Q1;
     q(2) <=  Q2;
     q(3) <=  Q3;
     q(4) <=  Q4;
end counter;
 
 

Техническое задание:


Описать на языке VHDL счетчик по модулю 10 на синхронных двухступенчатых JK-триггерах с запрещающими связями и промоделировать его работу.

  1.  Для того, чтобы создать новый проект, запустите Active-VHDL или, если система уже запущена, воспользуйтесь пунктом New Design меню File. С помощью New Design Wizard вы создадите необходимые для вашего проекта файлы, библиотеки и шаблоны элементов:

  2. Примечание 1: файлы, содержащие описание на языке VHDL, имеют, как правило, расширение .vhd.
    Примечание 2: библиотеки содержат необходимые для компиляции и моделирования данные о проекте.
    Примечание 3: шаблоны, генерируемые системой на данном этапе, представляют собой описание интерфейса структурного элемента, подготовленное для внесение в него описания архитектуры элемента, создаваемого пользователем.
  3. Итак, исходные файлы для вашего проекта созданы. Файловую структуру проекта вы можете увидеть в окне Design Browser (его можно включить, выбрав соответствующий пункт в меню View), выбрав закладку (tab) Files. Если предыдущие этапы были пройдены успешно, окно Design Browser должно выглядеть похоже на то, что изображено на рисунке. Здесь присутствуют: пункт Add New File, которым можно воспользоваться в случае, необходимости добавить еще какие-либо элементы к вашему проекту (например, если вы забыли создать какой-то элемент на предыдущих этапах), файл библиотеки test library, и 4 файла с VHDL-кодом ваших элементов, созданным New Design Wizard. Цвета иконок в окне имеют слудующий смысл:
    1. - синий - файлы еще не были откомпилированны или были изменены после послденей компиляции;
      - зеленый - файл был откомпилирован успешно;
      - красно-желтый - обнаружение ошибки в компилировавшемся файле.
    Следить за ходом работы над проектом, обнаруженными ошибками и другой информацией вы можете в окне Console (включается через меню View).
  4. Для того, чтобы посмотреть VHDL-код, созданный посредством New Design Wizard, изменить или дополнить его, необходимо выбрать желаемый файл, нажать правую кнопку мыши и в появившемся меню выбрать пункт Open (Открыть). Во вновь открывшемся окне вы увидите описание элемента, сгенерированное New Design Wizard. Как видно из рис., описаны только порты элемента, его же поведение (функциональность) необходимо описать самостоятельно, т.е. вставить необходимый код вместо надписи "-- <<enter your statements here>>". Элементы самого нижнего уровня (3И-НЕ и 2И) необходимо описать функционально. Например, для элемента 3И-НЕ вставляемый текст может выглядеть следующим образом: o<= not (x1 andx2 and x3) after delay;
  5. Откомпилируйте готовый код элемента (кнопка Compile на панели инструментов или пункт Compile в контекстном меню). Если в коде есть ошибки (иконка файла стала желто-красной), найдите их с помощью окна Console, исправьте и откомпилируйте заново, пока иконка файла не станет зеленым.
  6. Для того, чтобы проверить правильность работы элемента, промоделируем его и построим временные диаграммы. Для этого:
  7. Повторите процесс моделирования для всех элементво нижнего уровня (2И).
  8. После того, как все элементы нижнего уровня созданы и промоделированы, можно создавать элементы верхних уровней. Покажем этот процесс на примере создания JK-триггера из элементов 3И-НЕ. Для этого откройте код, созданный New Design Wizard для триггера (аналогично тому, как это делается для элементов нижнего уровня) и структурно опишите архитектуру триггера. Повторите процедуру компиляции кода и построения временных диаграмм, как описано ранее. При этом не забудьте выбрать в качетсве верхнего уровня проектируемый элемент.
  9. Так же, как в п.7 промоделируйте элемент самого верхнего уровеня - счетчик. При этом при построении временной диаграммы для всех входов, кроме CLK, выберите тип Hotkey, а для CLK - тип Clock с частотой, которая учитывает задержку, которую вы задали для элементов нижнего уровня.

  10.  

     

    Отчет по лабораторной работе должен содержать схемы моделируемых элементов и временные диаграммы, полученные в результате проведения моделирования в системе Active-VHDL.

Рекомендуемая литература.
  1. Армстронг Дж.Р. Моделирование цифровых систем на языке VHDL: Пер. с англ./М.: Мир, 1992.-175 с.
  2. Active-VHDL Series. Getting Started Guide.- Poland: Aldec, Inc.,1998.-202 pp.
  3.  www.aldec.com