boldive 0 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба еще вопрос. Есть такая строка: 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]; Правда такая строчка не проходит по синтаксису. Ругается компилятор. Но суть примерно такая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 9 марта, 2010 Опубликовано 9 марта, 2010 · Жалоба Можно это как-то покрасивее и покороче записать? assign G34 = (QA == 4'b0001) & (QB == 5'b111111); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boldive 0 15 марта, 2010 Опубликовано 15 марта, 2010 · Жалоба Что-то не работает. Итак, есть 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] в единице, то импульсов нет вообще нигде. Что-то тут не так с синтаксисом. Как это еще можно записать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dspx 0 15 марта, 2010 Опубликовано 15 марта, 2010 · Жалоба Что-то не работает. А в чем вы симулируете? В принципе, в логических выражениях вместо & лучше использовать &&. Но компилятор и так должен правильно скушать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boldive 0 15 марта, 2010 Опубликовано 15 марта, 2010 · Жалоба А в чем вы симулируете? ModelSim XE III/Starter 6.4b. Код написан в ISE 11.4. Там же создан и testbench. Потом все это дружно ISE перебрасывает в ModelSim и там начинается шаманство. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dspx 0 15 марта, 2010 Опубликовано 15 марта, 2010 · Жалоба ModelSim XE III/Starter 6.4b. Код написан в ISE 11.4. Там же создан и testbench. Потом все это дружно ISE перебрасывает в ModelSim и там начинается шаманство. Проблема не в коде. Скорее всего что-то не так в остальной части. Упростите себе задачу, сделайте модуль содержащий только первое выражение и элементарный тестбенч, вектора на шины можете сгенерить pattern generator'ом. Думаю сразу все станет ясно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boldive 0 15 марта, 2010 Опубликовано 15 марта, 2010 · Жалоба вектора на шины можете сгенерить pattern generator'ом. Можно вкратце расписать как это и где это? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dspx 0 15 марта, 2010 Опубликовано 15 марта, 2010 · Жалоба Можно вкратце расписать как это и где это? Ух ты, хилые в ISE11.4 убрали testbench waveform, только сейчас заметил. Тогда может проблема в тестбенче, который вы написали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boldive 0 15 марта, 2010 Опубликовано 15 марта, 2010 (изменено) · Жалоба Проблема не в коде. Вот такая строка тем не менее работает корректно. 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. Как эти выражения можно записать иначе и покороче, и чтобы работало без танцев с бубном? Изменено 15 марта, 2010 пользователем boldive Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dspx 0 15 марта, 2010 Опубликовано 15 марта, 2010 · Жалоба Вот такая строка тем не менее работает корректно. 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)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boldive 0 16 марта, 2010 Опубликовано 16 марта, 2010 · Жалоба assign G38=((QA[3:0]==4'h8)&&(QB[3:0]=='hF)); assign G39=((QA[3:0]==4'h9)&&(QB[2:0]=='h5)); Вот так работает. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться