Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Проектирование последовательностных устройств





Лабораторная работа № 5

 

Проектирование последовательностных устройств

Введение

 

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

 

Необходимые сведения

Процедурные операторы initial и always могут применяться не только в испытательных, но и в конструкторских файлах (модулях) для представления функциональной сущности устройств. Эти операторы (в стандарте языка - procedural blocks) являются наиболее мощным средством для описания поведения устройств. Если в испытательных файлах основной задачей процедурных операторов является последовательное формирование необходимых для тестирования значений входных сигналов, то в конструкторских файлах эти операторы описывают реакцию устройства на те, или иные изменения входных сигналов.

Для управления моментами времени, в которые происходит выполнение отдельных действий (операторов) внутри процедурных операторов initial и always, применяются несколько конструкций:

‑ #delay – задерживает выполнение следующего оператора на указанное количество единиц времени, delay может быть литеральной числовой константой, переменной или выражением;

‑ @(edge signal_1 or edge signal_2 or...) – задерживает выполнение следующего оператора до момента наступления фронта (edge) указанного сигнала (сигналов), могут указываться положительный (posedge) или отрицательный (negedge) фронты сигналов, если явно не указан конкретный фронт сигнала, то задержка оканчивается при любом изменении сигнала; вместо союза or может применяться запятая;

‑ @(*) – символ * в круглых скобках обозначает, что событие наступает при любом фронте любого сигнала, входящего в следующий далее оператор или блок операторов;

‑ wait (выражение) – задерживает выполнение следующего оператора до тех пор, пока выражение в скобках не примет значения ИСТИНА (не синтезируемая конструкция).

При описании цифровых устройств с помощью оператора always, он снабжается так называемым списком реагирования (sensitivity list), который описывает события, вызывающие выполнение оператора. Для комбинационной логики в списке реагирования указываются имена тех портов или узлов, изменение логических значений которых должно вызывать реакцию, описываемую внутри оператора always. При конструировании последовательностных устройств в списке реагирования указываются положительные и/или отрицательные фронты сигналов, вызывающие изменения состояния устройства, описываемые в операторе always. Ниже (лист. 5.1) приведены два примера вариантов списка реагирования (список реагирования предваряется символом @ и заключается в круглые скобки).

 

a) always @(a or b or ci) //контролирует изменение a, b или ci

begin //реализует комбинационную логику

sum = a+b+ci;

end

б) always @(posedge clk) //контролир. появление положит. фронта clk

begin //это последловательностная логика

q = data;

end

 

Листинг 5.1. Примеры списков реагирования (выделены жирным курсивом):

а) одноразрядный сумматор (без вычисления выходного переноса); sum вычисляется каждый раз при изменении a или b, или ci, или их любой комбинации;

б) D-триггер; q присваивается значение data на каждом положительном фронте (posedge) clk

 

В первом примере оператор always, инициирует выполнение входящего в него блочного оператора begin.. end каждый раз, когда изменяется логическое значение одной или нескольких переменных, заключенных в круглых скобках списка реагирования. В данном случае это переменные a, b и ci. Внутри списка имена переменных разделены союзом "or", который в языке Verilog не представляет логической операции ИЛИ. Вместо него могут применяться запятые. Может также быть употреблена конструкция списка реагирования с обозначением @*. В этом случае процедурный оператор будет реагировать на изменение любого сигнала, присутствующего внутри оператора.

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

Если необходимо, чтобы устройство реагировало на любой фронт сигнала, то в списке реагирования употребляется ключевое слово edge, для отрицательного фронта - negedge. Конкретный тип фронта должен быть указан для каждого сигнала, внесенного в список реагирования.

За пределами процедурных операторов для назначения переменной (цепи) результата какой-либо логической функции обычно применяется оператор непрерывного присваивания assign. Внутри процедурных операторов присваивание может быть реализовано несколькими способами.

1. Оператором блокирующего процедурного присваивания: "=". Этот оператор задерживает выполнение следующего за ним оператора до тех пор пока присваивание не будет завершено. Например, в следующем блоке

