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

еще вопрос. Есть такая строка:

assign G31 = ~QA[2] & ~QA[1] & QA[0] & QB[4] & QB[3] & QB[2] & QB[0];

где

wire [3:0] QA;

wire [7:0] QB;

 

Т.е. в зависимости от "цифер" на двух шинах выдается 1 на выход.

 

Ну а если разрядность шин будет например 16бит. Замучаешься в таком виде код писать.

 

Можно это как-то покрасивее и покороче записать?

 

например:

assign G34 = QA['b0001] & QB['b111111];

 

Правда такая строчка не проходит по синтаксису. Ругается компилятор. Но суть примерно такая.

Поделиться сообщением


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

Можно это как-то покрасивее и покороче записать?

assign G34 = (QA == 4'b0001) & (QB == 5'b111111);

Поделиться сообщением


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

Что-то не работает.

 

Итак, есть

 

wire [3:0] QA;

wire [8:0] QB;

 

и есть сравнение:

 

assign G31 = (QA == 4'b0001) & (QB == 6'b111110);

assign G32 = (QA == 4'b0010) & (QB == 6'b110011);

assign G33 = (QA == 4'b0011) & (QB == 6'b110111);

assign G34 = (QA == 4'b0100) & (QB == 6'b110001);

assign G35 = (QA == 4'b0101) & (QB == 6'b101010);

assign G36 = (QA == 4'b0110) & (QB == 6'b100010);

assign G37 = (QA == 4'b0111) & (QB == 5'b11001);

assign G38 = (QA == 4'b1000) & (QB == 4'b1111);

assign G39 = (QA == 4'b1001) & (QB == 3'b101);

 

Пока QA[2] and QA[3] в нулях, импульсы есть на всех G31-G39, хотя по логике должны быть только на G31-G33.

 

Когда любой из QA[2] and QA[3] в единице, то импульсов нет вообще нигде.

 

Что-то тут не так с синтаксисом. Как это еще можно записать?

Поделиться сообщением


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

Что-то не работает.

А в чем вы симулируете? В принципе, в логических выражениях вместо & лучше использовать &&. Но компилятор и так должен правильно скушать.

Поделиться сообщением


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

А в чем вы симулируете?

 

ModelSim XE III/Starter 6.4b. Код написан в ISE 11.4. Там же создан и testbench. Потом все это дружно ISE перебрасывает в ModelSim и там начинается шаманство.

Поделиться сообщением


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

ModelSim XE III/Starter 6.4b. Код написан в ISE 11.4. Там же создан и testbench. Потом все это дружно ISE перебрасывает в ModelSim и там начинается шаманство.

 

Проблема не в коде. Скорее всего что-то не так в остальной части. Упростите себе задачу, сделайте модуль содержащий только первое выражение и элементарный тестбенч, вектора на шины можете сгенерить pattern generator'ом. Думаю сразу все станет ясно.

Поделиться сообщением


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

вектора на шины можете сгенерить pattern generator'ом.

 

Можно вкратце расписать как это и где это?

Поделиться сообщением


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

Можно вкратце расписать как это и где это?

Ух ты, хилые в ISE11.4 убрали testbench waveform, только сейчас заметил. Тогда может проблема в тестбенче, который вы написали?

Поделиться сообщением


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

Проблема не в коде.

 

Вот такая строка тем не менее работает корректно.

 

assign G38 = QA[3] & ~QA[2] & ~QA[1] & ~QA[0] & QB[3] & QB[2] & QB[1] & QB[0]; //(QB == 6'b001111);

assign G39 = QA[3] & ~QA[2] & ~QA[1] & QA[0] & QB[2] & ~QB[1] & QB[0]; //(QB == 6'b000101);

 

Т.е. опять возвращаюсь к вопросу поста №31. Как эти выражения можно записать иначе и покороче, и чтобы работало без танцев с бубном?

Изменено пользователем boldive

Поделиться сообщением


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

Вот такая строка тем не менее работает корректно.

 

assign G38 = QA[3] & ~QA[2] & ~QA[1] & ~QA[0] & QB[3] & QB[2] & QB[1] & QB[0]; //(QB == 6'b001111);

assign G39 = QA[3] & ~QA[2] & ~QA[1] & QA[0] & QB[2] & ~QB[1] & QB[0]; //(QB == 6'b000101);

 

Т.е. опять возвращаюсь к вопросу поста №31. Как эти выражения можно записать иначе и покороче, и чтобы работало без танцев с бубном?

 

assign G38=((QA[3:0]==4'h8)&&(QB[3:0]=='hF));

assign G39=((QA[3:0]==4'h9)&&(QB[2:0]=='h5));

Поделиться сообщением


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

assign G38=((QA[3:0]==4'h8)&&(QB[3:0]=='hF));

assign G39=((QA[3:0]==4'h9)&&(QB[2:0]=='h5));

 

Вот так работает. Спасибо!

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

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