Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

VHDL Basics
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=1343
Страница 1 от 1

Автор:  HCL [ Нед Ное 27, 2005 8:43 pm ]
Заглавие:  VHDL Basics

Този език е нещо уникално. Чета едно туториалче и му се радвам.
Вижте този пример:

Цитат:
process(C,D)
begin
A <= 2;
B <= A + C;
A <= D + 1;
E <= A * 2;
end process;


Началните стойности са:
A=1, B=1, C=1, D=1, E=1

сега променяме D=2
и след едно завъртане на процеса имаме нови стойности:
A=3, B=2, C=1, D=2, E=2

което означава, че новите стойности се изчисляват след приключването на процеса, т.е. когато стигнем end process.
Звучи малко смахнато а. Да не говорим, че кодът по-горе представлява безкраен цикъл.Може би е по-правилно да се каже че тук цикли няма има процеси, които сe въртят безкрайно :rolleyes:

Автор:  HCL [ Нед Ное 27, 2005 8:52 pm ]
Заглавие: 

... мда малко се поизясниха нещата. В горния пример става въпрос за сигнали (A,B,C,D,E), при тях важи това правило, че новите стойности се присвояват след приключване на процеса. А езикът си разполага и с "нормалните" променливи при които такова забавяне не съществува.

Автор:  BrainStorm [ Нед Ное 27, 2005 8:56 pm ]
Заглавие: 

Мда ... объркващото е това че всичко се изпълнява синхронно от логиката .... т.е не е като при процесорите ред по ред ... :)

Автор:  bateAz [ Нед Ное 27, 2005 9:00 pm ]
Заглавие: 

Подобно нещо може да се направи и на практика в хардуера. Лаиците му викат "късо". В случая "късото" ти е между редовете A <= 2 и A <= D + 1.
Просто се чудя как компилаторът не те е сритал в кокълчетата.
Във VHDL редовете не се изпълняват последователно, а паралелно всичките. На пръв поглед звучи абсурдно, но е така. На C например описваш какво да направи процесора и той го прави последователно, щото ALU-то му е едно. В хардуера всички сигнали си се обработват едновременно и независимо един от друг, естествено , ако така си го описал.

Автор:  ToHu [ Нед Ное 27, 2005 9:03 pm ]
Заглавие: 

Ами то не е точно объркващо, по скоро подвеждащо, трябва да се мисли за конкуренция на сигналите и събитията, но който се е занимавал с цифрова техника няма особенни проблеми :)

Автор:  HCL [ Нед Ное 27, 2005 9:18 pm ]
Заглавие: 

Е сега, който се е занимавал, тепърва навлизаме в темата :D

Автор:  the_real_maniac [ Нед Ное 27, 2005 11:58 pm ]
Заглавие:  Re: VHDL Basics

HCL написа:
Този език е нещо уникално. Чета едно туториалче и му се радвам.
Вижте този пример:

Цитат:
process(C,D)
begin
A <= 2;
B <= A + C;
A <= D + 1;
E <= A * 2;
end process;


Началните стойности са:
A=1, B=1, C=1, D=1, E=1

сега променяме D=2
и след едно завъртане на процеса имаме нови стойности:
A=3, B=2, C=1, D=2, E=2

което означава, че новите стойности се изчисляват след приключването на процеса, т.е. когато стигнем end process.
Звучи малко смахнато а. Да не говорим, че кодът по-горе представлява безкраен цикъл.Може би е по-правилно да се каже че тук цикли няма има процеси, които сe въртят безкрайно :rolleyes:


Наистина странна аритметика ,но ок:

A=1 B=1 C=1 D=1 E=1

новите стойности се изчисляват след края на процеса.

A <= 2;

A за момента е 1

B <= A + C;

C си е 1 , B след края на функцията ще е 1+1 = 2 , B e точно, C не се променя докрая = 1, точно.

A <= D + 1;

Ако важат и двете действия A=2 + D=1 + 1 = 4 , не 3 ?
Ако важи последното дейстивие А= D=1 + 1 = 2 , не 3 ?
нещо не ми се връзва

E <= A * 2;

Е = А=1 * 2 = 2 , E e точно


Остава въпроса кога Д става 2 и как А става 3 ?

Автор:  ToHu [ Пон Ное 28, 2005 12:06 am ]
Заглавие: 

Нали правим D<=2 и тогава завъртаме процеса, от там, A=D+1=3

Автор:  the_real_maniac [ Пон Ное 28, 2005 12:12 am ]
Заглавие: 

Къде видя D <= каквото и да е било :? 8O

Код:


process(C,D)
begin
A <= 2;
B <= A + C;
A <= D + 1;
E <= A * 2;
end process;



Няма D <= X ??? :-k :roll:

Автор:  HCL [ Пон Ное 28, 2005 12:16 am ]
Заглавие: 

Самоцитирам се:
Цитат:
Началните стойности са:
A=1, B=1, C=1, D=1, E=1

сега променяме D=2 -- или иначе казано D<=2; :)
и след едно завъртане на процеса имаме нови стойности:
A=3, B=2, C=1, D=2, E=2

Автор:  bateAz [ Пон Ное 28, 2005 12:49 am ]
Заглавие: 

Пичова, престанете да гледате на VHDL кода като на инструкция за нещо си, която се чете ред по ред. Разбърквате редовете и както и да ги разбъркате, резултатът трябва да е един и същи. ако е различен : имате правописна грешка. :lol:

Автор:  the_real_maniac [ Пон Ное 28, 2005 1:48 am ]
Заглавие: 

HCL написа:
Самоцитирам се:
Цитат:
Началните стойности са:
A=1, B=1, C=1, D=1, E=1

сега променяме D=2 -- или иначе казано D<=2; :)
и след едно завъртане на процеса имаме нови стойности:
A=3, B=2, C=1, D=2, E=2


оу ... моя грешка ... малка , но съществена.

Като цяло даже от подписа ми , може да се види , че не се занимавам с CPLD-та и подобни прог. логики,но ми стана интересен самият случей и друго ... това <= за какво е небходимо, първо си помислих след като не е станд <(по-малко) значи може би сочи на кой се предава стойността , на кой от давата операнда от двете страни или в коя посока, знам ли :)

нещо като при пренасочване на потока (someprog > somefile (for example) ). :)

та ... ? :)

Автор:  MGBY [ Пон Ное 28, 2005 10:04 am ]
Заглавие: 

Цитат:
process(C,D)
begin
A <= 2;
B <= A + C;
A <= D + 1;
E <= A * 2;
end process;


Маниак, забележи, че процеса е чувствителен към промяна на някой от двата сигнала C или D - от там идва промяната :wink:

Автор:  uglyduck [ Пон Ное 28, 2005 11:59 am ]
Заглавие: 

Има разлика между знаците за присвояване "<=" и "=". Едните се наричат blocking assignments, а другите non-blocking assignments.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/