Заголовок сообщения: Quartus II Verilog - синтезируется лишний компонент
Добавлено: Чт окт 07, 2021 15:41:51
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4470 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Всем доброго дня. Уже долго бьюсь над проблемой. Имеем такой вот код (пятиразрядный счетчик):
Код:
// memsel counter reg[4:0] memsel_cnt; always @(posedge clock or posedge reset or posedge outshift_enable) begin if((reset == 1'b1) || (outshift_enable == 1'b1)) begin memsel_cnt <= 5'd0; end else begin if(mac_run == 1'b1) begin memsel_cnt <= memsel_cnt + 1'b1; end end end
Впрочем, в проекте их три (и будет еще один). И все они в результате синтезируются в такое нечто : Собственно, проблема в том, что вместо того, чтобы завести сигнал mac_run на входы разрешения (ENA) триггеров memsel_cnt, Quartus фпихуивает мультиплексор между сумматором и триггерами и замыкает с его помощью выходы триггеров на их же входы при значении управляющего сигнала mac_run=0. Следует обратить внимание, что этот счетчик сбрасывается по двум сигналам, но есть еще два, которые сбрасываются только общим ресетом. И они тоже синтезируются с мультиплексорами. Что я делаю не так? Может какие-то настройки проекта покрутил, или мануал по Verilog не дочитал?
_________________ I am DX168B and this is my favourite forum on internet!
Заголовок сообщения: Re: Quartus II Verilog - синтезируется лишний компонент
Добавлено: Пт окт 15, 2021 15:38:02
Друг Кота
Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52 Сообщений: 4470 Откуда: Главный Улей России (Moscow)
Рейтинг сообщения:0
Да, дизайн синхронный. Где-то мне попадалось утверждение, что D триггер с разрешающим входом и триггер без него, но с мультиплексором на входе являются эквивалентными. Смутило то, что есть участок схемы в этом проекте, где синтезатор явно использовал вход разрешения записи. Вот тут, к примеру:
Код:
reg [31:0] results [3:0]; always @(posedge clock or posedge reset) begin if(reset == 1'b1) begin results[0] <= 0; results[1] <= 0; results[2] <= 0; results[3] <= 0; end else begin if(outshift_enable == 1'b1) begin results[3] <= results[2]; results[2] <= results[1]; results[1] <= results[0]; results[0] <= mac_result; end end end
// Output reg[31:0] summ_out; always @(*) begin summ_out = results[0] + results[1] + results[2] + results[3]; end
Все разрешающие сигналы генерируются одним конечным автоматом, выходы автомата синхронизированы тактовым сигналом всего узла. Как и когда синтезатор принимает решение о том, как реализовать триггер с разрешением, ума не приложу.
_________________ I am DX168B and this is my favourite forum on internet!
Как и когда синтезатор принимает решение о том, как реализовать триггер с разрешением, ума не приложу.
Получается если в коде
Код:
if(outshift_enable == 1'b1) begin results[3] <= results[2]; results[2] <= results[1]; results[1] <= results[0]; results[0] <= mac_result; end
простое присваивание, то делает вход разрешения. А когда
Код:
if(mac_run == 1'b1) begin memsel_cnt <= memsel_cnt + 1'b1; end
действие (сложение в этом варианте), то он ставит мультиплексор, видимо считая что в альтернативной ветке (отсутствующая else) данные должны храниться методом гонения с выхода на вход...
_________________ Загружая на вход компьютера "мусор", на выходе получим "мусор^32". PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
if(mac_run == 1'b1) begin memsel_cnt <= memsel_cnt + 1'b1; end
действие (сложение в этом варианте), то он ставит мультиплексор, видимо считая что в альтернативной ветке (отсутствующая else) данные должны храниться методом гонения с выхода на вход...
Так точно. Потому что считается, что синхронный триггер записывает вход каждый такт. И этот такт явно может быть гораздо чаще, чем смена сигнала чувствительности в условии.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Meteor, вы ошиблись с автором в цитате. Это не мои слова..[/quote] Прошу прощения, пес попутал...
_________________ Загружая на вход компьютера "мусор", на выходе получим "мусор^32". PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения