Отговори на тема  [ 14 мнения ] 
VHDL Basics 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 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:


Нед Ное 27, 2005 8:43 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
... мда малко се поизясниха нещата. В горния пример става въпрос за сигнали (A,B,C,D,E), при тях важи това правило, че новите стойности се присвояват след приключване на процеса. А езикът си разполага и с "нормалните" променливи при които такова забавяне не съществува.


Нед Ное 27, 2005 8:52 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Мда ... объркващото е това че всичко се изпълнява синхронно от логиката .... т.е не е като при процесорите ред по ред ... :)

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Нед Ное 27, 2005 8:56 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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


Нед Ное 27, 2005 9:00 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Ами то не е точно объркващо, по скоро подвеждащо, трябва да се мисли за конкуренция на сигналите и събитията, но който се е занимавал с цифрова техника няма особенни проблеми :)


Нед Ное 27, 2005 9:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Е сега, който се е занимавал, тепърва навлизаме в темата :D


Нед Ное 27, 2005 9:18 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 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 ?

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Нед Ное 27, 2005 11:58 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Нали правим D<=2 и тогава завъртаме процеса, от там, A=D+1=3


Пон Ное 28, 2005 12:06 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Къде видя D <= каквото и да е било :? 8O

Код:


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



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

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пон Ное 28, 2005 12:12 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Самоцитирам се:
Цитат:
Началните стойности са:
A=1, B=1, C=1, D=1, E=1

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


Пон Ное 28, 2005 12:16 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Пичова, престанете да гледате на VHDL кода като на инструкция за нещо си, която се чете ред по ред. Разбърквате редовете и както и да ги разбъркате, резултатът трябва да е един и същи. ако е различен : имате правописна грешка. :lol:


Пон Ное 28, 2005 12:49 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
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) ). :)

та ... ? :)

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пон Ное 28, 2005 1:48 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Дек 22, 2004 2:56 pm
Мнения: 347
Местоположение: Хасково
Мнение 
Цитат:
process(C,D)
begin
A <= 2;
B <= A + C;
A <= D + 1;
E <= A * 2;
end process;


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


Пон Ное 28, 2005 10:04 am
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 20, 2005 5:02 pm
Мнения: 108
Мнение 
Има разлика между знаците за присвояване "<=" и "=". Едните се наричат blocking assignments, а другите non-blocking assignments.


Пон Ное 28, 2005 11:59 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 14 мнения ] 

Кой е на линия

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


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

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