|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:40 am
vhdl или abel ще стане по-бързо?
| Автор |
Съобщение |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
 vhdl или abel ще стане по-бързо?
Не съм ползвал нито едното досега. Ползвал съм главно моя си логически
компилатор и phdl (последният потрябва за да разгадая оная част от coolrunner-ите
на филипс, дето бяха "забравили" да ми дадат).
Май abel е доста подобен на phdl и елементарен; това, което ще правя, също е елементарно
(ще влезе с лекота в 128 клетков coolrunner от новите, дето все още моят компилатор
не ги знае и няма време да го уча за тоя проект).
Някакъв vhdl опит очевидно ще ми е по-полезен, знам ли кога coolrunner-ите ще
ми отеснеят, но пък главното е да стане бързо - да няма учене повече от ден-два
до първия резултат, и да мога да контролирам нещата до най-ниско ниво.
vhdl-ът дава ли последната възможност? Ако не, забравям го докато потрябва.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пет Сеп 11, 2009 9:14 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
В средата za Xilinx има Схематик Едитор или нещо подобно беше.
Не съм го ползвал, но когато започвах с логоките ми се струваше най-лесен като за начало и за опростени работи, има си библиотека с някакви базови логически модули.
|
| Пет Сеп 11, 2009 9:30 pm |
|
 |
