sazh 8 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба вынес бы отдельно. От лукавого это все. //////////////// А ресет точно не причем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба От лукавого это все. //////////////// Ну я написал, что я бы лично так не делал. А ресет точно не причем. Как не причем? rst нет в списке чувствительности, зато есть ненужное din И что придумает синтезатор по этому поводу - это вопрос... --dff_reg_proc1: process (clk,din) -- begin -- for i in 3 to 24 loop -- for j in 0 to 15 loop -- if rst = '0' then -- dff_reg_stat(i)(j) <= '0'; -- elsif rising_edge (clk) then -- dff_reg_stat(i)(j) <= din(i)(j); -- end if; -- end loop; -- end loop; --end process dff_reg_proc1; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Как не причем? rst нет в списке чувствительности, зато есть ненужное din В смысле - синтезатор не ошибается. Я не знаю VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба На Verilog должно быть написано always @(negedge rst_n, posedge clk) if (!rst_n) ... else ... а что, на VHDL в списке чувствительности фронты/срезы задавать не нужно? А проверяется уже непосредственно внутри блока? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gothard 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба а что, на VHDL в списке чувствительности фронты/срезы задавать не нужно? А проверяется уже непосредственно внутри блока? угу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба На Verilog должно быть написано always @(negedge rst_n, posedge clk) if (!rst_n) ... else ... а что, на VHDL в списке чувствительности фронты/срезы задавать не нужно? А проверяется уже непосредственно внутри блока? Если говорить о Verilog, то я опять отошлю к стандарту IEEE1394.1-2002, в котором четко и однозначно написано, как описывать регистры с соответствующими входами управления в синтезируемых описаниях. И шаблоны в Quartus стоит посмотреть в текстовом редакторе. Кстати, именно описание в блоке сначала действий по сбросу, а потом уже по тактовому импульсу логично, так как сброс аппаратно имеет приоритет. Cинхронизация асинхронного сброса должна описываться отдельно, осознанно, и подаваться в такой блок как асинхронный сброс, но синхронизированный, например, в другом блоке: reg [1:0] rst; wire areset; always @(negedge clk) rst[1:0]<={rst[0],clr}; GLOBAL rstfeed(.in(rst[1]),.out(areset)); always @ (negedge areset or posedge clk) begin if (!areset) dreg<=0; else ... Сравниваем с картинкой из справки Quartus (см. ниже). Фронт отрицательный потому, что это соответствует аппаратной реализации. Но синтезатору не сложно инвертор поставить, если уж очень хочется работать в положительной полярности. А синхронный сброс - совсем другое дело. always @ (posedge clk) begin if (sreset) dreg<=0; else ... Но он не заводится на вход асинхронного сброса. Делается либо на логике, либо с использованием ресурсов синхронного сброса в логическом элементе (элемент 2И перед входом триггера, объединяющий выход таблицы перекодировки и сигнал синхронного сброса). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Если говорить о Verilog Раз уж все по новой пошли, я добавлю, что уже выкладывали reset.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Раз уж все по новой пошли, я добавлю, что уже выкладывали Я ответил просто потому, что три изначальных утверждения не были опровергнуты. Хорошо, если те кто пишут в такой манере, на самом деле делают это обоснованно, но честно говоря у меня большие сомнения. И ответ такой - делают обоснованно именно так, как делают, по всем пунктам, так как это технически обосновано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Если говорить о Verilog, то я опять отошлю к стандарту IEEE1394.1-2002 Это вы меня опять отсылаете к стандарту? За что? :) Я ответил просто потому, что три изначальных утверждения не были опровергнуты. А мое сообщение №11? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Это вы меня опять отсылаете к стандарту? За что? :) А мое сообщение №11? Извините, на самом деле я хотел процитировать следующее сообщение. В Вашем все правильно. А по поводу сообщения №11 - я постарался ответить более подробно. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wolfman 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Что именно исчезает? На первый взгляд у Вас со списками чувствительности не лады. Да и в процессах я бы не писал логику... ... dff_reg_isr(i)(j) <= (dff_reg_stat(i)(j) xor dff_reg_del(i)(j)) or dff_reg_isr(i)(j); ... а вынес бы отдельно. Списки чувствительности они же, в основном, для симулятора? исчезал весь модуль, логику выносил отдельно, не помогало. Добавил ресет и все подцепилось. Работал в квартусе 8.0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Списки чувствительности они же, в основном, для симулятора? исчезал весь модуль, логику выносил отдельно, не помогало. Добавил ресет и все подцепилось. Работал в квартусе 8.0. Ну не бывает чудес. Просто до причины не докопались. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
murmel1 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба 1) + По всем hdl coding conventions это надо называть reset_n, reset_l или n_reset. 2) В асинхронном сбросе проблем нет: а) Использует выделенный вход асинхронного сброса (установки) регистра. Экономит ЛЯ. б) Если источник сброса синхроннен с тактовым сигналом, то временной анализатор анализирует его корректно и обеспечивает предсказуемое поведение. 3) +. В одном процессе смешивать регистры со сбросом и без не стоит без причины. Просто до причины не докопались. Например, модуль у Вас работает один раз и Quartus его оптимизировал сразу в последнее состояние. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Например, модуль у Вас работает один раз и Quartus его оптимизировал сразу в последнее состояние. Тогда надо быть до конца последовательным в своих действиях и сказать об этом синтезатору. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sleep 0 12 ноября, 2010 Опубликовано 12 ноября, 2010 · Жалоба Списки чувствительности они же, в основном, для симулятора? исчезал весь модуль, логику выносил отдельно, не помогало. Добавил ресет и все подцепилось. Работал в квартусе 8.0. Отнюдь не только для симулятора, но и для синтезатора в той же степени - это прямая информация от Вас для него, какой тип ресета вы хотите завести. Не укажете в списке чувствительности с указанием о фронте - синтезатор будет пытаться внедрить триггер с синхронным ресетом/логику на ресете. Возможно, проблема в Квартусе была с тем, что в библиотеке просто не было триггеров с синхронным ресетом, тул не мог внедрить нужную аппаратуру? П.С. Сам с синтезаторами для ПЛИС не работал, только для ASIC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться