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

Проектирование счетчиков на базе абстрактных автоматов




 

 

С помощью абстрактных автоматов удобно описывать работу счетчиков. Для этого достаточно описать автомат МУРА, у которого число состояний определяется диапазоном работы счетчика. Что касается выходных сигналов автомата - то они определяются типом счетчика (прямой, рекурсивный, двоично-десятичный, работающий в диапазоне и т.д.). Разделение номеров состояний и соответствующих им выдаваемых сигналов очень сильно упрощает описание работы «хитрых» счетчиков.

Рассмотрим пример двоично-десятичного счетчика, считающего в диапазоне от 8 до 15.

Счетчик имеет входной тактовый сигнал clk и выходной двоично-десятичный сигнал OUT[4..0].

Соответствующий счетчику автомат имеет 8 состояний, каждому из которых поставлено в соответствие выдаваемое двоично-десятичное число.

Описание такого автомата-счетчика на языке AHDL имеет следующий вид:

 

 

SUBDESIGN C8_15

(clk: INPUT;

OUT[4..0]: OUTPUT;)

VARIABLE

FSM: MACHINE WITH STATES

(S8,S9,S10,S11,S12,S13,S14,S15);

BEGIN

FSM.clk=CLK;

TABLE

FSM => OUT[], FSM;

S8 => B"01000", S9;

S9 => B"01001", S10;

S10 => B"10000", S11;

S11 => B"10001", S12;

S12 => B"10010", S13;

S13 => B"10011", S14;

S14 => B"10100", S15;

S15 => B"10101", S8;

END TABLE;

END;

В процессе своей работы автомат последовательно, по кругу, ходит по циклу состояний S8->S9->S10->S11->S12->S13->S14->S15->S8->S9…

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


 

В результате моделирования вышеописанного счётчика получается временная диаграмма, приведённая на рисунке 3.3.1.

Рис 3.3.1. Временная диаграмма работы двоично-десятичного счетчика.


Проектирование типовых схемотехнических узлов

 

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

 

 

4.1. Матричные дешифраторы клавиатуры

 

Матричные дешифраторы клавиатуры позволяют организовать ввод данных с различных клавиатур, используя минимальное количество шин.

Типовая структурная схема включения дешифратора и клавиатуры приведена на рис 4.1.1.

 

       
 
   
 

 

 

 
 

           
   
     
 
 

 

 
 

           
 
А2
 
А6
     
 

 

 
 

 

 
 
 
 

                   
 
А1
 
А5
 
   
D0 D1 D2 D3 L1 L0 БИС Дешифратора CLK Q[3..0]
     
 

 

 

 
 

 

 
 

 


 
 

Тактовый сигнал

 

 
 

 

 


Рис. 4.1.1. Типовая структурная схема включения дешифратора клавиатуры.


Матричная организации клавиатуры за счёт пространственно – временного разделения сигналов позволяет при минимальном количестве выводов БИС дешифратора обеспечить достаточно быстрый ввод сигналов.

Так для обеспечения работы с клавиатурой содержащей М строк и N столбцов кнопок (всего М· N кнопок), потребуется М+ N выводов БИС дешифратора.

На примере, приведённом на рисунке 4.1.1. продемонстрирована работа дешифратора совместно с клавиатурой, содержащей восемь кнопок, образующих матрицу 2´4. Алгоритм работы дешифратора выглядит следующим образом.

На каждом такте своей работы БИС дешифратора последовательно выдаёт высокий уровень сигнала на линии столбцов L0 и L1. Одновременно происходит анализ входных сигналов на входах D[4..0]. При нажатии кнопки клавиатуры происходит электрическое замыкание между шиной столбца и шиной строки. При подаче сигнала высокого уровня на выход L0 можно идентифицировать нажатие кнопок А1, А2, А3, А4. А при подаче сигнала высокого уровня на выход L1 соответственно - нажатие кнопок А5, А6, А7, А8.

Считается, что одновременно может быть нажата только одна кнопка клавиатуры.

Ниже приведено описание БИС дешифратора клавиатуры на языке AHDL.

 

 

SUBDESIGN KLAV24

(CLK, D[3..0]:INPUT;

L[1..0],Q[3..0]:OUTPUT;

)

Variable

RG[1..0]: DFF;

BEGIN

RG[].CLK=CLK;

CASE RG[].Q IS

WHEN B"10" => RG[].D = B"01";

WHEN OTHERS => RG[].D=RG[].Q+1;

END CASE;

L[]=RG[].Q;

TABLE

L[], D[] => Q[];

B"01", B"0000"=> B"0000";

B"01", B"0001"=> B"0001";

B"01", B"0010"=> B"0010";

B"01", B"0100"=> B"0011";