begin m=n; n=m; end

первое присваивание изменит значение m до того, как второе присваивание прочитает m.

2. Оператором неблокирующего процедурного присваивания: <=. Этот оператор обеспечивает вычисление правого выражения в нулевой момент времени (после начала процедурного оператора или после выполнения последнего блокирующего присваивания в нем), а присваивание левой части результата вычисления осуществляется после задержки, если таковая указана в этом операторе присваивания. Не задерживает выполнение следующих за ним операторов блокирующего и неблокирующего присваивания. Например, в следующем блоке

begin m<=n; n<=m; end

обе операции присваивания осуществятся до того, как m и n изменят свои значения.

3. Оператором непрерывного процедурного присваивания: assign.. =. Этот оператор отменяет действие всех других, следовавших ранее операторов процедурного присваивания для данной переменной (assign m=a).

4. Оператором отмены присваивания: deassign. Этот оператор отменяет действие оператора непрерывного процедурного присваивания (deassign m).

При использовании операторов присваивания в процедурных операторах следует придерживаться следующих правил:

- не употреблять блокирующие и неблокирующие операторы в одной процедуре;

- применять неблокирующие операторы присваивания для описания последовательностной логики (устройств, содержащих триггеры);

- применять блокирующие операторы присваивания для описания комбинационной логики (без триггеров).

 

Внутри процедурных операторов для реализации функциональной логики устройства могут быть использованы управляющие операторы (в стандарте языка - Procedural Programming Statement). Эти операторы похожи по синтаксису и существу выполняемых действий на управляющие операторы языка C или Pascal. Часть управляющих операторов, необходимых для выполнения настоящей лабораторной работы, описана ниже:

- begin.. end – группирует два или более операторов в один блок, операторы в блоке выполняются в порядке следования, каждая временная задержка, если она установлена во внутреннем операторе, реализуется по окончании предыдущей;

блоки могут быть именованными, в этом случае внутри блока может быть объявлена локальная переменная, например счетчик цикла, и использован оператор disable (см. лабораторная работа № 6); пример именованного блока приведен в задании;

- if (выражение)

оператор или блок операторов – выполняет оператор или блок операторов, если выражение в круглых скобках дает результат ИСТИНА (любое не равное нулю значение);

- if (выражение)

первый оператор или блок операторов

else

второй оператор или блок операторов – выполняет первый оператор или блок операторов, если выражение в круглых скобках ИСТИННО, выполняет второй оператор или блок операторов, если выражение ЛОЖНО или НЕИЗВЕСТНО;

- for(присваивание значения счетчику; выражение; шаг счетчика)

оператор или блок операторов – присваивает начальное значение переменной-счетчику один раз вначале цикла, выполняет оператор или блок операторов (многократно) до тех пор, пока выражение в скобках ИСТИННО, изменяет счетчик на шаг при каждой итерации цикла.

 

Задание

1. Создать на языке Verilog в пакете ModelSim с использованием процедурного оператора always проект синхронного J-K триггера с одним прямым выходом q и следующими входами:

- j, k – стандартные управляющие входы J-K триггера;

- clk – вход синхронизации (при наличии высокого логического уровня на входе ena, триггер срабатывает по положительному фронту импульсов, поступающих на вход clk);

- ena – вход разрешения синхронной работы триггера;

- aset – вход асинхронной установки триггера;

- aclr–- вход асинхронного сброса триггера.

Схема функционирования J-K триггера представлена в табл. 5.1.

 

Таблица 5.1. Таблица истинности J-K триггера

j k ena clk aset aclr q
x x x x      
x x x x      
x x x x     illegal
x x x       Q0
          Q0
           
           
          toggle
x x   x     Q0

illegal - недопустимая комбинация входных сигналов;

Q0 - логический уровень на выходе до прихода синхроимпульса;

∫ - передний (положительный) фронт синхроимпульса;

toggle - переключение выхода в противоположное состояние.

 

При подготовке описания триггера использовать в качестве примера приведенные ниже (лист. 5.2) конструкторский файл для S-R триггера.

 

