Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

6.3 Пример проектирования




 

Чаще всего разработчик получает от заказчика пожелания на разрабатываемое изделие в самом общем виде. Практически любое ТЗ (техническое задание) требует совместной работы заказчика и проектировщика над заданием. Пусть заказчик просит разработать устройство, которое обеспечивает умножение двух двоичных кодов Din1, Din2. Уточняем, что достаточно умножать 4-х разрядные коды (хотя в дальнейшем может потребоваться увеличение разрядности одного или даже обоих операндов), а результат должен быть 8 разрядов. Устройство необходимо реализовать на ПЛИС с минимальными аппаратными затратами и со средними временными параметрами. Анализируя различные способы реализации устройства, приходим к алгоритму умножения двух n-разрядных чисел в позиционном двоичном представлении, которое представляется соотношением:                                 

                                (6. 1)

где x – множимое, yi – i-ый разряд множителя (нумерация с младших разрядов), Z – произведение.

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

Повторяющиеся вычисления (в данном случае накопление суммы) удобно приводить к рекуррентной форме:

z = 0; i = 0;

xp= x; yp= y;                                                                                (6. 2)

metka: z= z+ xp · yp(i);

xp = xp · 2;

i = i + 1;

if i < n goto metka;,

где i = от 0 до n – 1 – номер шага исполнения команды.

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

В рассматриваемом примере проблемы интерфейса могут выглядеть, например, следующим образом. Работа устройства осуществляется тактировано. Входной сигнал тактирования Clk. В исходное состояние устройство переходит при подаче сигнала Reset, длительность сигнала 2 такта. Напомним, что отказ от начального сброса может привести к тому, что при включении система окажется в неопределенном, или даже запрещенном состоянии, и будет неработоспособна.

Будем ориентироваться на создание описания, максимально пригодного для синтеза устройства произвольной разрядности, определяя разрядность операндов как параметр настройки ( GENERIC m: INTEGER ). Сомножители подаются не мультиплексировано, а параллельно по двум специально выделенным шинам. Каждый цикл работы устройства начинается после подачи сигнала Start, значения входных данных должны быть установлены до подачи сигнала Start и стабильны в течение не менее двух тактов. Пара сигналов Start и Busy образуют пару квитирующих сигналов (как было описано выше) для входной информации. Изменение сигнала Busy говорит о том, что система приступила к решению поставленной задачи. О готовности выходных данных говорит сигнал Ready, выдаваемый устройством после завершения планируемых преобразований. Разрядность выходных данных – 2 × n бит. Выходные данные остаются стабильными, до тех пор, пока не будет получен от приемника данных ответный сигнал Ack, по которому сбрасывается флаги Ready и Busy, а процедура преобразования может быть повторена. Пара сигналов Ready и Ack образуют пару квитирующих сигналов, предназначенных для синхронизации разрабатываемого устройства с приемниками результатов преобразования входной информации.

Рис. 6. 1 Интерфейс разрабатываемой системы

 

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

Если заказчика устраивает подобная формулировка задания на устройство, то можно переходить к разработке собственно операционного устройства. Ранее были разработаны и широко применялись формальные методы перехода от обобщенного алгоритмического задания системы к структуре операционного блока [10] и [11]. В основе методов перехода лежит представление схемы обобщенного алгоритма совокупностью последовательно исполняемых операторов: так называемых операторных вершин, отображающих преобразования данных, и условных вершин, отражающих проверки входов и результатов исполнения предыдущих шагов с целью выбора пути продолжения исполнения. На основании анализа требуемого набора операторов выделяют набор используемых функциональных модулей. Операторная вершина может содержать либо одну, либо несколько совместимых во времени операций. Объединение нескольких операций в одной операторной вершине соответствует их одновременному исполнению и может стать средством повышения производительности проектируемого устройства. С другой стороны, разнесение совместимых операций в несколько последовательных операторных вершин позволяет реализовать их исполнение на одних и тех же компонентах, т. е. сократить количество оборудования за счет потери быстродействия. Последним этапом разработки является создание алгоритма управляющего конечного автомата. Общее правило разметки состояний состоит в следующем [11]: входу каждой вершины схемы алгоритма, следующей за операторной, сопоставляется состояние управляющего автомата. Составление схемы алгоритма достаточно интуитивно.