|
head_up
Ранг: Форумен бог
Регистриран на: Нед Юни 01, 2008 9:54 pm Мнения: 1503 Местоположение: Пловдив
|
май трябва да учотниш тооочно какви искаш да правиш. и "най-ниско ниво" в цплд-та и фпга-тата е доста относително - можеш да ползваш примитиви, което обикновенно ти дава предимство доста да моделираш логиката до най-близкото желано състояние, т.е. да решиш по-успешно от синтезатора много от логическите уравнения (става, повярвай). но абсолютното ниско ниво е да руутваш сам в едитора да кажем след синтезиса, което вярвам в българия я има 2-ма души дето да го могат, а може и толкова да няма. ако кажеш каква точно е задачата на този фрагмент може да успея да ти помогна (с верилог обаче, вхдл-то не ми е много сила, абела ми е непознат).
|
| Пет Сеп 11, 2009 9:36 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
какво си решил да правиш?
доколкото те познавам, мисля че абела ще ти пасне повече на хардуерната душа.
|
| Пет Сеп 11, 2009 9:45 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
@tqi,
КАТЕГОРИЧНО ти забранявам дори да си мислиш за ABEL
Това не е език, а по-скоро нет-лист! Работата с него е мъчение, а резултатът отвратителен! Проблемът е че работиш на много ниско ниво, което за теб може и да не е проблем, защото ти си падаш по асемблиране, но в случая правиш нет-лист на схема с едни компоненти, а компилатора трябва да направи схема с други компоненти.
Все едно да пишеш на асемблер за х86 пък после да се конвертира за РРС. Можеш да си представиш какъв код ще се получи!
Ако ще се двуумиш прави го между verilog и vhdl. Разликата там е в синтаксиса. Който синтаксис ти допадне - него ползвай. Предимствата на HDL-те е, че описваш логика, а не схема. Така даваш шанс на компилатора да ти направи сравнително добра схема, защото той много добре познава наличните компоненти (инструкции) и има логика, която може да преработи така че да се получи най-подходящата схема.
Иначе конкретно, с ABEL е почти невъзможно да правиш йерархия и да пишеш универсален код, който да ползваш в различни проекти. Все едно асемблер, без макроси и без подпрограми. А то дори и да имаше макроси и подпрограми, ти се стремиш да направиш схемата според конкретната архитектура на PLD-то. А всяко CPLD и всяко FPGA е с различна архитектура.
Докато на HDL може да си правиш библиотеки т.е. никакви проблеми с "макроси" или "подпрограми". А пък дори и да искаш да си обвържеш кода с конкретна архитектура ще ти е трудно, т.е. кодът ти е платформено независим.
Но аз най-много ценя изразните средства и идеята за понятието "процес". С две думи с това се описва синхронна логика. Но вместо да избереш някакъв тип тригер (D, T, JK...) и да направиш нет-лист на пиновете правиш алгоритъм от сорта "ако има фронт, ако тоя пин е такъва, ако това, ако онова...".
Самата идея е много интересна - ти описваш алгоритъм от стъпки, което на С би се изпълнило стъпка по стъпка. Докато на PLD се изпълнява "мигновено" - няма никакви стъпки... Всъщност последователността се свежда до "приоритети". Убеден съм, че като човек свикнал да мисли алгоритмично това ще ти допадне, защото много по-лесно ще ти е да мислиш по тоя начин.
И на самия компилатор това много му допада, щото той може да си избере какви тригери да ползва и как да ги навърже.
За сравнение при АБЕЛ трябва да измислиш схема от някакви тригери. Много тригери... А пък компилаторът трябва да се чуди какво да прави ако ти си сложил един вид тригери, а пък в матричката има друг вид....
|
| Пет Сеп 11, 2009 10:31 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Ми аз искам именно ниското ниво, няма да му сменям платформата.
После аз обикновено изстисквам нещата до последно, няма да повярвате кво
съм успявал да напъхам в 64 клетково cpld.
Обаче Миро сериозно ме плаши - тоя abel, дето го дават xilinx уж за coolrunner-а,
наистина ли не знае всичко за него? Не мога ли да му казвам неща от рода на
"тая клетка, буфериран/небуфериран изход, инвертиран/неинвертиран, наклочен
от еди-къде си, тристейтнат от еди къде си" и такива работи? Ако не знае точната
архитектура надолу не би могъл да ми даде всички възможности - наистина ли е
толкова зле?
Не ми трябват улеснения, само достъп до пълните възможности на силиция.
Инак това, дето ще правя, е просто; сериализация на паралелни данни и подобни.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пет Сеп 11, 2009 10:43 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
абе има разни пропъртита за всеки пин.
повечето са стандартни, но има и специфични за xilinx. отделно има специфични и за фамилията на чипа.
най-добре разгледай хелпа - има примери.
един вентилатор на тази книжка вероятно ще те ориентира също
ftp://ftp.xilinx.com/pub/documentation/interfaces/xabel.pdf
може би ще ти допадне синтаксис като:
pin1.oe=a0;
d0.k=clk;
datareg.d := insig.pin;
и т.н.
по спомен phdl би трябвало е я някакъв под-сет на абела, а не на VHDL?
|
| Пет Сеп 11, 2009 11:12 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Ми май за такава връзка и аз помня (phdl/abel), а щом има тия работи, дето
ми ги даваш за пример, ще ми стигне.
С подобни на времето мъчих седмица-две phdl-а, докато разгадая как рути
вътре мултиплексора в coolrunner-a, то това ютилити, дето го бях писал за разгадаване
от jedec пак ще влиза в работа и за тия явно, ама след тоя проект.
Ще се образовам идните дни като остане време и ще докладвам кво съм
направил  .
Ама трябва да сглобя нещото първо, дано утре събера куража да почна да
подреждам по платката... (че не е малка а и от месеци насам само програмирам,
та си е бариера за прескачане).
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пет Сеп 11, 2009 11:23 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
абе като за начало може и да се изсимулираш.
много е реалистичен симулатора. не се с лучвало да не видя нещо на него, дето се вижда с осцилоскопа.
пък и е на любимата ми фирма - ментор
може и да остарявам, но напоследък ми се струва по-разумно да цъкам 2 дена с мишата по симулатор, отколкото да размахвам една седмица поялник
|
| Пет Сеп 11, 2009 11:48 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Просто забрави да работиш на ниско ниво!
Първо никога не знаеш какво точно има вътре. Е, хайде дават някакво описание на една клетка... колко входа има (това е важно), какви функции, каква технология - дали LUT или тригери + комбинаторна логика. Ама забрави да си мислиш че ще си по-добър от компилатор.... Нямаш никакъв шанс!
Примерно имам проекти с по няколко хиляди макроклетки. Ти представяш ли си да седна да определям кой сигнал от коя клетка да се получава и до кои да ходи... Да смятам времезакъснения и да оптимизирам пътища така че критичните сигнали да се вместят в честотата която ми трябва. А то не че мога да го сметна, щото никой няма да ми даде какво е закъснението от X до Y....
Всъщност... времезакъсненията биха могли да се свалят  Като компилираш даден проект ти показва кой сигнал, къде го е рутнал и ако пуснеш симулации може да видиш и времена....
Но и да имаш данните, това е невъобразима хамалогия. По-скоро бих се самоубил, отколкото да седна да се занимавам с подобно нещо
Иначе това описваш на ABEL е виртуално. Ти казваш сложи един D-тригер примерно, на входа му подай тоя сигнал, за ресета тоя сигнал и т.н. Комбинаторната логика то естествено ти я оптимизира. Но за всеки твой виртуален тригер, то трябва да избере реална клетка. Със CPLD-та скоро не съм се занимавал, а и специално xilinx са ми непознати. Но да кажем при lattice едно време в една клетка слагаха един тригер и програмируема функция с N на брой входа (N варира според конкретното чипче). Всеки изход на пин, задължително консумира една клетка, независимо дали е комбинаторна логика или логика с памет. Всеки бит (памет) яде 1 клетка (освен ако не е и изход-пин). Ако функцията която управлява клетката си я написал е с повече входове или по-сложна се ядат още клетки които се навързват каскадно. А пък тригера е от един определен вид, с определен брой входове (синхронни, или асинхронни). Като функциите на асинхронните и функцията на клока са много ограничени (ако изобщо може да са функция) и ако зададеш по-сложна логика - хоп още изядени клетки. Специалните пинове (асинхронни ресет, сет и т.н.) също не са пълен комплект. Обикновено само примерно ресет. Ако ти искаш "сет" - прави се с ресет + инвертор на изхода.
.....
И още хиляди детайли за конкретната реализация. А както казах на ABEL ти ползваш виртуални тригери - може да смесваш различни по тип, да ползваш сет/ресет и колкото и каквито входове искаш и т.н. Ако искаш един твой виртуален тригер да се компилира до 1 клетка трябва да внимаваш какви "виртуалности" ползваш. Иначе - хоп, клетките свършили...
И друг номер... с "мега-блоковете" - клетките образуват групи и вътре в групата свързаността е добра. Но ако трябва да прехвърляш междинни сигнали от един мегаблок в друг... айде пак заносани клетки, щото само изходите на всички клетки и всички пинове са в глобалната рутинг таблица, но не и междинните сигнали... А пък като почне да се понапълва CPLD-то и компилатора почва да се шашка - добавяш логика за още 1 клетка, но в блока който трябва да се сложи няма място и то размества и накрая вместо 1 изяжда 2-3 клетки...
Но и ти да си, и ти ще се шашкаш
Истината е само HDL-те, щото не задаваш какви тригери да се ползват, дали да има сет или ресет.... Компилаторът ги избира тези подробности вместо теб. Ти казваш "искам сигнал с такава логика..." Не те интересува дали ще ползва И-НЕ, или ИЛИ-НЕ, дали D или T или JK или RS или други тригери...
|
| Пет Сеп 11, 2009 11:52 pm |
|
 |
