| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Въпрос за Rotate Left/Right във VHDL http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=2123 |
Страница 1 от 1 |
| Автор: | Bezmozachen [ Чет Мар 30, 2006 10:20 pm ] |
| Заглавие: | Въпрос за Rotate Left/Right във VHDL |
Как мога да ротирам STD_LOGIC_VECTOR. Трябва ли да използвам примитива на шифт регистър или има начин на VHDL да стане. Съжалявам за тъпия въпрос, но едва от вчера се занимавам с програмируема логика |
|
| Автор: | Zdrav [ Пет Мар 31, 2006 12:16 am ] |
| Заглавие: | |
В крайна сметка с VHDL можеш да опишеш много по-сложни неща от колкото може да програмираш успешно на практика в конкретна матрица. Т. е. дори и да го напишеш на VHDL накрая след компилацията и оптимизацията или ще бъде заделен за това преместващ регистър или ще бъдеш изненадан от резултата. От моя скромен опит със CPLD това беше основното нещо което научих. За това сега избягвам да пиша засукани сорсове ами проекта го правя като схема, отделните блокчета на която се знае какво правят. |
|
| Автор: | Bezmozachen [ Пет Мар 31, 2006 12:30 am ] |
| Заглавие: | |
Малко некоректно съм го задал въпроса. Имах предвид някакъв оператор. Иначе си реших проблема по друг начин. |
|
| Автор: | miro_atc [ Пет Мар 31, 2006 11:45 am ] |
| Заглавие: | |
с VHDL обикновено се описва връзката между един сигнал и друг сигнал. Преди всичко, зависи дали описваш комбинаторна логика, или логика с памет (тригери). Ако е комбинаторна логиката, един вектор не можеш да го шифтваш/ротираш, т.е. да го модифицираш. Но може да присвоиш на друг вектор определи сигнали от първия. Примерно: ror_result <= reg(0) & reg(7 downto 1); забележи че оператора & е за конкатенация, а не логическо И. Ако е логика с памет, може да направиш и шифт регистър, но трябва да опишеш процес. Примерно: MYROR_PROC: process(clk) begin if Rising_Edge(clk) then reg <= reg(0) & reg(7 downto 1); end process; В случая по предния фронт на clk reg се завърта... Може по всякакъв начин да подредиш битовете, така че да се върти наляво, надясно и т.н. Ако ти трябва променлив брой завъртания се ползва barrel shifter, обикновено има протипи за това. |
|
| Автор: | Bezmozachen [ Пет Мар 31, 2006 12:12 pm ] |
| Заглавие: | |
Благодаря. Точно за това питах. Предполагам че при реализация с FPGA втория метод е за предпочитане. |
|
| Автор: | miro_atc [ Пет Мар 31, 2006 12:36 pm ] |
| Заглавие: | |
ами в единия случай се получава буфер, а в другия регистър. не знам кое е за предпочитане - зависи какво ти трябва Нещата не са взаимнозаменяеми, но ако допуснем че имаш възможност да избираш май по-добре е първия вариант, защото вътрешните буфери изчезват при компилация, т.е. не заемат ресурси, докато регистрите, освен ако не си ги дублирал трудно се оптимизрат и заемат ресурси... Преди всичко по-важно е да работи, така че слагай това което ти трябва |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|