Отговори на тема  [ 28 мнения ]  Отиди на страница 1, 2  Следваща
Малко помощ за Spartan-3 и развойните средства на Xilinx 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Малко помощ за Spartan-3 и развойните средства на Xilinx
Абс. начинаещ съм в тая област и имам нужда от първия си "hello world", който в случая ще е 8 битов брояч. :)


Вто Фев 10, 2009 12:42 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Първият урок в тая област е за разликата между комбинаторна логика и логика с памет (демек асинхронна и синхронна логика)... знаеш ли го това?

Та сега броячът синнхронен или асинхронен да бъде?


Вто Фев 10, 2009 1:17 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Хм. Ще обясниш ли? :)


Вто Фев 10, 2009 2:43 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Ми хардуерът принципно се дели на две групи:
1) Комбинаторна логика - това са ти всички логически, математиматически и каквито се сетиш функции при които резултатът зависи пряко от входа на функцията. Примерно прост суматор - подаваш му на входовете 2 и 2 а на изхода получаваш 4, щото 2+2 е приблизително 4 ;-)
2) Логика с памет - това е хардуер, който има някаква памет и тая памет описва някакво вътрешно състояние. Изходите на такъв хардуер могат да зависят както от входовете, така и от вътрешното състояние.

Може би се чудиш защо е толкова важно да се прави разлика между горните две... Има много причини, най-малко теорията на тия две групи е различна. При комбинаторната логика всичко се свежда до булева алгебра и независимо какво си написал, в крайна сметка може да се сведе до схема с И-НЕ елементи. Демек нямаш никакви грижи с компилатора - той винаги оптимизира комбинаторната логика до възможно най-добрия резултат. (За разлика от С-компилаторите, които не винаги се усещат).
Теорията зад паметите е малко по-разлияна, там са едни автомати, Тюринги ала-бала но това теб не те касае много. Важно е само да знаеш че има разлика между комбинаторна логика и логика с памет.

Комбинаторната логика по дефиниция си е асинхронна, т.е. няма нещо специално по което да се "синхронизира". Даваш нещо на входа получаваш резултат на изхода.
По принцип логиката с памет може да бъде синхронна и асинхронна, но като за начало забрави за асинхронните памети. И винаги когато чуеш памет си представяй синхронна логика, а след като напреднеш ще говорим и за асинхронни логики с памет.

Всъщност какво и е "синхронното" на една логика и защо се синхронизира?
Представи си 8 битов процесор и 128-битова променлива. Ако работиш в един таск нямаш никакъв проблем с това че променливата и процесора са на различни битове, нали така?
Сега обаче си представи че един таск бъзика променливата примерно я инкрементира, а друг таск или прекъсване я чете. Възниква една лека опасност втория таск да прекъсне първия докато подменя стойностите и да прочете част от старата и част от новата стойност - демек получава се боза...

При хардуера тоя проблем съществува винаги когато имаш променлива с повече от 1 бит, защото два бита трудно се променят едновременно Винаги единия се променя една идея по-бързо и има опасност ти да нацелиш баш тоя момент.
При софтуера тоя проблем се решава със семафорчета или забрана на прекъсването, а при хардуера се решава чрез "синхронна логика", т.е. всички битчета се синхронизират по някакъв сигнал наречен клок и ти си знаеш кога може да ги бараш...

Забележи, че само "логика с памет" може да е наистина синхронна, защото тя трябва да "помни" състоянието си и да не се променя, докато не й разреши съответния клок. Всичката логика която се клати на един и същ клок образува "клок домейн". И в рамките на този домейн сексът е безопасен. Можеш спокойно да си правиш аритметики между променливите, без да се притесняваш колко битови са ти променливите и дали няма да прочетеш грешна стойност. В рамките на един домейн всичко става синхронно и нямаш грижи. Но трябва много да внимаваш когато тръгнеш да ползваш променлива от един домейн в друг. По принцип компилаторите хващат подобни грешки и предупреждават, но общо взето тая грешка съм я виждал и при много добри хардуеристи ;-)


Дотук ако си ме разбрал, вече би трябвало да знаеш дали броячът може да се направи с комбинаторна логика или трябва логика с памет. Дали ще е синхронен или не? (не че няма асинхронни но пак казвам това е урок за по-напреднали и не е много нужен).

Ако си наясно с горното вече си готов да "програмираш" хардуер. Остава да научиш как се описва комбинаторна логика и логика с памет в един език за хардуер...
По принцип в VHDL няма изрично указване дали искаш едното или другото. Всичко се свежда до сигнали или вектор от сигнали (многобитови променливи).

