Главная страница  Автономные управляющие системы 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [ 37 ] 38 39 40

fsigned(m04) +slgned(Ri05) fsignad(m06)-f8lgned(m07) f signed (m08) -f signed (m09) -f signed (mlO) -f signed (mil) fsigned(ml2) +signed(ml3) fsigned(ml4) fsigned(ml5) f signed (ml 6) + signed (ml 7) -f signed (ml S) + signed (ml 9)

+signed(m20) -feigned(m21) +8igned(m22) -feigned(m23)) ;

process(c,r)

begin

if r=

1 then

<=

(others

=>

<=

(othars

=>

<=

(others

=>

<=

(others

=>

<=

(othars

=>

<=

(others

>

>0)

<

(others

=>

<=

(others

>

<0)

<=

(othars

=>

<=

(others

=>

<=

(others

=>

<=

(othars

=>

<=

(others

=>

<=

(others

>

<=

(others

=>

<=

(othars

=>

>0)

<=

(others

>

<=

(others

=>

<

(others

=>

>0)

<=

(othars

=>

<0)

<=

(others

=>

<=

(others

=>

<=

(othars

=>

<=

(others

=>

<0)

elsif (cevent and c=

xOO(7 downto 0) <=

xOl (7 downto 0) <=

x02 (7 doimto 0) <=

x03(7 downto 0) <

x04 (7 downto 0) <=

x05(7 doimto 0) <=

1) then

din(7 downto 0)

x00(7 doimto 0)

x01(7 downto 0)

x02(7 downto 0)

x03(7 doimto 0)

x04 (7 doimto 0)

x06(7 downto 0) <= x05(7 downto 0) x07(7 doimto 0) <= x06(7 doimto 0)

x08 (7 downto 0) x09(7 downto 0) xl0(7 downto 0) xll(7 downto 0) xl2(7 downto 0) xl3(7 downto 0) xl4 (7 doimto 0) xl5(7 downto 0)

x07(7 downto 0)

x08(7 downto 0)

x09(7 downto 0)

xlO(7 downto 0)

xll (7 doimto 0)

xl2(7 downto 0)

xl3(7 doimto 0)

xl4 (7 doimto 0)

xl6(7 downto 0) <= xl5(7 downto 0)

xl7(7 downto 0) <= xl6(7 doimto 0)

<= xl7(7 downto 0)

<= xl8 (7 doimto 0) <= <=

xlS(7 downto 0)

xl9(7 downto 0)

x20(7 downto 0)

x21(7 downto 0)

x22(7 dosmto 0)

xl9(7 downto 0) x20(7 doimto 0) x21(7 doimto 0)

x23(7 downto 0) <= x22(7 downto 0); end if; end process; and behavior;

Входные данные считываются с входа din[7..0] в дополнительном коде по переднему фронту синхросигнала с.

На сигналах хО- х23 построен сдвиговый регистр, обеспечивающий задержку данных на 24 такта. Сигналы с регистров умножаются на весовые коэффициенты hO-h23 и суммируются.

Для проверки схемы использован тест.

- Test bench shell library ieee;

use ieee.std logic l164 all;

entity test f 18 end te8t f;

architecture testbench of test f is

coiif>onant f port (

din : in 8td logio vector (7 doimto 0); sout : out std logic vector (15 doimto 0); r : in std logic; о : in 8td logio

end component;

signal din : 8td logio veotor(7 downto 0); signal sout : std logic vector(15 downto 0); signal r : std logic, signal с 8td logic;

begin

process begin

for 1 in 0 to 50 loop

с <= 0, wait for 5 ns; с <= Ч; wait for 5 ns; end loop, end process;

process begin

r <= Ч ; wait for 10 ns;

r <= >0 ;

din <= 00000001 ; wait for 10 ns; din <= 00000000 ; wait for 500 ns; end process,

dut . f port map ( din => din, sout => sout, r => r, с => о );

and testbanch;



Рис. 5.16. Результаты моделирования ЦФ

OiCAD Simulate IWavel]

ОпвЬпэ 40ns бОпэ* Boiis лООта *11опя м О1О0Р0п?;?6Ом-

! III * III tiii itii i* liit tli til 1*11 iliiMf III if 11 III Jill li i ii>l fr*li- ti li iSf*iiil. iil*if#l*r %vi *li vmTi *.fIi If*!

TTTY

:-ir-,l.i I

!И4< ((1*?Г jj; --J BrowWL 11 Unnamed process (line 62) 3

(No slack dalaaaildble)

(No variable data available)

Fo(Help,pre F1 * , -v .

Тест моделирует подачу на цифровой фильтр аналога d-функ-ции На выходе фильтра - его импульсная характеристика Результаты моделирования представлены на Рио. 5.16

5.6. РЕАЛИЗАЦИЯ НЕЙРОНА НА AHDL

Рассмотрим реализацию на языке описания аппаратуры структуры трехвходового (количество входов легко варьируется) нейрона с логистической функцией активации (также может варьироваться) Весовые коэффициенты являются переменными, задаваемыми пользователем Входные величины (как входы, так и веса) представлены 16-разрядным кодом:

х.ххххххххххххххх

При обработке данных 16-разрядный код преобразуется к 12-разрядному коду вида

х)дооодо(.юо<х

Знак мантисса Показательная часть

Эта операция снижает точность, но обеспечивает обработку данных, имеющих более широкий динамический диапазон

от1.1111111 1111 + -4161536дДО0.1111111 1111 +4161536д

Действия производятся только с целыми числами Значения весов и входов преобразуем к целому числу и округляем, например число -7 2341 может быть представлено числом -72341 В этом случае во всех остальных значениях входов и весов запятая должна быть передвинута на 4 знака вправо (для десятичного числа)

Модель нейрона описывается в виде основного тела программы, к которому подключается набор процедур, выполняющих основные действия

Рассмотрим назначение подключаемых процедур.

FUNCTION mult nrn (хх[7..0], уу[7..0], в[6..0], Ь[6..0], elk) RETURNS (РС14..0]);

FUNCTION sums (a[7..0], b[7..0], elk, cin) RETURNS (eum[7. .0] , err) ;

FUNCTION norms (a[16..1]) RETURNS (8[12..1]);

FUNCTION eum4 (al3..0], Ы3..0), oik, cin) RETURNS (8um[3..0]);

FUNCTION norm 8um (e[12..1], b[12..1], elk) RETURNS (a8[12..1], bs[12..1]);

FUNCTION dop kod (xx[7..0], elk) RETURNS (yy[7..0]),



FUNCTION perep (elk, хха[11..б], ххЬ[4..1]) RETURNS (yy[ll..l]);

FUNCTION sigm (natC12..1]) RETURNS (outC16..1]); .

mult nrn представляет собой 8-битный умножитель 7 бит данных, 1 бит -знаковый.

sum8 - 8-разрядный сумматор. normS - выполняет нормализацию 16-разрядного числа к 12-разрядному При этом в 7 значащих разрядах старший бит обязательно значащий.

sum4 - 4-разрядный сумматор norm sum - используется при необходимости сложения чисел с отличающейся показательной частью Данная функция приводит младшее по модулю из этих чисел к показательной части старшего числа.

dop kod - преобразует 8-битное число из прямого кода в обратный и из обратного в прямой При этом, если входные данные находятся в дополнительном коде (что соответствует числу О в восьмом бите), то перевод осуществляется в прямой код и наоборот.

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

sigm - логистическая функция. Представляет функцию активации нейрона в виде сигмоиды out = 2 / (1+ехр (-0 07net)) - 1. Сиг-моида сжата в пределахпе1 = (-142,142), out = int ([0,1) х 10000) На вход подается нормализованное число к виду 12 бит - знаковый (+1, -0), 11.. 5 бит - мантиса (если экспоненциальная часть не нулевая, то 11 бит = VCC), 4 .1 бит - экспоненциальная часть На выходе имеем число, вида 16 бит - знаковый (+1, -0), 15 1 бит - мантиса

Приведем функции, используемые в подпрограммах FUNCTION multl6b (хх, уу, а, Ъ) RETURNS (s, о) ; FUNCTION dop kodl (хх[3..0], elk) RETURNS (yy[3..0]); .

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

dop kod1 - аналог функции dop kod, но для 4-разрядных чисел (используется для показательной части)

Ниже приводиться текст основной программы Neiron

FUNCTION mult nrn (хх[7..0], уу[7 .0], а[б .0], Ь(6..0], elk) RETURNS (р(14..0]),

FUNCTION sums (а[7..0], b[7..0], elk, exn) RETURNS (8um[7. 0], err),

FUNCTION norms (a[16..1]) RETtnaJS (s[12..1]);

FUNCTION sum4 (a[3..0b b[3..0b elk, exn) RETURNS (eum[3..0]);

FUNCTION norm 8um (a[12..1], b[12..1], elk) RETURNS (aa[12..11, b8C12..11) ;

FUNCTION dop kod (xx[7..0] elk) RETURNS (yy[7..0]);

FUNCTION perep (elk, xxa[11..6], xxb[4..1]) RETURNS (yy[ll..1]);

FtnjCTION sxgm (net[12..1]) RETtnUIS (out [16. . 1]) ; SmoESIGN nexron

%Поеледние бти a процедурах умножения во входных переменных и а охаете яаляютея 8накоаыми%

%Реали9уеФея трехвходоаый однослойный нейрон %

elk:INPUT;

%n[3..0]:INPUT;%%Число входов нейрона 2-10%

w[16..1]:INPOT;%Beoa% ww[16..1]:INPUT; inor[16. .1] :INP0T;

x [16..1]:INPUT;%Входы% xx[16..1]:INP0T; XXX[16..1].INPUT;

2[12..1]:OUTPUT;%Выход% 22(16..1]:ОПТРПТ;

%ТесФожые выходы%

о [ 12 . . 1 ] : OUTPUT; %Умножение% оо[12..1]:ООТРПТ; ООО[12..1]iOUTPUT;

ja8[12..1]:ОитРОТ;%Выравни ание перед еложаиием% ]bs[12..1]:OUTPUT; jja8[12..1]rOUTPUT, ]]b8[12..1]:0UTP0T;

f[12..1].OUTPUT;%Проверка суммы%

f [ll..5]:00ТР0Т; Проверка суммы (бее переноса)%

ка[12..5]:ОиТРиТ;%Пвременныв для проверки работы с доп. кодом и вычитания с ким% кЬ[11. .5] :OUTPUT; каЬв[12..5]:ОиТРОТ;

VARIABLE

гх[3..1]:norms;%Перамекные нормализации входов% rw[3..1]:norms;%Перемекные нормализации ввеов% гаСЗ..1]:norms;%Пвраманхыв нормализации промежуточных результатов%

s:mult nrn;%nepeMeKKMe умножвнр1я%

8s.mult nrn;

S8s:mult nrn;

е[3..1]:зит4;%Перемвнные сложения показателей при умножении%

ее[3..1]:sum4;

q [2 . . 1 ] : sumS; %Первменные сложвния% %qq.sums;%

m[12..1]:НОРЕ;%Вспоиогательные переменные суммирова-ния%

mm[12..1]:NODE;

t[2..1]:погт 8ит;%Пвремекныв прижеденрп к одному показателю перед сложвниам%



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [ 37 ] 38 39 40

© 2000 - 2021 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.