B"01", B"1000"=> B"0100";

B"10", B"0000"=> B"0000";

B"10", B"0001"=> B"0101";

B"10", B"0010"=> B"0110";

B"10", B"0100"=> B"0111";

B"10", B"1000"=> B"1000";

END TABLE;

END;

Представленное описание схемы содержит входные сигналы CLK, D[3..0] и выходные сигналы L[1..0],Q[3..0]:. Для организации последовательной подачи сигналов на выходы L1 и L2 в составсхемы введен счетчик на триггерах RG[1..0]. Счетчик работает в режиме ограничения счета и считает от 1 до 2. Процесс соответствующего перехода при счёте организован с помощью оператора CASE.

Анализ вариантов нажатия клавиш и выдача соответствующих кодов символов выполняется с помощью оператора TABLE. Если не нажата ни одна кнопок – выдаётся код «0000».

 

Временная диаграмма работы дешифратора клавиатуры, полученная в результате моделирования, представлена на рис 4.1.2.

 

Рис 4.1.2. Временная диаграмма работы дешифратора клавиатуры.

 

В рассмотренном примере дешифратора клавиатуры не отражены вопросы «дребезга контактов». Дело в том, что при нажатии на кнопки, процесс замыкания соответствующих дорожек происходит не мгновенно. За счет упругости материала кнопки и платы происходит процесс многократного замыкания и размыкания контактов, воспринимаемый как дребезг. Для борьбы с этим явлением и надёжной отработки моментов переключения используют схемы – таймеры, которые фиксируют не кратковременные скачки напряжения на кнопках, а постоянно установившиеся поте потенциалы, которые должны быть неизменными постоянными в течении заданного интервала времени.

 

Рассмотрим схему устранения дребезга контактов, построенную на базе счётчика. Эта схема представлена на рис 4.1.3.

 

 

 

Рис 4.1.3. Схема устранения дребезга контактов на базе счётчика.

 

 

Данная схема имеет тактовый вход CLC, задающий временную рабочую сетку, вход KN, состояние которого определено кнопкой клавиатуры (0 – не нажата, 1 - нажата), выход Q, определяющий «чистое» состояние кнопки после отсева дребезга и промежуточный выход Q1.

Основная идея работы схемы заключается в том, что счётчик count16, отсчитывает временные интервалы длительностью восемь тактов в течении которых состояние сигнала KN не меняется, причём если текущее значение сигнала Q равно нулю, то отсчитывается восемь тактов сигнала «1», а если значение Q равно одному, то отсчитывается восемь тактов сигнала «0». В случае если длительность соответствующей «полочки» оказывается меньше восьми тактов, счётчик сбрасывается и начинается поиск нужного интервала снова.

Пример временной диаграммы работы такой схемы, полученной в результате моделирования, приведён на рис 4.1.4.

 

 

 

 

Рис 4.1.4. Пример временной диаграммы работы схемы устранения дребезга контактов, полученной в результате моделирования.

 

 

На рисунке 4.1.4. видно, что переключения выхода Q происходит значительно реже чем изменяется сигнал KN. Эти переключения возникают только если сигнал KN держится не менее 8 тактов. Переключения триггера, хранящего состояние кнопки клавиатуры, происходит по выходному сигналу счётчика Q1.

 

 


Схемы вычисления функций

 

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

Типичная схема вычисления значения функции двух переменных F(X,Y) с помощью ПЗУ представлена на рис 4.2.1.

 

 

 
 
ROM A[11..0] F[11..0]

 

 


 
 

 
 

X[6..0]

A[5..0]

 

F(X,Y)

A[11..6]

Y[5..0]

 
 

 

Рис 4.2.1. Типичная схема вычисления значения функции двух переменных с помощью ПЗУ

 

Представленная схема построена на базе 12-разрядного ПЗУ объёмом 4096 слов. Каждой паре входных аргументов X и Y, заданных с точностью в 6 двоичных разрядов и вместе образующих 12 разрядный адрес ПЗУ соответствует одно выходное слово F, заданное с точностью 12 разрядов.

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

Однако при разработке схем вычисления функций при таком подходе могут возникать проблемы больших объёмом ПЗУ при большом числе разрядов задания значений аргументов. В этом случае можно ценой небольшой потери точности в 2¸4 раза уменьшить объём ПЗУ используя методы линейной экстраполяции функций.


 

Рассмотрим пример функции одной переменной F(X). Пусть ПЗУ имеет разрядность n, а разрядность аргумента равна m (m>n). При этом разрядные сетки адреса ПЗУ A и аргумента X имеют вид, показанных на рис 4.2.2.

 

 
 

A

i i+1 i+2 i+3

 

 
 

X

j j+1 j+2 j+3 j+4 j+5 j+6

 

 

