Отговори на тема  [ 6 мнения ] 
Въпрос за Rotate Left/Right във VHDL 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 27, 2005 2:47 pm
Мнения: 349
Местоположение: Varna
Мнение Въпрос за Rotate Left/Right във VHDL
Как мога да ротирам STD_LOGIC_VECTOR. Трябва ли да използвам примитива на шифт регистър или има начин на VHDL да стане. Съжалявам за тъпия въпрос, но едва от вчера се занимавам с програмируема логика :oops: .


Чет Мар 30, 2006 10:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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


Пет Мар 31, 2006 12:16 am
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 27, 2005 2:47 pm
Мнения: 349
Местоположение: Varna
Мнение 
Малко некоректно съм го задал въпроса. Имах предвид някакъв оператор. Иначе си реших проблема по друг начин. :D


Пет Мар 31, 2006 12:30 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
с 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, обикновено има протипи за това.


Пет Мар 31, 2006 11:45 am
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 27, 2005 2:47 pm
Мнения: 349
Местоположение: Varna
Мнение 
Благодаря. Точно за това питах. Предполагам че при реализация с FPGA втория метод е за предпочитане.


Пет Мар 31, 2006 12:12 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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


Пет Мар 31, 2006 12:36 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

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


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

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