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

ViKo

Модератор
  • Постов

    12 216
  • Зарегистрирован

Весь контент ViKo


  1. У меня все тот же Quartus 9.0, на картинке все видно. Видимо, у меня "тюнингованный" :) Лично меня абсолютно не смущает наличие в одном блоке = и <=. Главное, чтобы они не выполнялись одновременно для одной переменной. В данном случае есть проверка условия if..else. Эти части никогда не выполнятся вместе! "Элементарно, Ватсон!"
  2. Задержки не синтезируются, и сброс нужно делать нулем. Все будет синтезировано.
  3. Третий пример - самый поучительный: асинхронный сброс счетчика (заводится на выводы асинхронного сброса триггеров в логических элементах), синхронный счет (по clk). Зная устройство ПЛИС, только так и стоит делать.
  4. vadimuzzz, хотелось бы узнать, на чем Вы остановили свой выбор.
  5. Ричард Лайонс - Цифровая обработка сигналов
  6. Не могу скопировать текст, приведу снимок экрана. Из стандарта IEEE1364-1995. В переводе: Регистр - абстракция для элемента хранения данных. Называется reg. Хранит значение от одного назначения до другого. Оператор назначения действует как триггер, который изменяет значение элемента хранения данных. Начальное значение - неопределено. Ни в какую полемику не втягиваю. Так пишу, по инерции.
  7. Ну, если сами разработчики... что ж от меня ожидать иного? :) С этим, надеюсь, всем стало понятно. Если я кого-то сбил с истины, приношу извинения. Что же касается очередности выполнения операторов, то пока что из переписки трудно что понять. Хотелось бы ясности.
  8. Попробовал свой проект в ModelSim. Подтверждаю - блоки always работают только с reg. Хотя результат - чисто комбинаторный. Можно даже принудительно это указать. module Test (input a, input b, output reg c); always_comb c <= a & b; endmodule В дальнейшем буду ставить reg где надо, где не надо, без опаски. Хотя, с точки зрения здравого смысла - уже не понимаю понятия reg. А, можно так понимать - reg - логические элементы, net - цепи между ними.
  9. Откровенно говоря, Verilog/SystemVerilog находится в состоянии активного развития, колбасит его не по-детски. Как и его создателей, похоже. Что будет дальше, страшно смотреть. Методы... и т.п. Это как C++. То ли дело старый добрый C. К счастью, Quartus взял из него только кое-что, "самое нужное" :)
  10. Смотрим внимательно сообщение #250. Сначала я спросил, будет ли работать. Потом попробовал, привел результат. Зачем останавливаться на Verilog? Мы же в будущее, вроде, смотрим. Я тоже до недавнего времени писал на AHDL. Но, вкусив SV, назад не вернусь. И Вам советую. Вот еще одна картинка, как стимул к переходу. P.S. Пока писал, уже то же высказали. Меня такой "глюк" более, чем устраивает.
  11. Чем я компилил, я написал, еще до того поста, на который ссылается SM. Там и результат работы приведен. Повторю - Quartus 9.0, Verilog-2005. По поводу замечания SM, что "товарищ галку на Verilog-2005 не заметил" - должно было бы обидеть, но почему-то рассмешило. Вам бы в адвокатуру податься, SM. Там такое "словоблудие" в ходу.
  12. Именно! Зуб даю! Шоб я сдох! Век воли не видать! Чем еще поклясться? Впрочем, можете проверить. И признать свою ошибку. P.S. Похоже, профессия RTL Designer все-таки имеет будущее? :)
  13. Как же не получилось? Я же картинку привел с результатом. Не верите глазам? По поводу работы компилятора. Естественно, компилятору нет смысла скакать по операторам вверх-вниз. Идет попорядку. Нашел = вычислил, присвоил, нашел <= вычислил, запомнил до выхода из блока. Практически всегда можно предсказать результат. Нельзя предсказать результат в блоках такого типа: a <= b; a <= c;
  14. Чуток изменил module Test (input a, input b, output integer c); always @* c <= a & b; endmodule Verilog-2001 Где Вы видите регистры? Вообще говоря, <= это только указание компилятору присваивать результат на выходе из блока. Все остальное - фиолетово.
  15. А я о чем? Вы все еще на Verilog? тогда мы идем к Вам! :)
  16. Вот пример из стандарта IEEE Std 1800-2005 (возможно, не последний, что имею...), стр 69 module ma #( parameter p1 = 1, parameter type p2 = shortint ) (input logic [p1:0] i, output logic [p1:0] o); p2 j = 0; // type of j is set by a parameter, (shortint unless redefined) always @(i) begin o = i; j++; end endmodule module mb; logic [3:0] i,o; ma #(.p1(3), .p2(int)) u1(i,o); //redefines p2 to a type of int endmodule По-вашему, i и o - регистры? А такты где? А это что?: initial, always, always_comb, always_latch, and always_ff proce- dural blocks;
  17. А почему бы Вам не признать собственную не полную информированность в данном ("маленьком") вопросе?
  18. Не получил никаких комментариев на свои послания. Я задал компилировать модуль module Test (input a, input b, output c); always @* c <= a & b; endmodule И получил результат. Так что кто-то заблуждается по поводу регистров в блоках always
  19. Quartus 9.0 (не самый новый, заметьте), SystemVerilog-2005 "Врачу - исцелися сам!" P.S. только имя модулю дал с заглавной буквы, чтобы с именем файла совпадало...
  20. Ну да? А вот так - будет ошибка? module test (input a, input b, output c); always @* c <= a & b; endmodule
  21. Да, можно удалить ненужные сравнения, которые не ведут к первым трем уровням. Кое-то упростится. Но перестановка каждой пары регистров - тоже отнимет немало ресурсов. Зато - быстро!
  22. Когда Вы пишете то, естественно, получаете регистры. Задайте output [7:0] a,... и дискуссия продолжится... :smile3009:
  23. Алгоритм - супер, но разве вам надо упорядочить все элементы массива? Если нет, то - бесполезная трата ресурсов. Есть алгоритмы Шелла, быстрой сортировки, пузырька, на худой конец. Все они упорядочивают массивы целиком путем перестановок элементов массива.
  24. Найти первый максимум, заблокировать (заменить на 0, сбросить) этот вход для следующего сравнения, сравнить той же схемой или такой же, стоящей дальше, найти и заблокировать второй максимум, сравнить и найти третий. Только циклов будет 3 * 5.
×
×
  • Создать...