Частотомеры, работающие по методу определения периода.
В завершение обзора частотомеров рассмотрим структурную схему частотомеров, реализующих метод изменения периода. Как было отмечено выше, реализация данных частотомеров требует наличия операции деления.
Рассмотрим структурную схему частотомера, работающего по методу измерения периода, представленную на рис 4.6.4.
Значение частоты
Рис 4.6.4. Структурная схема частотомера, работающего по методу измерения периода.
Схема, представленная на рис 4.6.4. работает следующим образом: Блок управления по положительному фронту входной неизвестной частоты FI сбрасывает счётчик импульсов опорной частоты (подаёт короткий импульс на вход RN) и подаёт сигнал разрежения счёта на вход ENA. При приходе отрицательного фронта FI работа счётчика блокируется (на вход ENA подаётся запрещающий сигнал). Кроме того в этот же момент на вход записи информации С выходного регистра подаётся сигнал записи длительностью достаточной для выполнения процедуры деления. На выход выходного регистра Q выдаётся последняя рассчитанная частота.
Умножители
Умножители являются достаточно сложными электронными блоками, особенно если речь идёт об умножении много разрядных чисел. При работе с числами небольшой разрядности операцию умножения можно свести к табличному вычислению функций. Так, например, для умножения четырехразрядных чисел достаточно организовать таблицу умножения в виде ПЗУ объемом 256 байт. При этом получается очень высокое быстродействие и минимальное количество проблем при разработке схемы.
Для работы с восьмиразрядными числами потребуется ПЗУ объёмом 64К шестнадцатиразрядных слов, что уже может создать определённые проблемы. Задачу построения много разрядных умножителей часто решают методом последовательного умножения. При таком подходе операция умножения много разрядных чисел сводится к нескольким задачам умножения четырёхразрядных чисел. Например, для восьмиразрядных чисел, этот метод можно проиллюстрировать следующим выражением:
result[15..0] = a[7..0]*b[7..0]= a[7..4]*b[7..4]*28 + a[7..4]*b[3..0]*24 + a[3..0]*b[7..4]*24 + a[3..0]*b[3..0]
В соответствии с этим методом два восьмиразрядных операнда a[7..0] и b[7..0] разбиваются на четыре четырёхразрядных операнда a[7..4], a[3..0], b[7..4] b[3..0] и их умножение осуществляется за четыре такта.
Структурная схема такого умножителя приведена на рис 4.7.1.
Умножитель имеет следующие входные и выходные сигналы:
CLK – вход тактового сигнала, синхронизирующий работу умножителя Start – вход запуска; Reset – вход сброса; A[7..0] -вход данных первого множителя; B[7..0] -вход данных второго множителя; Result[15..0] – выход результата; Done_flag -выход квитирования результата, при Done_flag=1 на выходе Result[15..0] должен быть результат умножения.
a[3..0] a[7..4]
sel[1]
a[3..0] b[7..4]
result[15..0]
CLK Start DONE_FLAG CLKEN Рис 4.6.1. Структурная схема такого умножителя восьмиразрядных чисел. Как видно из рис 4.6.1, в состав умножителя входят:
· два четырехразрядных мультиплексора MUX4_2_1; · комбинационная схема сдвига данных – SHIFTER; · шестнадцатиразрядный, накапливающий сумматор – ACCUM; · счётчик тактов – COUNTER; · блок управления CONTROL; · блок умножения четырёхразрядных чисел MULT 4´4.
Процедура вычисления произведения разбивается на четыре такта. На первом такте перемножаются младшие тетрады множителей и результат записывается в регистр памяти накапливающего сумматора ACCUM. На втором такте перемножается старшая тетрада множителя А на младшую тетраду множителя В, после чего результат сдвигается влево на 4 разряда (умножается на 16) и добавляется к результату. На третьем такте перемножается младшая тетрада множителя А на старшую тетраду множителя В, после чего результат опять же сдвигается влево на 4 разряда (умножается на 16) и добавляется к накопленной сумме. На четвёртом такте перемножаются старшие тетрады множителей после чего результат сдвигается влево на 8 разрядов (умножается на 256) и добавляется к накопленной сумме, после чего сумма, накопленная в сумматоре содержит искомое произведение.
Рассмотрим работу отдельных модулей умножителя.
МодульMUX4_2_1. MUX4_2_1 – четырехразрядныймультиплексор 2 в 1.
Выводы модуля:
A[3..0], B[..0] - две четырёхразрядные входные шины; Sel – адресный вход; Y[3..0] - четырёхразрядная выходная шина;
Логика работы модуля:
При Sel=0 на выход модуля Y[] передаются данные с входной шины A[]; При Sel=1 на выход модуля Y[] передаются данные с входной шины B[]. Модуль SHIFTER.
Данный модуль реализует комбинационную схему сдвига данных.
Выводы модуля:
IN[7..0] – восьмиразрядная входная шина данных. CNT[1..0] – двухразрядная шина управления сдвигом; OUT[15..0] – шестнадцатиразрядная выходная шина данных.
Логика работы модуля: · если CNT[1..0]=B “00”, то OUT[15..8]=0, OUT[7..0]= IN[7..0], т.е. данные передаются без сдвига. · если CNT[1..0]=B “01”, то OUT[15..12]=0, OUT[11..4]= IN[7..0], OUT[7..0]=0, т.е. данные передаются со сдвигом влево на 8 разряда. · если CNT[1..0]=B “10”, то OUT[15..8] = IN[7..0], OUT[3..0]=0, т.е. данные передаются со сдвигом влево на 4 разряда. · если CNT[1..0]=B “11”, то OUT[15..8]=0, OUT[7..0]= IN[7..0], т.е. данные передаются без сдвига.
Модуль CONTROL.
Модуль представляет собой конечный автомат, управляющий работой умножителя.
Перечень состояний автомата:
· IDLE – состояние ожидания (исходное состояние); · LСB – осуществляется умножение младших разрядов множителей a[3..0], b[3..0], в накапливающий сумматор записывается промежуточный результат. · MID – последовательно осуществляются умножение следующих разрядов множителей a[3..0], b[7..4]. и a[7..4], b[3..0], на каждом такте накапливающий сумматор осуществляет сложение хранящихся в нём данных и текущего результата умножения. · MSB – осуществляются умножение старших разрядов множителей a[7..4], b[7..4], накапливающий сумматор осуществляет сложение хранящихся в нём данных и текущего результата умножения. · ERR – состояние ошибки.
Выводы модуля:
CLK – тактовый вход; RST – вход асинхронного сброса автомата в начальное состояние; START – вход запуска; COUT[1..0] – вход номера такта процедуры умножения. SEL[1..0] – выходные сигналы управления мультиплексорами. SHIFT[1..0] – выходные сигналы управления модулем SHIFTER; DONE – выходной сигнал окончания работы; CLKEN – выходной сигнал разрешающий запись данных в накапливающий сумматор; REGCLR – выходной сигнал, осуществляющий синхронный сброс в нуль накапливающего сумматора.
Модуль ACCUM.
ACCUM -шестнадцатеричный накапливающий сумматор. В состав сумматора входит собственно схема арифметического сумматора SUM, регистр хранения накопленной суммы REG и схема управления.
Выводы модуля:
CLK – тактовый вход; CLR – вход синхронного сброса содержимого накапливающего сумматора в нуль, активный уровень – логическая единица; CLKEN – входной сигнал разрешения работы, при CLKEN=0 работа разрешена, при CLKEN=1 работа запрещена но сброс накапливающего сумматора в нуль разрешён; OUT[15..0] – шестнадцатеричный выход данных; A – шестнадцатеричный вход данных.
Логика работы модуля:
При CLR=1 по переднему фронту сигнала CLK содержимое регистра REG сбрасывается в «0» независимо от состояния сигнала на входе CLKEN; При CLKEN=0 результат суммирования сумматором SUM содержимого регистра REG и входного слова REG по переднему фронту сигнала записывается в регистр REG и выдаётся на выходную шину OUT[15..0]. Модуль COUNTER.
COUNTER -двухразрядный счётчик. Выводы модуля:
CLK – тактовый вход; CLR – вход асинхронного сброса счётчика сумматора в нуль активный уровень сигнала– логическая единица; CLKEN – входной сигнал разрешения работы активный уровень сигнала– логический ноль; TACT[1..0] – двухразрядный выход результата.
Счётчик реализует стандартный алгоритм прямого счёта, пробегая по циклу состоянии «0», «1», «2», «3».
Модуль MULT4´4.
MULT4´4 – модуль, реализующийоперацию умножения четырёхразрядных чисел. Выводы модуля:
A[4..1] – четырёхразрядный множитель A; B[4..1] – четырёхразрядный множитель B; RESULT[7..0] – восьмиразрядный выход результата.
Модуль MULT4´4 строится на основе параметризуемого умножителя lpm_mult, входящего в библиотеку lpm модулей системы MAX+PLUSII. Прототип модуля находится в файле LPM_MULT. INC, находящемся в папке <Drive>:\maxplus2\max2lib\mega_lpm. Прототип имеет следующий вид:
FUNCTION lpm_mult (dataa[(LPM_WIDTHA-1)..0], datab[(LPM_WIDTHB-1)..0], sum[LPM_WIDTHS-1)..0], alcr, clock)
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|