module srff1(s,r,clk,q);

input s,r,clk;

output reg q;

 

always @(posedge clk)

begin

if (s &!r)

q<=1;

else

if (r &!s)

q<=0;

else

if (r & s)

q<=1'bx;

end;

endmodule;

 

Листинг 5.2. Конструкторский файл S-R триггера

 

2. Используя в качестве примера испытательный файл для S-R триггера (лист. 5.3), подготовить испытательный файл для разработанного J-K триггера, откомпилировать файлы проекта и, промоделировав проект, убедиться в работоспособности триггера или выявить имеющиеся ошибки.

 

module t_srff1;

reg ts,tr,tclk;

wire tq;

srff1 g1(ts,tr,tclk,tq);

initial

begin

tclk=0;

ts=0;

tr=0;

#5 ts=1;

#5 tr=1;

#5 ts=0;

#5 tr=0;

#5 ts=1;

#5 ts=0;

end;

always

#2 tclk = ~tclk;

endmodule;

 

Листинг 5.3. Испытательный файл S-R триггера

 

3. Подготовить на основе конструкторского файла простейшего 4-разрядного регистра сдвига влево (лист. 5.4) параметризированный по разрядности регистр сдвига вправо.

 

module l_shiftreg(sin,d,clk,sload,q,sout);

input [3:0] d;

input sin,clk,sload;

output reg [3:0] q;

output sout;

 

assign sout=q[3];

 

always @ (posedge clk)

begin:m //объявление именованного блока

integer i;

if (sload)

q<=d; //неблокирующее присваивание

else

for (i=0;i<3;i=i+1)

begin

q[i+1]<=q[i];

q[0]<=sin;

end

end

endmodule

 

Листинг 5.4. Конструкторский файл 4-разрядного регистра сдвига влево

 

Регистр должен обеспечивать синхронную параллельную загрузку данных c входа d[w-1:0] по сигналу sload и затем по каждому переднему фронту синхроимпульсов clk сдвигать данные на один разряд в сторону младшего бита (вправо). При этом значение младшего разряда q[0] должно также подаваться на последовательный выход sout. При каждом такте сдвига в старший разряд должно заноситься логическое значение, установленное на последовательном входе sin. В любой момент времени текущее слово данных, сформированное в регистре, должено присутствовать на параллельном выходе q[w-1:0]. На рис. 1. представлено символическое изображение проектируемого регистра сдвига для параметра разрядности w=8.

 

 

Рис. 5.1. Символическое изображение проектируемого регистра сдвига

 

4. Подготовить испытательный файл к проекту регистра сдвига. Сконфигурировать регистр, как 8-разрядный, промоделировать проект.

5. Подготовить отчет. Отчет должен содержать листинги всех конструкторских файлов (на языке Verilog) и рисунки с временными диаграммами входных и выходных сигналов устройств.

 

Контрольные вопросы

 

1. Применение процедурных операторов initial и always в конструкторских файлах.

2. Блочный оператор begin.. end.

