Расчет реального быстродействия устройства — КиберПедия 

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

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

Расчет реального быстродействия устройства

2020-04-01 91
Расчет реального быстродействия устройства 0.00 из 5.00 0 оценок
Заказать работу

 

Как было подсчитано ранее число тактов на выполнение умножений равно 2(92+89)=362. Помимо этого в процессе определения выходного отсчета необходимо выполнить 24 операции сложения, которые занимают в общей сложности 24(7+4+7)=432 такта. Т.о. в общее число тактов, необходимых для вычисления одного выходного отсчета равно 794 такта.

Мы дискретизируем входной сигнал с частотой 15 кГц, тогда максимальное время, затрачиваемое на обработку одного выходного отсчета равно .

При тактовой частоте 1,5 МГц время обработки одного выходного отсчета равно . Это нас не устраивает, поэтому придется поменять элементную базу. Вместо микропроцессора будет использоваться ПЛИС фирмы ALTERA семейства FLEX10K. Программа разрабатывалась на языке AHDL с помощью пакета MAX+2.

Модуль программы без вычитателя выглядит следующим образом:

 

*************************************************************"ku";"summator";"n";"nn";filter

([7..0]   : INPUT =GND;: INPUT;[15..0]: OUTPUT;

)_HRAN: ku;[3..0]: summator;[1..0]: nn;[1..0]: n;_HRAN.takt = TAKT;[].takt = TAKT;[1..0].takt = TAKT;[1..0].takt = TAKT;_HRAN.vhod[7..0] = VHOD[7..0];[0].vhod[7..0] = REG_HRAN.vihod[15..8];[1].vhod[7..0] = REG_HRAN.vihod[39..32];[0].vhod[7..0] = REG_HRAN.vihod[23..16];[1].vhod[7..0] = REG_HRAN.vihod[31..24];

 

%суммируем коэффициенты с отрицательным знаком%

 

SUMMER[0].a[7..0] = REG_HRAN.vihod[7..0];[0].b[7..0] = shesty[0].vihod[7..0];[1].a[7..0] = try[1].vihod[7..0];

SUMMER[1].b[7..0] = SUMMER[0].sum[7..0];

 

%суммируем коэффициенты с положительным знаком%

 

SUMMER[2].a[7..0] = REG_HRAN.vihod[47..40];[2].b[7..0] = shesty[1].vihod[7..0];[3].a[7..0] = try[0].vihod[7..0];[3].b[7..0] = SUMMER[2].sum[7..0];[7..0] = SUMMER[3].sum[7..0];

VIHOD[15..8] = SUMMER[1].sum[7..0];;

************************************************************

 

Модули подпрограмм, использованных в головном проекте:

 

*************************************************************"summator";"mult";N

([7..0]   : INPUT =GND;[7..0]                        : OUTPUT;: INPUT;

)[2..0]: summator;:mult;

 

%подсоединен тактовый сигнал%

 

SUMMER[2..0].takt = TAKT;.takt = TAKT;

 

%блок домножения входного отсчета на коэффициент 0,280448%

.vhod[7..0] = VHOD[7..0];

%блок суммирования для n-1 отсчета%

SUMMER[0].a[7..0] = VHOD[7..0];[0].b[7..0] = VHOD[7..0];[1].a[7..0] = VHOD[7..0];[1].b[7..0] = MULTI.vihod[7..0];[2].a[7..0] = SUMMER[0].sum[7..0];[2].b[7..0] = SUMMER[1].sum[7..0];

VIHOD[7..0] = SUMMER[2].sum[7..0];;

*************************************************************

 

%регистр хранения входных отсчетов

последний отсчет по убыванию

предпоследний отсчет по убыванию и т.д.

 

23..16

 

 

n-5 отсчет %ku

([7..0]      : INPUT;: INPUT;[47..0]: OUTPUT;

)[47..0]: dffe;[].clk = takt;[].ena = VCC;[7..0] = VHOD[7..0];i in 9 to 48 generate[i-1].d = Tr[i-9].q;generate;

VIHOD[]=Tr[].q;;

*************************************************************

 

%программа перемножитель 8-битного числа на коэффициент 0,280448%

INCLUDE "summator.inc";mult

([7..0]             : INPUT;: INPUT;[7..0]    : OUTPUT;

): summator;: summator;.takt=takt;.takt=takt;.a[5..0]=vhod[7..2];.b[1..0]=vhod[7..6];.a[6..0]=su0.sum[6..0];.b[0]=vhod[7];