Современные системы автоматического проектирования существенно упростили процедуру проектирования особенно для систем средней степени сложности. Для определения состава операционного блока необходимо, анализируя требуемый набор действий и сопоставляя его с набором возможных реализаций в целевой микросхеме и библиотеке САПР, выбирать набор операционных регистров и преобразователей. Для реализации совокупностей операций, не представленных в библиотеке, следует предусмотреть разработку специализированных блоков, предполагая их описание в процессе создания проекта. Как правило, выбор не однозначен. Прежде всего, существует два варианта выбора: описание, хранящееся в библиотеке САПР, или функциональное описание интересующего элемента самим разработчиком. В первом случае библиотеки хранят оптимизированные под данное семейство (а иногда и данного типа ИС) описания. Работа с библиотечными элементами, как правило, поддерживается специальными программами – менеджерами. Подробное описание элементов часто даже не включается в проект и не затрудняет чтение всего проекта. Во втором варианте разработчик в большинстве случаев создает обобщенное и не учитывающее специфических особенностей ИС описание элемента предлагаемого к реализации в выбранном проекте. Вместе с тем, разработчик может создать описания одного и того же элемента с различной степени детализации. Чем ниже уровень описания оборудования, тем больше гибкость проектировщика в выборе окончательных решений, однако, при этом может резко возрастать текстовая сложность описания проекта. Более глубокое участие проектировщика в разработке отдельных узлов системы (при наличии соответствующей квалификации) позволяет, как правило, реализовать более эффективную систему (наибольший выигрыш в этих ситуациях достигается во временной области, а не в объеме затраченной аппаратуры), хотя и ценой больших временных затрат на само проектирование. В любом случае каждый операционный блок устройства должен иметь своё VHDL описание, кроме того, потребуется VHDL описание устройства управления, VHDL описание устройства целиком. Также необходимо описание структуры тестирующей системы (краткие сведения о разработке такого описания см. в разд. 3).

При разработке структуры проекта операционные устройства и их свойства прямо следуют из анализа базового алгоритма (формулы 6. 1 и 6. 2). В структуре устройства, во-первых, лучше всего определить два приемных регистра данных. Если даже потребовать от заказчика стабильности данных одного из операндов, то потребуется мультиплексор для смещения данных. Альтернативный вариант может ориентироваться на два регистра сдвига для двух операндов (и Reg_Shift_R). В качестве регистра xp (множимого) удобно выбрать загружаемый регистр сдвига со сдвигом в сторону старших разрядов (Reg_Shift_L). В качестве регистра yp (множителя) необходимо выбрать загружаемый регистр сдвига со сдвигом в сторону младших разрядов (Reg_Shift_R). В этом случае бит множителя, учитывающийся в алгоритме, в каждом текущем цикле будет размещаться в младшем разряде регистра (Bit_Multi). Умножение  содержимого на этот бит реализуется выбором пути в алгоритме – выполнять или не выполнять прибавление частных произведений (Partial_Sym). Для суммирования в данном устройстве необходим регистр-аккумулятор (в алгоритме – z ), накапливающий частные произведения (Reg_Accum). Важность этого элемента (вернее важность его быстродействия) для свойств всего проекта заставляет ориентироваться на библиотечный вариант реализации. Естественно, в схеме необходим счетчик тактов умножения (Count_Bit), вырабатывающий сигнал Equal_Zero, который сигнализирует об окончании процедуры умножения. Последним (в рассмотрении, но не в важности) является автомат, управляющий работой системы (Cnt_Avt). Окончательная структурная схема множительного устройства приведена на рис. 6. 2.

 

 

 

Рис. 6. 2. Структурная схема умножителя

 

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

Работа умножителя выполняется под управлением автомата, алгоритм работы которого приведен на рис. 6. 3. Рисунок соответствует внешнему виду задания описания автомата в графическом редакторе САПР HDL Designer Series фирмы Mentor Graphics. Из внешнего вида автомата видно, что это классический вариант автомата Мура. Для всех 4-х выходных сигналов можно выбрать комбинационные схемы их формирования с нулевыми значениями по умолчанию. После поступления запускающего сигнала Start начинается работа системы. Сигнал Load, формируемый в первом рабочем состоянии Unit, играет роль сигнала фиксирующего входные данные в регистрах Reg_Shift_L и Reg_Shift_R. Переход в состояние Unit приводит к установлению в 1 сигнала Busy, сигнализирующего о начале работы системы. Дальше автомат переходит к циклическому исполнению состояния Count, в ходе исполнения которого выполняются действия по реализации алгоритма суммирования в соответствии с формулой (6. 1). При этом прибавлением частных произведений к результату управляет сигнал Bit_Multi с подсчетом в счетчике Count_Bit числа выполненных тактов до достижения последнего (сигнал Equal_Zero). После этого осуществляется переход в состояние Final с формированием выходного сигнала Ready, сигнализирующего о готовности результата. Из состояния Final автомат переходит в исходное состояние после поступления сигнала Ack. После перехода сбрасывается сигнал занятости системы Busy.

 

 

Рис 6. 3 Алгоритм работы устройства управления умножителя

 

Рассмотрим особенности реализации на языке VHDL основных узлов системы.

Программа (листинг 6. 1), описывающая регистр сдвига вправо Reg_Shift_R, достаточно традиционна и выполнена в соответствии с рекомендациями раздела 4 в форме двух операторов. Первый параллельный оператор PROCESS используется для описания запоминающей части регистра. А второй, параллельный оператор назначения сигнала, определяет комбинационную часть регистра. Третий оператор программы служит для определения интерфейсного сигнала схемы – Bit_Multi. Новым элементом программы является определение параметра настройки ( GENERIC m: INTEGER ), который позволит изменять разрядность всех элементов схемы путем изменения значения лишь в одной декларации файла верхнего уровня иерархии. Другой новой синтаксической конструкцией является фрагмент ( OTHERS => '0'), позволяющий задать значение константе заранее неизвестной размерности.

Листинг 6. 1

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...