Но има два вида оператори, едните sequentional демек които уловно се изпълняват последователно и други които се изпъляват паралелно. Като С програмист си наясно какво значи няколко оператора да се изпълнят последователно. При хардуера обаче цялата последователност се изпълнява за безкрайно малко време да кажем за нулево време. Демек ти може да си го представяш че уж се изпълняват един след друг, но тъй като всеки оператор се изпълнява точно за нула време и общо всичко се изпълнява за нула време "последователност" в буквалния смисъл на думата няма. По-скоро е "приоритет". Но като за С програмист ще ти е по-лесно да си го представяш като последователност и аз така ми е по-лесно ;-)
По-интересни са другите оператори - там всичките са независими един от друг и се изпълняват едновременно. Е такова животно няма на С.... Но ще свикнеш, примерно като напишеш:

a <= x+y;
b <= x-y;

Операцоята присвояване е "<=" няма значение кое е първо и кое е второ И двете присвоявания си се изпълняват постоянно във времето и паралелно едно на друго. Последователността в сорс файла няма никакво значение.

Но да се върнем на комбинаторната логика и паметите... И двете могат да се описват с поледователни или паралелни оператори. Комбинаторна логика се получава когато имаш пълно описание.

Примерно:
Код:
      if sum then
         a <= x+Y;
      else
         a <= x-Y;
      end if;

В случая "а" ти е описано като стойност, която може да определиш ако знаеш sum, x и y. Следователно нямаш нужда от памет...

Докато това:
Код:
      if sum then
         a <= x+Y;
      end if;


това изисква памет, понеже "а" се променя само ако sum е активен, а в останалото време трябва да си "помни" стойността. Това е така, защото е "непълно" описана и не може да кажеш колко е "а" ако сум е неактивен.

По принцип логиката с памет се синтезира в процеси... Процесът е все едно някаква функция, която се стартира при промяна на кой да е сигнал от sensitivity list-а (демек параметрите). По принцип съдържа "последователни" оператори, които се изпълняват и процесът заспива отново докато не се получи нова промяна дето да го събуди...

Ето ти го и брояча:
Код:
   count_proc: process(clk)
   begin
      if Rising_Edge(clk) then
         count <= count+1;
      end if;   
   end process;


Вто Фев 10, 2009 11:30 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Евала miro, да обясниш добре нещо е 10 пъти по трудно от колкото самия ти да го разбереш. Педагогиката ти иде отвътре.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Фев 10, 2009 1:44 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Цецо написа:
да обясниш добре нещо е 10 пъти по трудно от колкото самия ти да го разбереш.


Кой е казал че го разбирам?
аз просто ще го обясня 10-на пъти докато го разбера ;-)


Вто Фев 10, 2009 2:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение 
:prayer:

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Вто Фев 10, 2009 2:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 26, 2005 2:01 pm
Мнения: 1952
Местоположение: Варна
Мнение 
Айде недей да скромничиш.
Обяснението ти е много ясно и добре систематизирано. Може да се ковне някъде и да служи за първоначално насочване.

_________________
Най-опасният враг на истината и свободата е мнозинството.


Вто Фев 10, 2009 2:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Шегата настрана, навремето ми беше попаднал един документ може би 20-30 страници като въведение към VHDL и FPGA. Толкова ми беше харесал, че даже го бях превел на български...
Лошото е, че това беше преди 10+ години и от тогава съм сменил 10+ компютъра и съм го затрил безвъзвратно, даже нямам спомени как да изровя английския оригинал...

Но ако толкова има мераклии може да се понапъна да изровя из спомените си и ако други се включат да се спретне нещо подобно.... ама през почивните дни че сега ми е напечено


Вто Фев 10, 2009 3:12 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Аз мисля че и на английски да го постнеш, пак ще е добре. Все пак някакъв елемент на напън трябва да има при усвояването :)

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Фев 10, 2009 3:23 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Дълбоки благодарности на miro_atc за обясненията! :D :partyman:
Значи брояча е напълно елементарен синхронен, влиза клока вътре, излизат изходите на LED-ове. Код още не пиша, а и честно казано, с тия готини блокчета, едва ли ще ми се наложи. :)
Стигнал съм до схемата на снимката. За начало имам 2 въпроса:
Входния етикет не се отличава по нищо друго от останалите, само дето се казва "clk". Дали ще се усети, че е клок? Копирал съм го от пример и нямам представа. :) След това - за какво служи този IBUF? Също съм го копирал. :)


Прикачени файлове:
first_cnt.gif
first_cnt.gif [ 4.85 KiB | Прегледано 2225 пъти ]
Вто Фев 10, 2009 8:35 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Реконструктор написа:
честно казано, с тия готини блокчета, едва ли ще ми се наложи. :)

По принцип няма разлика дали ще работиш със схема или код. Схемата е удобна за визуално ориентиране, т.е. на 1 страница да видиш главните модули на един голям проект.
От там насетне същинската работа е много по-удобно с код. Сто страници текст са много по-лесни за редактиране с търсене и заменяне отколкото 100 страници схема.

Цитат:
Стигнал съм до схемата на снимката. За начало имам 2 въпроса:
Входния етикет не се отличава по нищо друго от останалите, само дето се казва "clk". Дали ще се усети, че е клок?

Само в Basic доколкото си спомням има връзка между името на една променлива и нейния тип. В случая това че се казва "clk" или "Clock" не е важно, важното е че се ползва на клок-входа на твоя брояч и той ще отброява при положителен фронт на тоя сигнал.