vihod[7..0]=su1.sum[7..0];;

*************************************************************

%программа перемножитель 8-битного числа на коэффициент 0,66655

10101010%"summator.inc";multt

([7..0]             : INPUT;: INPUT;[7..0]    : OUTPUT;

): summator;: summator;: summator;.takt=takt;.takt=takt;.takt=takt;.a[6..0]=vhod[7..1];.b[4..0]=vhod[7..3];.a[2..0]=vhod[7..5];.b[0]=vhod[7];.a[7..0]=su0.sum[7..0];.b[7..0]=su1.sum[7..0];[7..0]=su2.sum[7..0];;

*************************************************************"summator";"multt";NN

([7..0]             : INPUT =GND;[7..0]                                           : OUTPUT;: INPUT;

)[5..0]: summator;:multt;

 

%подсоединен тактовый сигнал%

 

SUMMER[5..0].takt = TAKT;.takt = TAKT;

 

%блок домножения входного отсчета на коэффициент 0,280448%

.vhod[7..0] = VHOD[7..0];

 

%блок суммирования для n-1 отсчета%

 

SUMMER[0].a[7..0] = VHOD[7..0];[0].b[7..0] = VHOD[7..0];[1].a[7..0] = VHOD[7..0];[1].b[7..0] = VHOD[7..0];[2].a[7..0] = VHOD[7..0];[2].b[7..0] = VHOD[7..0];[3].a[7..0] = SUMMER[0].sum[7..0];[3].b[7..0] = MULTTI.vihod[7..0];[4].a[7..0] = SUMMER[1].sum[7..0];[4].b[7..0] = SUMMER[2].sum[7..0];[5].a[7..0] = SUMMER[3].sum[7..0];[5].b[7..0] = SUMMER[4].sum[7..0];[7..0] = SUMMER[5].sum[7..0];;

*************************************************************"summator";"mult";N

([7..0]             : INPUT =GND;[7..0]                                           : OUTPUT;: INPUT;

)[2..0]: summator;:mult;

 

%подсоединен тактовый сигнал%

 

SUMMER[2..0].takt = TAKT;.takt = TAKT;

 

%блок домножения входного отсчета на коэффициент 0,280448%

.vhod[7..0] = VHOD[7..0];

 

%блок суммирования для n-1 отсчета%

 

SUMMER[0].a[7..0] = VHOD[7..0];[0].b[7..0] = VHOD[7..0];[1].a[7..0] = VHOD[7..0];[1].b[7..0] = MULTI.vihod[7..0];[2].a[7..0] = SUMMER[0].sum[7..0];[2].b[7..0] = SUMMER[1].sum[7..0];

VIHOD[7..0] = SUMMER[2].sum[7..0];;

*************************************************************

 

%программа сумматор для двух восьмибитных чисел%

SUBDESIGN summator

(

    a[7..0],b[7..0]          : INPUT = GND;: INPUT;[7..0]: OUTPUT;

)[7..1]:node;[7..0]: dff;:dff;[7..0].clk = takt;[7..0].prn = VCC;[7..0].clrn = VCC;.clk=takt;.prn=VCC;(a[0]&b[0])==VCC then[0]=GND;[1]=VCC;(a[0]#b[0])==GND then[0]=GND;[1]=GND;sum[0]=VCC;[1]=GND;if;i in 1 to 6 generate(a[i]&b[i]&c[i])==VCC then[i]=VCC;[i+1]=VCC;(a[i]#b[i]#c[i])==GND then[i]=GND;[i+1]=GND;

(((a[i]&b[i])#(a[i]&c[i])#(b[i]&c[i]))&!(a[i]&b[i]&c[i]))==VCC then[i]=GND;[i+1]=VCC;sum[i]=VCC;[i+1]=GND;if;generate;(a[7]&b[7]&c[7])==VCC then[7]=VCC;=VCC;(a[7]#b[7]#c[7])==GND then[7]=GND;=GND;(((a[7]&b[7])#(a[7]&c[7])#(b[7]&c[7]))&!(a[7]&b[7]&c[7]))==VCC then[7]=GND;=VCC;sum[7]=VCC;=GND;if;;

*************************************************************

 

Правильность работы программы можно проверить по временным диаграммам. Время работы программы 3 тактовых импульса. Поэтому тактовая частота должна быть 45 кГц, что вполне реализуемо, если учесть, что границы тактовых частот для ПЛИС семейства FLEX10K исчисляются МГц.

 

EFP10K10LC84-3



Поделиться с друзьями:

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.03 с.