Рис 4.2.2. Разрядные сетки аргумента X и адреса ПЗУ A для случая m=n-1.

 

Положим для простоты, что m=n-1, тогда для значений аргументов, не попадающих в разрядную сетку значений адреса (Xj+1, Xj+3, Xj+5,) значение функции можно вычислить по стандартной интерполяционной формуле

 

 

F(Xj+1)=(F(Xj) + F(Xj+2))/2

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

Данная схема вычислений может применятся и при значениях m=n-2, однако при этом время вычисления значений функции будет занимать не один а два такта, поскольку придётся сначала рассчитать значение функции на сетке с m=n-1, а только затем перейти к расчётам на сетке с m=n-2.

Естественно при этом удваивается объём аппаратуры, необходимой для реализации соответствующих вычислений.

Рассмотрим блок схему интерполяционного вычислителя, которая приведена на Рис 4.2.3.


 

CLC

           
 
ROM A[7..0] F[11..0]
 
     
 

 

 
 

 
 


A[7..0]

 
 
SUM A[11..0] S[12..0] B[11..0]
 
 

 

 


F[11..0]

       
   
 
 

 


Рис 4.2.3. Блок схема вычислителя значения функции с линейной интерполяцией.

 

 

Вычислитель значения функции с линейной интерполяцией состоит из ПЗУ размером 256 12-разрядных слов. 12-разрядного регистра-защелки RG и 12-разрядного сумматора SUM. На первом такте своей работы на адресный вход ПЗУ поступает значение Xj, и происходит считывание значение F(Xj), которое записываетсяа в регистр RG. На следующем такте работы на адресный вход ПЗУ поступает значение Xj+2, считывается значение F(Xj+2). после чего сумматором SUM вычисляется сумма F(Xj) + F(Xj+2). Затем на выход вычислителя выводится ответ с выхода сумматора со сдвигом двоичного кода на один разряд вправо.

 

Аналогичный подход можно применять и для соотношения m=n-2, правда, при этом для вычисления результата в общем случае потребуется три рабочих такта.


 

Счетчики расхода, пробега

 

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

Рассмотрим схему счетчика расхода топлива, выполненную на базе двоично-десятичного счетчика. Схема счетчика приведена на рис 4.3.1.

 

       
 
Счетчик порции Q[4..0]
   
Компаратор
 

 

 
 

 
 
 
 

       
   
 
 
 
 

 
 
D триггер R D Q C


 
 

B[4..0]

 

 
 

 
 

VCC

 
 

С

 

 
 
 
 

       
 
AND2
   
Счетчик расхода
 


       
   

CLC R[7..0]

       
   

 

 

Рис 4.3.1. Блок схема двоично-десятичного счетчика расхода

 

Функционально счетчик расхода состоит из счетчика порции, компаратора, определяющего конец отсчета порции, собственно счетчика расхода и блока управления, включающего управляющий D -триггер и селектор тактового сигнала AND2.

Счетчик расхода работает следующим образом. При поступлении очередного сигнала с дозатора, приходящего на вход С, управляющий триггер переключается в состояние «1», что разрешает проход тактовых сигналов через элемент AND2. В этом состоянии он находится до тех пор, пока счётчик порции не отсчитает количество тактов, равное величине порции, определяемой входным кодом B [].

Как только, как код счетчика дозы совпадёт с кодом, заданным на шине B [], на выходе компаратор выработает сигнал «0», который перебросит управляющий триггер в состояние «0», что перекроет поступление тактовых сигналов на входы счетчиков.


Таким образом, при подаче импульса дозатора на вход С, счетчик отсчитывает количество тактов, определяемоё дозой, причём в счётчике накапливается итоговая сумма по всем порциям.

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

 

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

 

 

SUBDESIGN COMP3

(CLK, A[3..0], B[3..0]:INPUT;

Q:OUTPUT;

)

Variable

Q1: NODE;

BEGIN

Q1=A[3]$B[3] # A[2]$B[2] # A[1]$B[1] # A[0]$B[0];

Q=CLK # Q1&!CLK;

END;

 

Компаратор имеет входные сигналы A[3..0], B[3..0] и CLK. В компараторе организовано поразрядное сравнение кодов A[] и B[]. Операция сравнения осуществляется путём поразрядного сравнения кодов по модулю 2 (операция XOR) и последующим логическим суммированием результатов. В случае хотя бы одного несовпадения логическая сумма поразрядных сравнений по модулю 2 будет равна «1», иначе «0». Т.е. если все разряды попарно равны, значение Q1 будет равно «0». Выход компаратора Q формируется из сигнала Q1 и тактового сигнала CLK. Это сделано для того, чтобы выход сигнала компаратора появлялся в момент нулевого значения тактового сигнала, что позволяет избежать влияния дребезга переключения разрядов счетчика и упростит головную схему.

 