3.Управление временем в процедурных операторах(#delay, @(*), wait).

4. Список реагирования оператора always (sensitivity list).

5. Операции процедурного присваивания (=, <=).

6. Оператор процедурного присваивания assign.

7. Оператор deassign.

8. Управляющий оператор if.. else.

9. Управляющий оператор for (;;).

 

Лабораторная работа № 6

 

Введение

 

Цель работы – освоение технологии подготовки проектов комбинационных и последовательностных устройств на основе процедурных операторов initial и always c использованием операторов case и if.

Необходимые сведения

Кроме операторов if.. else и for (см. лаб. работа № 5) внутри процедурных операторов могут применяться также следующие операторы:

- case (выражение)

конст. а: оператор или блок операторов

конст. b, конст. c: оператор или блок операторов

...

default: оператор или блок операторов

endcase – сравнивает результат выражения в круглых скобках с константами а, в, с и т. д. и выполняет оператор или блок операторов, следующий за первой константой, совпадающей с результатом выражения; если не произошло ни одного совпадения с константами, выполняет оператор или блок операторов, следующий за необязательным вариантом default;

- casez – версия оператора case, в которой может быть использовано внутри выражения или константы логическое значение z (значение безразлично) (вместо z возможно применение символа?);

- casex – версия оператора case, в которой могут быть использованы внутри выражения или константы логические значения z и x (значение z может быть также представлено символом?);

- while (выражение)

оператор или блок операторов – циклически выполняет оператор или блок операторов пока выражение в круглых скобках - ИСТИННО; выражение вычисляется вначале каждой итерации;

- repeat (число)

оператор или блок операторов – циклически выполняет оператор или блок операторов, количество итераций определяется числом в круглых скобках, вместо числа может быть выражение, значение которого вычисляется один раз, вначале цикла;

- forever

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

- disable – прерывает выполнение именованного блока операторов.

Кроме блочного оператора begin.. end для моделирования устройств может быть использован еще один блочный оператор:

- fork.. join – группирует операторы в блок параллельно, т. е. операторы внутри блока выполняются одновременно, а все установленные задержки отсчитываются от начала выполнения блока; не является синтезируемым оператором, применяется для моделирования.

Задание

 

1. На языке Verilog в пакете ModelSim с использованием процедурного оператора always и управляющего оператора case создать проект комбинационного устройства, представляющего собой дешифратор для 7-сегментного индикатора с 3-разрядным входом, позволяющий отображать 7 различных символов. Вариант дешифратора выбирается по указанию преподавателя (см. табл. 6.1). Дешифратор должен содержать следующие порты:

- y[2:0] - входной трехразрядный порт для двоичного кода символа;

- f[6:0] - выходной 7-разрядный порт, подключаемый к входам 7-сегментного индикатора (см. рис. 6.1).

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

 

Таблица 6.1. Варианты дешифраторов

y[2:0] Отображаемые символы
                   
3'b000     G b А С        
3'b001     H c Б У A F J U
3'b010   A I d В Х        
3'b011   B J h Г Ч B G L [
3'b100   C L i Е Ь        
3'b101   D O l Н Э C H R ]
3'b110   E P n О Я        

 

2. Подготовить испытательный файл для разработанного дешифратора, откомпилировать файлы проекта и промоделировав проект, убедиться в работоспособности устройства или выявить имеющиеся ошибки.

 

Рис. 6.1. Подключение портов к 7-сегментному индикатору

 

3. Создать на языке Verilog в пакете ModelSim суммирующий двоичный счетчик с модулем счета 7. В проекте использовать процедурный оператор always, управляющий оператор if и выражение с арифметической операцией сложения (см. лабораторная работа № 4 [2]). Счетчик должен быть снабжен следующими входами и выходами:

- clk - вход синхронизации (счетчик должен инкрементировать текущее значение двоичного кода на выходе q[2:0] по каждому положительному фронту импульсов clk);

- ena - вход разрешения счета (1 - счет разрешен; 0 - счетчик хранит на выходе q[2:0] последнее значение);

- q[2:0] - выходные двоичные данные счетчика (при начале счета с нуля на восьмом импульсе clk выход q[2:0] обнуляется, и со следующим импульсом счет начинается сначала).

4. Подготовить испытательный файл для разработанного счетчика, откомпилировать файлы проекта и промоделировав проект, убедиться в работоспособности устройства или выявить имеющиеся ошибки.

5. Подготовить отчет. Отчет должен содержать листинги всех конструкторских файлов (на языке Verilog) и рисунки с временными диаграммами по каждому варианту реализации устройств.

 

Контрольные вопросы

 

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

2. Каким образом обеспечить реагирование оператора always на положительный и отрицательный фронты синхросигнала?

3. Какие элементы списка реагирования оператора always следует использовать для построения комбинационных устройств, а какие для последовательностных? Почему?

4. Перечислите все операторы цикла языка Verilog и отметьте их особенности.

5. Опишите два способа задания изменения во времени сигнала синхронизации в испытательном файле (с использованием оператора цикла и без него).

7. Для каких целей блочный оператор можно снабжать именем?

8. В каких случаях в процедурных операторах следует применять операцию блокирующего процедурного присваивания, а в каких не блокирующего?

9. Что такое комбинационное цифровое устройство?

10. Что такое последовательностное цифровое устройство?

11. Управляющие операторы case, casez и casex.

12. Управляющие операторы while, repeat и forever.

13. Управляющий оператор disable.

 

 

Лабораторная работа № 7

Введение

 

Цель работы – освоение основных приемов работы с САПР Quartus II при использовании текстового описания проекта на языке Verilog. Выполнение процедуры конфигурирования микросхемы ПЛИС.

Необходимые сведения

Одним из вариантов аппаратной реализации проекта цифрового устройства является применение микросхем ПЛИС. При небольшом количестве выпускаемых устройств это может быть самостоятельным техническим решением. При массовом производстве устройств предварительное выполнение проекта на базе ПЛИС может быть осуществлено на этапе аппаратных испытаний прототипа. После чего выпуск устройств реализуется в виде серии заказных микросхем.

Перед компиляцией проекта и его конфигурированием в конкретной микросхеме ПЛИС необходимо сформировать описание функциональной сущности устройства средствами, приемлемыми для восприятия пакетом САПР выбранного производителя. Для микросхем фирмы Altera таким пакетом является продукт Quartus II. Этот пакет позволяет описывать проект следующими способами:

- на языке AHDL (собственный низкоуровневый язык фирмы Altera);

- в виде блок-схемы проекта, подготовленной в графическом редакторе САПР Quartus II с использованием библиотек пакета;

- в виде описания в формате обмена электронными проектами (EDIF);

- на языке SystemVerilog;

- на языке Verilog;

- на языке VHDL.

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

Для того чтобы реализовать проект цифрового устройства, подготовленный на одном из языков высокого уровня, необходимо последовательно задействовать четыре основных модуля САПР Quartus II.

1. Модуль "Analysis & Synthesis" ("Анализ и Синтез") - проверяет конструкторские файлы проекта на наличие синтаксических ошибок и создает единую базу данных проекта, объединяющую все файлы в общую иерархическую структуру. Минимизирует логические функции проекта и выполняет проект в базисе имеющихся в выбранной микросхеме ресурсов (логических элементов, блоков памяти и т. п.).

2. Модуль "Fitter" ("Установщик") - размещает ("Place") элементы проекта в выбранной микросхеме и осуществляет "разводку" ("Route") электрических соединений между ними (виртуально).

3. Модуль "Assembler" ("Сборщик") - формирует на базе данных модуля "Fitter" и данных о подключении портов устройства к конкретным выводам микросхемы (номерам контактов) программный образ проекта, который должен быть загружен при конфигурировании во внутреннюю память ПЛИС. Сформированные данные помещаются в файл одного из следующих форматов:

- Programmer Object File (*.pof) для микросхем типа CPLD, в которых конфигурационные данные хранятся в памяти EEPROM, находящейся внутри ПЛИС (не теряются после выключения питания);

- SRAM Object File (*.sof) для микросхем типа FPGA, в которых конфигурационные данные хранятся во внешней по отношению к ПЛИС памяти flash и загружаются во внутреннюю память SRAM автоматически при включении питания.

4. Модуль "Programmer" ("Программатор") - обеспечивает в комплекте с загрузочным устройством (Byte-Blaster MV, USB-Blaster и др.) физическое конфигурирование микросхемы ПЛИС или конфигурационной микросхемы flash-памяти, устанавливаемой на одной печатной плате с микросхемой ПЛИС типа FPGA.

Задание

При выполнении задания необходимо руководствоваться приложением А.

1. Используя подготовленные в лабораторной работе № 6 модули счетчика и дешифратора, создать в САПР Quartus II проект на языке Verilog, реализующий приведенную на рис. 7.1 схему. Перед компиляцией проекта необходимо указать в какой микросхеме ПЛИС он будет реализован. Для используемой в лабораторной работе отладочной платы DE2-115 это микросхема EP4CE115F29 семейства Cyclone IV E с 780 выводами. Кроме этого необходимо назначить входным и выходным портам устройства требуемые номера выводов, с тем, чтобы эти порты подключились на плате к соответствующим элементам схемы.

Обозначения выводов микросхемы, подключенных к соответствующим элементам, приведены в документации на плату DE2-115 [13]. Входной порт clk необходимо подключить к одной из кнопок (key0.. key3), входной порт ena - к одному из переключателей (sw0.. sw17), а выходную шину f[6:0] – к одному из 7-сегментных индикаторов (hex0.. hex7). (Номера используемых элементов указываются преподавателем). При таком подключении выводов микросхемы при подаче напряжения логической 1 на вход ena однократное нажатие на кнопку вызовет увеличение выходного значения счетчика на единицу и, соответственно, смену отображаемого 7-сегментным индикатором символа на следующий по порядку (см. табл. 6.1).

 

 

Рис. 7.1. Схема демонстрационного устройства для аппаратной реализации

 

2. После успешной компиляции проекта необходимо подключить отладочную плату DE2-115 к USB порту компьютера и блоку питания. Осуществить загрузку конфигурации проекта в микросхему, пользуясь утилитой "Programmer". Убедиться в работоспособности аппаратной реализации разработанного устройства путем подачи сигналов с кнопки и переключателя.

3. Подготовить отчет. Отчет должен содержать листинги всех конструкторских файлов (на языке Verilog).

 

Контрольные вопросы

 

1. Какие способы ввода логики проекта поддерживает САПР Quartus II?

2. Какие физические процессы происходят при конфигурировании (программировании) микросхемы ПЛИС?

3. Что необходимо для конфигурирования микросхем CPLD?

4. Что необходимо для конфигурирования микросхем FPGA?

5. Какое количество логических элементов занимает в микросхеме разработанное устройство? Почему?

6. Для чего необходимо принудительно назначать номера выводов микросхемы портам устройства?

7. На какой стадии обработки данных проекта пакетом САПР Quartus II могут быть получены реальные данные о временных задержках сигналов между отдельными портами устройства?

8. Для чего необходимо указывать в проекте конкретную микросхему ПЛИС?

9. В каких случаях целесообразно использовать ПЛИС в качестве электронной компонентной базы?

 

 

Лабораторная работа № 8

Необходимые сведения

В пакете Quartus II содержится большое количество готовых параметризированных (настраиваемых на конкретную задачу) цифровых модулей, которые могут быть успешно использованы в проектах на языке Verilog. Среди них есть и такие, без которых применение некоторых аппаратных возможностей ПЛИС фирмы Altera не представляется возможным. Это, в частности, модули формирования и передачи синхроимпульсов.

Для включения библиотечных модулей пакета Quartus II в проект, представляемый на языке Verilog, необходимо сделать следующее.

1. Сконфигурировать выбранный модуль в соответствии с требуемыми параметрами с помощью утилиты "MegaWizard Plag-In Manager" пакета Quartus II. При этом в первом диалоговом окне утилиты выбрать в качестве языка описания модуля Verilog HDL и дать будущему файлу желаемое имя.

2. Поместить сформированный файл с описанием модуля на языке Verilog в папку разрабатываемого проекта и в пакете Quartus II подключить файл к проекту.

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

 

Для обеспечения цифровых устройств различными синхросигналами в ПЛИС семейства Cyclone IV предусмотрены два вида аппаратных блоков. Блоки ALTPLL предназначены для синтеза синхросигналов с требуемыми параметрами (до 5 сигналов) на базе внешнего входного синхросигнала. Блоки ALTCLKCTRL предназначены для транспортировки синхросигналов по выделенным (без ключей) линиям, что обеспечивает поступление фронтов сигналов к различным частям микросхемы без временного сдвига.

 

Задание

1. Подготовить конструкторский файл модуля, реализующий устройство на базе проекта, разработанного в лабораторной работе № 7. Внести в этот проект изменения в соответствии со схемой, представленной на рис. 8.1. А именно, заменить источник входных импульсов счетчика count1, подключив вместо кнопки синхросигнал c0, формируемый модулем ALTPLL (pll01 на рис. 8.1). Этот синхросигнал с помощью модуля ALTCLKCTRL (cclk01 на рис. 8.1) направить по глобальной линии синхронизации. Дополнительно, используя вход clkselect[1:0] модуля ALTCLKCTRL, обеспечить возможность изменения частоты синхронизации выбором второго синхросигнала c2 с выхода модуля ALTPLL.

Поскольку в модуле ALTPLL есть ограничение по минимальному значению выходных частот, то в качестве этих значений выбрать 1 и 5 МГц, а для приведения частоты смены символов на 7-сегментном индикаторе к пригодной для визуального наблюдения величине (1 и 5 Гц) установить перед счетчиком импульсов делитель частоты синхросигналов с соотношением 1000000:1 (div10_6 на рис. 8.1). Делитель частоты спроектировать на базе библиотечного модуля LPM_COUNTER пакета Quartus II.

В соответствии со схемой представленной на рис. 8.1. проектируемое устройство должно быть снабжено следующими 4 портами:

 

 

Рис. 8.1. Схема проектируемого устройства

 

- clk – входной порт для ввода исходного синхросигнала частотой 50 МГц от внешнего генератора (подключение к линии CLOCK_50 на плате DE2-115);

- sel[1..0] – входной 2-разрядный порт для выбора блоком cclk01 (ALTCLKCTRL) одного из двух синхросигналов, поступающих с блока pll01 (ALTPLL) (подключение к двум переключателям SWxx на плате DE2-115);

- ena – входной порт для сигнала разрешения работы счетчика, позволяющего разрешать или блокировать работу счетчика, и, тем самым, активизировать или останавливать процесс смены символов на 7-сегментном индикатор (подключение к переключателю SWxx на плате DE2-115);

- f[6:0] – выходной 7-разрядный порт для подключения 7-сегментного индикатора (HEXxx на плате DE2-115).

2. Произвести назначение выводов микросхемы EP4CE115F29 в соответствии с документацией на отладочную плату DE2-115 и откомпилировать проект.

3. Загрузить проект в микросхему ПЛИС отладочной платы и, пользуясь переключателями, убедиться в его работоспособности.

4. Подготовить отчет. Отчет должен содержать листинги всех конструкторских файлов (на языке Verilog).

 

Контрольные вопросы

 

1. Какова последовательность действий для включения библиотечных параметризированных модулей пакета Quartus II в проект, представляемый на языке Verilog?

2. Какова последовательность действий для включения модулей, описанных на языке Verilog, в проект представляемый в виде блок-схемы в графическом редакторе пакета Quartus II?

3. Каково назначение синхронизации в цифровых устройствах?

4. Каково назначение аппаратного модуля ALTPLL микросхем семейства Cyclone IV?

5. Каково назначение аппаратного модуля ALTCLKCTRL микросхем семейства Cyclone IV?

6. Назначение всех возможных входных портов модуля ALTPLL.

7. Назначение всех возможных входных портов модуля ALTCLKCTRL.

8. Какие параметры формируемых синхросигналов позволяет устанавливать модуль ALTPLL?

9. Общий алгоритм проектирования цифровых устройств на ПЛИС.

10. Отличия в алгоритмах проектирования ПЛИС и заказных микросхем.

 

 

А.1. Открытие проекта

1. Включить приложение Quartus II.

2. В появившемся окне "Getting Started With Quartus® II Software" ("Приступить к Работе в САПР Quartus II") щелкнуть по кнопке "Create a New Project (New Project Wizard)" ("Создать Новый Проект (Мастер Новых Проектов)"). В случае если окно "Getting Started With Quartus® II Software" не появляется автоматически, следует выбрать в главном меню команду "File\New Project Wizard…" ("Файл\Мастер Создания Проекта…"). В появившемся окне "New Project Wizard: Introduction" ("Мастер Создания Проекта: Введение") щелкнуть по кнопке "Next" ("Следующий шаг").

Далее в тексте слова "щелкнуть по кнопке Ok" означают: навести курсор мыши на кнопку Ok и однократно нажать и отпустить левую кнопку мыши. Если необходимо щелкнуть правой кнопкой, то это будет указываться явно: "щелкнуть правой кнопкой мыши…"

3. В появившемся окне "New Project Wizard: Directory, Name, Top-Level Entity [page 1 of 5]" ("Мастер Создания Проекта: Папка, Имя, Модуль Верхнего Уровня [страница 1 из 5]") щелкнуть по кнопке с тремя точками справа от верхнего поля ввода и в новом окне "Select Directory" ("Выбрать Папку"), переместившись в желаемое место на диске, создать новую папку для открываемого проекта, если она не была подготовлена заранее, и выделить ее. После этого щелкнуть по кнопке "Choose" ("Выбрать") окна "Select Directory".

4. После возвращения в окно "New Project Wizard: Directory, Name, Top-Level Entity [page 1 of 5]", убедиться в том, что в верхнем поле ввода занесен полный маршрут (последовательность папок) ко вновь созданной папке. Пользуясь стандартными средствами Windows, скопировать только имя папки и вставить его в нижерасположенные поля ввода: "What is the name of this project?" ("Какое имя у этого проекта?") и "What is the name of the top-level design entity for this project?" ("Какое имя у модуля верхнего уровня этого проекта?"). После этого щелкнуть по кнопке "Finish" ("Завершение"). Параметры проекта, которые устанавливаются на последующих страницах (pages) окна "New Project Wizard: Directory, Name, Top-Level Entity [page 1 of 5]" можно будет установить позже, поэтому эти страницы следует пропустить.

Позже, в начале каждого последующего сеанса работы с созданным проектом необходимо выбрать в главном меню команду "File\Open Project…" ("Файл\Открыть Проект…"). В появившемся окне "Open Project" найти папку проекта и, выделив файл проекта (*.qpf), щелкнуть по кнопке "Open" ("Открыть").

 

Б.1. Параллельность

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

- экземпляры (instances) модулей;

- экземпляры примитивов;

- операторы непрерывного присваивания (assign);

- процедурные операторы (initial и always).

 

Б.2. Лексические правила

Прописные и строчные буквы являются различными символами.

Комментарии в стиле языка С:

- //это однострочный комментарий;

- /*это многострочный

комментарий*/

Имена разработчика должны формироваться по следующим правилам:

- могут содержать символы a-z A-Z 0-9 _ $;

- должны начинаться с буквы или знака подчеркивания a-z A-Z _;

- могут содержать любые символы, если начинаются с обратной косой черты \ и заканчиваются пробелом;

- имена, обозначающие массивы экземпляров модулей и т. п. могут содержать квадратные скобки [ ].

Иерархические имена (hierarchical path names) позволяют обращаться к цепям, переменным, задачам и функциям в любом месте проекта:

- полное иерархическое имя состоит из имени модуля верхнего уровня, далее последовательно из имен экземпляров вложенных в него модулей нижнего уровня по иерархии до последнего, в котором описан интересующий объект и, наконец, из имени объекта; составляющие имени отделяются друг от друга точкой;

- относительное имя состоит из имени экземпляра модуля, объявленного в текущем модуле, далее последовательно из имен экземпляров вложенных в него модулей нижнего уровня по иерархии до последнего, в котором описан интересующий объект и, наконец, из имени объекта; составляющие имени отделяются друг от друга точкой.

Б.3. Литеральные константы

Литеральными константами называются константы, представленные собственным значением и не имеющие имени.

1. Логические константы (табл. Б.1) представляют собой значения, которые могут принимать одноразрядные объекты (линии, регистры, порты).

 

Таблица Б.1. Логические литеральные константы языка Verilog

Константа Описание
  ноль, низкий уровень, ложь
  единица, высокий уровень, истина
z или Z высокий импеданс, третье состояние
x или X неизвестно или не инициализировано

 

2. Целые константы (integer numbers







Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам...

Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...

ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования...

ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.