-
Постов
12 216 -
Зарегистрирован
Весь контент ViKo
-
У меня все тот же Quartus 9.0, на картинке все видно. Видимо, у меня "тюнингованный" :) Лично меня абсолютно не смущает наличие в одном блоке = и <=. Главное, чтобы они не выполнялись одновременно для одной переменной. В данном случае есть проверка условия if..else. Эти части никогда не выполнятся вместе! "Элементарно, Ватсон!"
-
-
Задержки не синтезируются, и сброс нужно делать нулем. Все будет синтезировано.
-
Третий пример - самый поучительный: асинхронный сброс счетчика (заводится на выводы асинхронного сброса триггеров в логических элементах), синхронный счет (по clk). Зная устройство ПЛИС, только так и стоит делать.
-
vadimuzzz, хотелось бы узнать, на чем Вы остановили свой выбор.
-
Реализация БПФ на ПЛИС
ViKo ответил ZED тема в Языки проектирования на ПЛИС (FPGA)
Ричард Лайонс - Цифровая обработка сигналов -
Не могу скопировать текст, приведу снимок экрана. Из стандарта IEEE1364-1995. В переводе: Регистр - абстракция для элемента хранения данных. Называется reg. Хранит значение от одного назначения до другого. Оператор назначения действует как триггер, который изменяет значение элемента хранения данных. Начальное значение - неопределено. Ни в какую полемику не втягиваю. Так пишу, по инерции.
-
Ну, если сами разработчики... что ж от меня ожидать иного? :) С этим, надеюсь, всем стало понятно. Если я кого-то сбил с истины, приношу извинения. Что же касается очередности выполнения операторов, то пока что из переписки трудно что понять. Хотелось бы ясности.
-
Попробовал свой проект в ModelSim. Подтверждаю - блоки always работают только с reg. Хотя результат - чисто комбинаторный. Можно даже принудительно это указать. module Test (input a, input b, output reg c); always_comb c <= a & b; endmodule В дальнейшем буду ставить reg где надо, где не надо, без опаски. Хотя, с точки зрения здравого смысла - уже не понимаю понятия reg. А, можно так понимать - reg - логические элементы, net - цепи между ними.
-
Откровенно говоря, Verilog/SystemVerilog находится в состоянии активного развития, колбасит его не по-детски. Как и его создателей, похоже. Что будет дальше, страшно смотреть. Методы... и т.п. Это как C++. То ли дело старый добрый C. К счастью, Quartus взял из него только кое-что, "самое нужное" :)
-
Смотрим внимательно сообщение #250. Сначала я спросил, будет ли работать. Потом попробовал, привел результат. Зачем останавливаться на Verilog? Мы же в будущее, вроде, смотрим. Я тоже до недавнего времени писал на AHDL. Но, вкусив SV, назад не вернусь. И Вам советую. Вот еще одна картинка, как стимул к переходу. P.S. Пока писал, уже то же высказали. Меня такой "глюк" более, чем устраивает.
-
Чем я компилил, я написал, еще до того поста, на который ссылается SM. Там и результат работы приведен. Повторю - Quartus 9.0, Verilog-2005. По поводу замечания SM, что "товарищ галку на Verilog-2005 не заметил" - должно было бы обидеть, но почему-то рассмешило. Вам бы в адвокатуру податься, SM. Там такое "словоблудие" в ходу.
-
Именно! Зуб даю! Шоб я сдох! Век воли не видать! Чем еще поклясться? Впрочем, можете проверить. И признать свою ошибку. P.S. Похоже, профессия RTL Designer все-таки имеет будущее? :)
-
Как же не получилось? Я же картинку привел с результатом. Не верите глазам? По поводу работы компилятора. Естественно, компилятору нет смысла скакать по операторам вверх-вниз. Идет попорядку. Нашел = вычислил, присвоил, нашел <= вычислил, запомнил до выхода из блока. Практически всегда можно предсказать результат. Нельзя предсказать результат в блоках такого типа: a <= b; a <= c;
-
Чуток изменил module Test (input a, input b, output integer c); always @* c <= a & b; endmodule Verilog-2001 Где Вы видите регистры? Вообще говоря, <= это только указание компилятору присваивать результат на выходе из блока. Все остальное - фиолетово.
-
А я о чем? Вы все еще на Verilog? тогда мы идем к Вам! :)
-
Вот пример из стандарта 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;
-
А почему бы Вам не признать собственную не полную информированность в данном ("маленьком") вопросе?
-
Не получил никаких комментариев на свои послания. Я задал компилировать модуль module Test (input a, input b, output c); always @* c <= a & b; endmodule И получил результат. Так что кто-то заблуждается по поводу регистров в блоках always
-
Quartus 9.0 (не самый новый, заметьте), SystemVerilog-2005 "Врачу - исцелися сам!" P.S. только имя модулю дал с заглавной буквы, чтобы с именем файла совпадало...
-
Ну да? А вот так - будет ошибка? module test (input a, input b, output c); always @* c <= a & b; endmodule
-
Да, можно удалить ненужные сравнения, которые не ведут к первым трем уровням. Кое-то упростится. Но перестановка каждой пары регистров - тоже отнимет немало ресурсов. Зато - быстро!
-
Когда Вы пишете то, естественно, получаете регистры. Задайте output [7:0] a,... и дискуссия продолжится... :smile3009:
-
Алгоритм - супер, но разве вам надо упорядочить все элементы массива? Если нет, то - бесполезная трата ресурсов. Есть алгоритмы Шелла, быстрой сортировки, пузырька, на худой конец. Все они упорядочивают массивы целиком путем перестановок элементов массива.
-
Найти первый максимум, заблокировать (заменить на 0, сбросить) этот вход для следующего сравнения, сравнить той же схемой или такой же, стоящей дальше, найти и заблокировать второй максимум, сравнить и найти третий. Только циклов будет 3 * 5.