Рассмотрим возможный вариант построения двоично-десятичного счетчика дозы T210.

Этот счётчик используется в качестве компоненты для главного счетчика расхода.

 


 

SUBDESIGN T210

(CLK, RN, B:INPUT;

P,Q[3..0]:OUTPUT;

)

Variable

RG[3..0],RP: DFF;

BEGIN

RG[].CLK=CLK&B;

RP.CLK=!CLK;

RG[].CLRN=RN;

CASE RG[].Q IS

WHEN 9 => RG[].D=0; RP.D=B"1";

WHEN OTHERS => RG[].D=RG[].Q+1; RP.D=B"0";

END CASE;

Q[] = RG[].Q;

P=RP.Q;

END;

 

Счетчик имеет следующие входные и выходные сигналы:

CLK – тактовый вход;

RN -вход сброса по «0»;

B -вход переноса из младшей тетрады;

P -выход переноса в старшую тетраду;

Q[3..0]- выход счетчика.

 

 

Счётчик работает по классической схеме. Когда он досчитывает до кода «9» в операторе CASE организуется обнуление счетчика на следующем такте. В том же операторе организуется появление на один такт сигнала логической единицы на выходе переноса старшего разряда, который формируется на выходе триггера переноса RP.

 

 

Основной счетчика расхода сформирован на базе трех двоично-десятичных счетчиков T210. Данный проект имеет иерархическую организацию. Его компонент - модуль T210 имеет соответствующий INCLUDE файл "T210.INC".

 

 

Ниже представлено описание счётчика расхода


 

INCLUDE "T210.INC";

SUBDESIGN D3

(CLK:INPUT;

Q0[3..0],Q1[3..0],Q2[3..0],P:OUTPUT;

)

Variable

T210A,T210B,T210C: T210;

BEGIN

T210A.CLK=CLK;

T210B.CLK=CLK;

T210C.CLK=CLK;

T210A.RN=VCC;

T210B.RN=VCC;

T210C.RN=VCC;

Q0[]=T210A.Q[];

Q1[]=T210B.Q[];

Q2[]=T210C.Q[];

T210A.B=VCC;

T210B.B=T210A.P;

T210C.B=T210B.P & T210A.P;

P=T210B.P;

END;

 

Счетчик расхода имеет следующие входные и выходные сигналы:

CLK – тактовый вход;

P - контрольный выход переноса;

Q0[3..0]- выход младшей тетрады счетчика;

Q1[3..0]- выход средней тетрады счетчика;

Q2[3..0]- выход старшей тетрады счетчика;

 

В представленном описании модули T210 введены как переменные, имеющие имена T210A,T210B,T210C. Соответствующими уравнениями организована синхронная работа трёх двоично-десятичных счётчиков T210. Для этого в проект введены цепи согласования переноса между младшими и старшими тетрадами.

 

Общее схема счетчика расхода, построенная на основе вышеописанных модулей представлена на рис 4.3.2. А её временная диаграмма работы на рис 4.3.3.

 

 

Рис 4.3.2.Общая схема счетчика расхода.

 

Схема счётчика расхода имеет следующие входные и выходные сигналы

 

B[3..0] - код дозы;

C - входной импульс отсчёта;

CLC - тактовый сигнал опорной временной сетки.

CR[3..0] – выход счетчика дозы (служебный сигнал);

QS – выход триггера управления (служебный сигнал);

Q0[3..0] -выход младшей тетрады счетчика;

Q1[3..0] -выход средней тетрады счетчика;

Q2[3..0] -выход старшей тетрады счетчика;

QS – выход триггера управления.

 

При поступления сигнала входного импульса отсчёт C, в управляющий триггер DFF записывается код «1», который открывает проход тактовых импульсов с входа CLC на вход счётчика дозы T210 и вход главного счётчика d3.

Как только счётчик дозы отсчитает количество импульсов равное коду, на выходе компаратора comp3 появиться сигнал логического «0», который сбросит управляющий триггер в состояние логического «0» и тем самым прекратит процесс счёта вплоть до появления очередного импульса на входе импульсов отсчёта C.

Таким образом, значение главного счётчика d3 будет последовательно увеличиваться квантами величиной, определяемой кодом B[3..0].

 

 

Рис 4.3.3. Временная диаграмма работы счетчика расхода,

 

На временной диаграмме видно, что значения счётчика дозы, выдаваемое на выходы Q0[3..0], Q1[3..0], Q2[3..0] последовательно увеличиваются на «7», последовательно принимая значения 0, 7, 14, 21 и т.д.


 

Поделиться:





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



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