Цитат:
Копирал съм го от пример и нямам представа. :) След това - за какво служи този IBUF? Също съм го копирал. :)

Вътрешните буфери са нещо като коментарите на С, демек нямат отношение към работата на софтуера. Но понякога са полезни, защото редакторите обикновено не позволяват един сигнал да има две имена. Представиси че имаш готова схемка която очаква входен сигнал "clock" и друга схемка която изработва изходен сигнал "clk". Ако ги вземеш тия две схемки и ги копнеш в един общ проект, ще имаш проблем ако ги свържеш накъсо двата сигнала. Но ако сложиш един буфер по средата няма проблем входът му да се казва по един начин, а изхода по друг.

edit: По друг начин ако на С декларираш една променлива, после я присвоиш на друга после на трета и т..н. това не променя резултът от програмата. Ех, ако включиш оптимизации компилатора ще се опита да разкара излишните присвоявания. Разликата при хардуера е, само това, че оптимизацията винаги е включена и винаги е перфектна.

Винаги когато използваш комбинаторна логика - (буферът е такъв) нещата се минимизират с таблици на Карно/Вейч и от това, което си задал, остава единственото "логиката". Демек ти може да си чертаеш колкото искаш буферчета, И-НЕ елементи и т.н. но то изобщо няма да гледа схемата ти като схема, а само логиката -> каква е стойността на изход Y при даден X на входа...


Вто Фев 10, 2009 10:32 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
miro_atc написа:
Само в Basic доколкото си спомням има връзка между името на една променлива и нейния тип. В случая това че се казва "clk" или "Clock" не е важно, важното е че се ползва на клок-входа на твоя брояч и той ще отброява при положителен фронт на тоя сигнал.


Значи, за да работи схемата с генератора, монтиран на платката, трябва да го проследя на кой пин влиза и да го свържа с входа на схемата?
Тоест, на тези FPGA клок се слага на който си искаш пин?


Вто Фев 10, 2009 11:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Средата накрая трябва да те пита на кой пин кой сигнал искаш да сложиш.


Сря Фев 11, 2009 12:02 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Реконструктор написа:
Значи, за да работи схемата с генератора, монтиран на платката, трябва да го проследя на кой пин влиза и да го свържа с входа на схемата?
Тоест, на тези FPGA клок се слага на който си искаш пин?


Естествено, че ако имаш платка и тоя сигнал отива на даден пин просто го свързваш към схемата... няма да преправяш платката я ;-)

Иначе CPLD/FPGA-тата си имат:
* general purpouse пинове (GPIO), които могат да бъдат входове/изходи включително клок или нещо друго
* специализирани клок входове - тва са само клок входове
* понякога има и само входове, които могат да бъдат всякакви входове, но не и изход
* специализирани пинове - за програмиране, глобални ресети и т.н.

Ако нямаш големи претенции всеки GPIO може да го ползваш като клок. Разбира се, ако правиш платка и имаш външен клок генератор най-добре е той да е вързан към специализиран клок вход, това си има следните предимства:
* клок входовете са рутирани в чипа много внимателно. За разлика от general purpouse сигналите дето ходят почти навсякъде из чипа, клоковете ходят само там където са нужни - към селектора на клок за всеки тригер. Доброто рутиране намалява шумовете и излъчванията. А "спеставванетп" на възможните дестинации намаля консумацията.
* Архитектурата на едно CPLD или FPGA найчесто се базира на "клетка", която е един или няколко тригера (бита) и после имаш група от клетки или блок. Сега термините зависят от производителя, но общо взето правилото е, че клетките от един блок могат да бъдат клоквани с набор от клокове. В тоя набор обикновено влизат всички специализирани клок входове. Така коя да е клетка може да е клоквана от клок вход - директно. Докато нормалните пинове обикновено не са директно включени в набора с клокове. За да се ползва нормален пин като клок понякога се налага той да бъде прекарен през нормална клетка, чийто изход е да кажем достъпен в набора от клокове. Нещо повече, това важи само за един блок. Демек ако искаш да направиш един GPIO - глобален клок ще претрепиш по една клетка от всеки блок. При едно FPGA от 3000 или даже 5,000,000 клетки няколко утрепани клетки едва ли са фатални. Но при CPLD с 32 клетки всяка клетка е "ценна" ;-)
Другото лошо на тия буферирания е че вкарват закъснения и те не винаги са еднакви във всички блокове. И ако бачкаш на висок клок и нещата станат "на косъм" след всяка прекомпилация на проекта то може по различен начин да реши да ги буферира и съответно се появяват и изчезват разни духове и не знаеш от промените в кода ли е, или просто някой косъм е мръднал...

Предполагам скоростта и закъсненията едва ли те бъркат, това са проблеми при над 100MHz. Така че не е толкова фатално ако ползваш GPIO за клок...


Сря Фев 11, 2009 12:34 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 28 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни