Перейти к содержанию

Не Работает Сдвиговый Регистр В Верилог


Leo

Рекомендуемые сообщения

Можно в цикле, через generate, например

parameter CYC_NUM = 80;

genvar i;
generate
  for (i  = 0;i <= (CYC_NUM - 1);i  = i + 1)
  begin : more_assign
	  assign sr_out[i] = sr[i];
  end
endgenerate

Эта конструкция позволяет однотипные блоки кода программировать. Я её упростил, сделал не по 8 бит, а по одному. Так что если захочешь использовать, то переделай сам.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов 144
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Вопрос простой но важный заполняя регистр данными как контролировать его заполнение 1 вариант счетчик ещё пришло в голову гнать впереди данных 1 и при заполнении данными выталкивать как значение к действию а потом после обработки данных обнулять регистр. Если в этом толк или есть способ лучше?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Не знаю в новую это тему или нет . Не могу разобраться с знаковыми и без занаковыми числами при вычитании из меньшего большее должно быть отрицательное значение чего нет. Меня интерисует результат без знака но и знак обрабатывается интересно как. Вычитаю регистры 8 битные и сохраняю в регистр где то сказано что надо использовать integer а где то signed

но положительного результата пока не получил.

Ссылка на комментарий
Поделиться на другие сайты

При вычитании из меньшего большее - не всегда будет отрицательное число.

Попробуй несколько вариантов и поймёшь, простейшая вещь же.

Ссылка на комментарий
Поделиться на другие сайты

Результат я понимаю но можно ли сделать как в арифметике результат отрицательный но без знака простым способом что то где то указать.

Ссылка на комментарий
Поделиться на другие сайты

Ну использовать signed reg и signed wire.

Либо пересмотреть алгоритм работы с возможностью отказаться от отрицательных результатов вычислений. Это же целочисленная арифметика. Тут не имеет значения число от -128 до 127 или от 0 до 255 - это одно и то же.

Ссылка на комментарий
Поделиться на другие сайты

reg signed [7:0]v = 8'h40; указание сделал для входящих регисторов и для исходящего. У меня это пока не заработало но входящие не отрицательные при каких условиях это срабатывает.

Ссылка на комментарий
Поделиться на другие сайты

Ну гляди. Допустим первое восьмибитное число 0, второе восьмибитное 1. Вычтем из первого второе.

Получится в двоичном виде "11111111" - это 255 в беззнаковом виде или -1 в двоичном дополнительном коде.

То есть результат един, далее зависит уже как ты сам его воспринимаешь.

Ссылка на комментарий
Поделиться на другие сайты

signed иногда удобно использовать при сравнении чисел (больше или меньше и т.п.). А в остальном большого смысла в них нет.

Лучше вообще без них обходиться, поскольку разные синтезаторы и компиляторы могут по разному их воспринимать или обрабатывать.

Изменено пользователем Vascom
Ссылка на комментарий
Поделиться на другие сайты

Я не смог разобраться с твоим кодом программирование однотипных блоков можно пояснение.

genvar i;
generate
	  for (i  = 0;i <= (CYC_NUM - 1);i  = i + 1) 
	  begin : more_assign
			  assign sr_out[i] = sr[i];
	  end
endgenerate

CYC_NUM=80 значит 80-1=79 i=79 но дальше i+1 79+1 =80 что чему присваивается в assign sr_out = sr;

more_assign это название этого модуля.

Ссылка на комментарий
Поделиться на другие сайты

Цикл заполнит wire sr_out от 0 до 79 (то есть 80 элементов). Присваиваются тут значения из регистра sr в wire sr_out.

Естественно тут можно написать всё, что требуется. Сделать их например не однобитными, а 8-битными. Вроде всё просто.

Да, more_assign - это название, оно обязательно для таких конструкций.

Что конкретно непонятно?

Ссылка на комментарий
Поделиться на другие сайты

Не понятна тогда выражение i = i + 1 получается дальше выполняется i = 79 + 1 или я не понимаю это тоже i которое получилось из i <= (CYC_NUM - 1). Это выражение i = i + 1 отдельно ведь не работает она увеличивает счетчик.

Ссылка на комментарий
Поделиться на другие сайты

Так работает цикл for:

1. Сперва i присваивается начальное значение. В нашем случае 0.

2. Проверяется соответствие условию. В нашем случае i меньше либо равно 79.

Если удовлетворяет условию, то выполняется выражение.

3. Затем изменяется i. В нашем случае оно увеличивается на 1.

И цикл повторяется с пункта 2.

Когда i станет равно 80, оно не удовлетворит условию и цикл прервётся.

Ссылка на комментарий
Поделиться на другие сайты

Попробовал переделать под 8 бит но не работает assign sr_out не заполняет что то не так переделал.

   sr <= { sr[23:0],sr_in };
 parameter SIZE = 4;
genvar i;   
generate
for (i=0; i < SIZE; i=i+1)
begin: bit
  assign sr_out[i] = sr[i*8-1:(i-1)*8];
 //$display("%b",sr_out[i]);
end
endgenerate

Ссылка на комментарий
Поделиться на другие сайты

output  [7:0]sr_out,sr_out1,sr_out2,sr_out3,sr_out4;

Только не говори что надо задать их как массив я не понимаю зачем пробовал SR обозначить как массив компилятор начал ругаться я и бросил. Потому что SR регистр который разбивается на sr_out и так далее или я не понимаю.

Ссылка на комментарий
Поделиться на другие сайты

Можно было не как массив, а как 8*5 бит.

Вообще перестань изобретать нереальные примеры. Либо учись на решении реальных задач, либо не стоит вообще.

Ссылка на комментарий
Поделиться на другие сайты

Какие не реальные однотипные операции что в ручную копировать For в умелых руках ух. Как For так всё не так. Ты знающий может есть мысль !!!!! А всё остальное паника. Может sr_out массивом обозначить.

Ссылка на комментарий
Поделиться на другие сайты

Мельком тут глянул на код. Смущает строка

"assign sr_out = sr[i*8-1:(i-1)*8]; ".

Получается такая бяка, если i=0, то sr_out(0)=sr((0*8:0-1)*8)=sr(0:-8).

Есть сомнения в том что верилог готов "скушать" отрицательную нумерацию.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...