|
head_up
Ранг: Форумен бог
Регистриран на: Нед Юни 01, 2008 9:54 pm Мнения: 1503 Местоположение: Пловдив
|
@tgi, много добър резултат <= ( верилог + примитиви );
да напишеш конвертиране от паралелен тип данни в последователен е сравнително лесно на този принцип. дори и само верилога ще ти свърши достатъчно добра работа, без да дълбаеш в примитивите, ако спазваш някакви правила при писане - синтезатора успешно разпознава повечето структури които се опитваш да напишеш. например:
 |  |  |  | Код: module p_to_s ( clk, rst, data_in, data_out, read_en, write_en ); input clk, rst, read_en, write_en; //входове, еднобитови input [7:0] data_in; //вход 8 битов output data_out; //изход, еднобитов
reg [7:0] data_reg;
always@(posedge clk or posedge rst) // да си заредиш паралелните данни в регистър по положителен фронт на клока или да го нулираш if(rst == 1'b1) data_reg [7:0] <= 0; //нулирай рег-а else if(read_en == 1'b1) //ако е разрешено четенето от регистъра data_reg [7:0] <= {data_reg [6:0] , data_reg [7]} ; //шифтваш си на воля все на ляво, нищо не губиш else if(write_en == 1'b1) //ако е разрешен записа в регистъра data_reg [7:0] <= data_in [7:0]; //зареди данните в този ред (можеш и да ги swap-неш лесно -> [0:7] ) assign data_out = data_reg [7]; // хващаш състоянието на осмият бит от дата рег-а (тоя дето постоянно се променя заради шифта)
endmodule |  |  |  |  |
това е наааай-прост пример, разбира се не от най-функционалните, но е показно колко лесно се пише конвертирането. и с другото е така.
|
| Съб Сеп 12, 2009 12:27 am |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Стига бе, Миро, колко неща съм направил така. Говоря за cpld-ta със 128 до 512 клетки. Никой компилатор не може да сгъне и половината от това, което аз съм сгъвал вътре, всеки бит ми влиза в работа (то на мене всичко ми влиза в работа, така ми казваше майка ми едно време като бях малък  ). Е в тоя случай явно ниското ниво не ти трябва, много по-бърз ще си на високото ако имаш достатъчен ресурс в силиция. Но моите 128 хубави клетки не ги давам на компилатора, искам си ги всичките. Без моя си компилатор с макротата и DPS скрипта в него ще е рошава работа, но ще стане някак, по-добре отколкото да нямам контрол и като не ще да мога само да го гледам тъпо (т.е. не ми се поема такъв риск с vhdl-а, затова и питам). Ето един стар файл с моя логически език/компилатор; с две макрота 32 данни са групирани в 32 реда: http://tgi-sci.com/misc/mb2ata.txt . Е, синтаксисът и на макротата, и на скрипта (езикът го ползва като външен обект, който препроцесира редовете) са мощни, ама то идеята нали е всичко да ни влиза в работа  . На мене това ми е стилът на мислене/работа, ако abel е по-близко до това от vhdl-а той ще свърши работата.
Е кво правя като ми трябва тригер със reset отнякъде? Аз ако това не мога
да го пипам хич не ща и да чуя за тия HDL-и. Ама би трябвало да може, xilinx
дават описание на клетките и в fpga-тата си, все някой ги ползва тия работи?
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Съб Сеп 12, 2009 12:48 am |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
head_up,
мерси за примера. Ами добре и изкушаващо изглежда. Малко по-високо ниво
на абстракция е отколкото аз бих искал, ама звучи сякаш човек може да отиде
и по-надолу ако потрябва - това рутене на ръка след синтезиса може ли човек
да го прави с безплатния пакет на xilinx ?
Ще падне чудене още някой друг ден докато поя и т.н.
Каква е мъката за първоначално учене (т.е. еквивалентът на "до първото hello world" )?
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Съб Сеп 12, 2009 12:57 am |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Не бе, ти за съвсем откачен взе да ме броиш вече. И аз предпочитам симулатора
пред поялника, луд може да съм ама ефикасността ми е висш приоритет; симулаторът
пести време от не толкова голяма сложност нагоре. За 64 клетковите cpld-та и за
това 128 по-скоро ще ми загуби време, то поялник там няма да играе (и не е играл
с ония 64-битовите). Ама пак има симулатор, де - на органична основа, гледащ
в екрана...  .
То на тая платка cpld-то е най-дребното нещо, не бих го споменавал ако имах
вариант да го програмирам бит по бит на ръка без да уча разни шарени интерфейси
и идиотизми - ама не знам кой бит за кво му е. Та затова почването да подреждам
части и да пускам печки ми е бариера, бая приключение си ме очаква.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Съб Сеп 12, 2009 1:42 am |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
определено не познавам много хора с твоя стил.
то и едно време бяхте малко, а сега съвсем изчезна конкуренцията.
но не се възгордявай чак толкова. на всеки от нас тук му хлопа по някоя дъска 
|
| Съб Сеп 12, 2009 7:38 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|