Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Создание модуля делителя частоты





Для создания модуля делителя частоты воспользуемся структурным стилем описания устройства. В качестве делителя используем синхронный счетчик со сквозным переносом, фрагмент схемы которого представлен на рис. 6. Так как счетчик состоит из одинаковых модулей, с точки зрения создания компактного описания целесообразно использовать конструкцию generate [21 Ошибка! Источник ссылки не найден. ].

Рисунок 6 - Схема счетчика со сквозным переносом

Создайте файл divider.vhd и создайте в нем описание устройства, показанное ниже.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity ANDE is

port (

X1,X2: in std_logic;

Y:out std_logic

);

end ANDE;

architecture ANDA of ANDE is

begin

Y<=X1 and X2;

end ANDA;

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity JFF is

port (

J,C,R: in std_logic;

Q: inout std_logic

);

end JFF;

architecture JK of JFF is

begin

process (C,R)

begin

if R='1' then

Q <= '0';

elsif (C'event and C='1') then

if J='1' then Q <= not Q;

end if;

end if;

end process;

end JK;

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity divider is

generic (Nd: integer:= 24);

Port (Clock: in std_logic;

Clk_led: out std_logic;

Clk_deb: out std_logic;

reset: in std_logic);

end divider;

architecture Behavioral of divider is

component JFF

port (J,C,R: in std_logic;

Q: inout std_logic);

end component;

component ANDE is

port (

X1,X2: in std_logic;

Y: out std_logic

);

end component;

signal T,V: std_logic_vector(0 to Nd);

begin

T(0)<='1';

Clk_deb<=V(3);

Clk_led<=V(4);

ST0: JFF port map(J=>T(0),C=>Clock,R=>reset,Q=>V(1));

JK1: for i in 1 to Nd-1 generate

begin

ST1: ANDE port map(X1=>T(i-1),X2=>V(i),Y=>T(i));

ST2: JFF port map(J=>T(i),C=>Clock,R=>reset,Q=>V(i+1));

end generate;

end Behavioral;

Обратите внимание на конструкцию generic, позволяющую легко менять разрядность создаваемой структуры, а также на искусственный прием, позволивший компактно описать структуру делителя, несмотря на наличие в ней неоднородных элементов (первый триггер). Выходные сигналы делителя подключены к третьему и четвертому триггерам с целью упрощения контроля работоспособности устройства (небольшой коэффициент деления), в дальнейшем их подключение необходимо скорректировать с учетом требуемого коэффициента деления входной частоты в соответствием с типом отладочной платы 50 или 100 МГц (необходимые частоты на выходе – порядка сотен герц, см. рис. 5). Сохраните сделанные изменения, добавьте файл в проект и проверьте синтаксис аналогично тому, как было сделано при создании модуля реверсивного счетчика. Затем добавьте элемент на схему.

Создание модуля мультиплексора

Для модуля mux найдите и используйте шаблон в соответствии с следующим описанием: требуется мультиплексор, имеющий 4 входных вывода шириной 4 бита, один выходной шириной 4 бита и один управляющий шириной 2 бита. В зависимости от сигнала на управляющем выводе, на выход подключается один из входных выводов.

Создание схемы верхнего уровня

Внесите все необходимые компоненты на рабочее поле схемы и соедините их проводниками «Add/wire». При работе с шинами используйте тот же инструмент, что и для отдельных проводников, разрядность шины будет определена автоматически. При подключении к шине отдельных проводников или шин меньшего размера используется специальный элемент «Add/Bus Tap». После подключения необходимо задать соединение проводников в шине. Для этого используйте одинаковые имена шин, а в скобках указывайте номера проводников, к которым данная шина подключается (например, 16-разрядная шина Bus1(15:0) – к ней подключены четыре 4-разрядных шины Bus1(15:12), Bus1(11:8), Bus1(7:4) и Bus1(3:0)).

Выводы устройства должны быть снабжены маркерами (команда меню «Add I/O Marker» или кнопка из панели инструментов). Созданным маркерам следует дать осмысленные имена (латинскими символами) для удобства идентификации, при этом соответствующие цепи автоматически получат те же идентификаторы. При желании можно также именовать внутренние цепи («Add Net Name»). При выделении отдельных проводников из созданной шины необходимо указать их имена, например, для шины S имена отдельных проводников могут быть - S(0), S(1). Для переименования можно использовать команду «Rename Selected Net» контекстного меню. Неиспользуемые входы подключим к земле или питанию (стандартные элементы «VCC» и «GND»).

Отладка устройства

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

 

Отладка модулей устройства

Отладку отдельных модулей проиллюстрируем на примере «самодельного» делителя частоты. Здесь действуем аналогично отладке триггера в лабораторной работе №1, не забывая про наличие асинхронного сигнала сброса. Поведение устройства исследуем с помощью процесса «Simulate Behavioral Model». Рекомендуемая тестовая последовательность представлена на рис. 7.

Рисунок 7 – Временные диаграммы тестирования модуля divider

Выходные сигналы делителя подключены к третьему и четвертому триггерам с целью упрощения контроля работоспособности устройства (небольшой коэффициент деления), в дальнейшем их подключение необходимо скорректировать с учетом требуемого коэффициента деления входной частоты 100 МГц (необходимые частоты на выходе – порядка сотен герц). Сохраните сделанные изменения.

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

Проведите тестирование модуля rcounter самостоятельно.

Реализация проекта

Реализация проекта в данном случае производится аналогично лабораторной работе №1. Отличия заключаются в необходимости подключения выводов ПЛИС в соответствии с электрической схемой отладочной платы (Spartan6 или Spartan3). Перед началом подключения выводов ПЛИС уточните тип отладочной платы, который вы будете использовать и при необходимости внесите изменения в настройки проекта (тип ПЛИС и тип ее корпуса). Для отладочной платы S3 с FPGA Spartan-3 используется микросхема xc3s200 в корпусе ft256. При работе с CPLD и FPGA имеются некоторые отличия, связанные с архитектурой этих ПЛИС, рекомендации по конкретным деталям содержатся в [21 Ошибка! Источник ссылки не найден.,60].

Работа с отладочной платой

При выполнении лабораторной работы используется отладочная плата Nexys3 с FPGA Spartan-6 или S3 с FPGA Spartan-3. На плате имеются необходимые периферийные модули, подключение которых описано в [6,9 Ошибка! Источник ссылки не найден. ]. Электрические принципиальные схемы платы содержатся в [7,8 Ошибка! Источник ссылки не найден. ]. При работе с отладочной платой следует помнить, что FPGA не содержат конфигурационного ПЗУ на кристалле и должны программироваться из внешней памяти. Таким образом, при работе c FPGA файл «прошивки» может быть загружен непосредственно в микросхему при включенном питании, либо в конфигурационное ПЗУ (FLASH EEPROM), расположенное на плате. В процессе отладки рекомендуется загружать данные непосредственно в ПЛИС.

Как FPGA, так и CPLD поддерживают различные режимы конфигурации входных/выходных буферов, причем эти режимы задаются программно при компиляции проекта. При выборе режима следует помнить, что все периферийные устройства, имеющиеся на отладочных платах, подключены к напряжению +3.3В, таким образом, не следует выбирать режим с меньшим напряжением. При работе с отладочной платой рекомендуется «оставить все как есть», ничего не указывая в поле «I/O Std.».

Конфигурация FPGA

Для записи конфигурационной информации в микросхему необходимо, чтобы плата была подключена к компьютеру (через USB-порт или LPT), а также включено напряжение питания переключателем или с помощью внешнего блока питания.

ВНИМАНИЕ! Перед подключением платы к компьютеру необходимо снять статическое электричество, прикоснувшись рукой к корпусу компьютера.

Для записи файла прошивки в FPGA следует выполнить следующие действия:

1. Выделить на вкладке «Design» в окне «Hierarchy» модуль схемы, в списке процессов выбрать группу «Generate Programming Files», щелкнуть правой кнопкой мыши и выбрать из контекстного меню «Properties»;

2. В диалоге «Process Properties» выбрать вкладку «Startup Options» и установить значение параметра «FPGA Start-up Clock» - JTAG Clock. Таким образом включается правильный источник синхросигнала для процесса записи конфигурации;

3. Проверить значение параметра «Security» во вкладке «Readback Options», необходимое значение – «Enable Readback and Reconfigure»;

4. Проверить значение параметра «Create Bit File» во вкладке «General Options» - эта опция должна быть отмечена галочкой;

5. Закрыть диалоговое окно и активизировать процесс «Manage Configuration Project (Impact)». Если ошибок на предыдущих этапах не обнаружено, в открывшемся окне программы конфигурирования необходимо выбрать и запустить группу «Boundary-Scan». Затем, в открывшемся поле справа необходимо кликнуть правой кнопкой мыши и выбрать «Add Xilinx Device», в открывшемся окне укажите путь к вашему файлу с расширением.bit., после чего откроется окно, вид которого показан на рис. 9. ВНИМАНИЕ! При наличии ошибок на этом этапе необходимо обратиться к преподавателю;

Рисунок 9 – Окно процесса записи конфигурации

6. В верхней части экрана изображено устройство, программирование которого может производиться посредством интерфейса JTAG. В данном случае это должна быть ПЛИС (XC6SLX16 или XC3S200). Активизируйте контекстное меню щелчком правой клавиши мыши;

7. В контекстном меню выберем пункт «Program», после чего откроется диалоговое окно программирования. Для ускорения процесса откажемся от проверки (снять флажок «Verify») и нажмем «ОК». По окончанию процесса программирования конфигурационная информация будет переписана в ПЛИС;

 


 

Контрольные вопросы к лабораторной работе №2

1. Как Вы понимаете выражение "иерархическая структура проекта"?

2. Для чего служит модуль debounce в разработанной схеме?

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

4. Чем отличается поведенческий стиль описания устройства от структурного?

5. В каких случаях целесообразно использовать конструкцию "generic"?

6. Поясните смысл понятия "процесс" в VHDL

7. Поясните разницу между сигналом и переменной в VHDL

8. В чем основное отличие FPGA от CPLD?

9. Как хранится информация о конфигурации в FPGA и CPLD?

10. Что такое интерфейс JTAG, как он используется при разработке цифровых устройств на базе ПЛИС?

11. Определите нижнюю и верхнюю границы частоты сигналов clk_deb и clk_led, при которых схема работает удовлетворительно. На что влияют эти частоты?

 







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

Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...

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

Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право...





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


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