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

вынес бы отдельно.

 

От лукавого это все.

////////////////

А ресет точно не причем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

От лукавого это все.

////////////////

 

Ну я написал, что я бы лично так не делал.

 

А ресет точно не причем.

 

Как не причем? 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как не причем? rst нет в списке чувствительности, зато есть ненужное din

 

В смысле - синтезатор не ошибается. Я не знаю VHDL.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На Verilog должно быть написано

always @(negedge rst_n, posedge clk)
  if (!rst_n) ...
  else ...

а что, на VHDL в списке чувствительности фронты/срезы задавать не нужно? А проверяется уже непосредственно внутри блока?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что, на VHDL в списке чувствительности фронты/срезы задавать не нужно? А проверяется уже непосредственно внутри блока?

угу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На 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И перед входом триггера, объединяющий выход таблицы перекодировки и сигнал синхронного сброса).

post-8660-1289572772_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если говорить о Verilog

 

Раз уж все по новой пошли, я добавлю, что уже выкладывали

reset.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Раз уж все по новой пошли, я добавлю, что уже выкладывали

Я ответил просто потому, что три изначальных утверждения не были опровергнуты.

Хорошо, если те кто пишут в такой манере, на самом деле делают это обоснованно, но честно говоря у меня большие сомнения.

И ответ такой - делают обоснованно именно так, как делают, по всем пунктам, так как это технически обосновано.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если говорить о Verilog, то я опять отошлю к стандарту IEEE1394.1-2002

Это вы меня опять отсылаете к стандарту? За что? :)

 

Я ответил просто потому, что три изначальных утверждения не были опровергнуты.

А мое сообщение №11?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это вы меня опять отсылаете к стандарту? За что? :)

А мое сообщение №11?

Извините, на самом деле я хотел процитировать следующее сообщение. В Вашем все правильно.

А по поводу сообщения №11 - я постарался ответить более подробно. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что именно исчезает?

На первый взгляд у Вас со списками чувствительности не лады.

 

Да и в процессах я бы не писал логику...

...
dff_reg_isr(i)(j) <= (dff_reg_stat(i)(j) xor dff_reg_del(i)(j)) or dff_reg_isr(i)(j);
...

а вынес бы отдельно.

 

Списки чувствительности они же, в основном, для симулятора?

исчезал весь модуль, логику выносил отдельно, не помогало. Добавил ресет и все подцепилось. Работал в квартусе 8.0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Списки чувствительности они же, в основном, для симулятора?

исчезал весь модуль, логику выносил отдельно, не помогало. Добавил ресет и все подцепилось. Работал в квартусе 8.0.

 

Ну не бывает чудес. Просто до причины не докопались.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) + По всем hdl coding conventions это надо называть reset_n, reset_l или n_reset.

2) В асинхронном сбросе проблем нет:

а) Использует выделенный вход асинхронного сброса (установки) регистра. Экономит ЛЯ.

б) Если источник сброса синхроннен с тактовым сигналом, то временной анализатор анализирует его корректно и обеспечивает предсказуемое поведение.

3) +. В одном процессе смешивать регистры со сбросом и без не стоит без причины.

 

Просто до причины не докопались.

Например, модуль у Вас работает один раз и Quartus его оптимизировал сразу в последнее состояние.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например, модуль у Вас работает один раз и Quartus его оптимизировал сразу в последнее состояние.

 

Тогда надо быть до конца последовательным в своих действиях и сказать об этом синтезатору.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Списки чувствительности они же, в основном, для симулятора?

исчезал весь модуль, логику выносил отдельно, не помогало. Добавил ресет и все подцепилось. Работал в квартусе 8.0.

Отнюдь не только для симулятора,

но и для синтезатора в той же степени - это прямая информация от Вас для него, какой тип ресета вы хотите завести.

Не укажете в списке чувствительности с указанием о фронте - синтезатор будет пытаться внедрить триггер с синхронным ресетом/логику на ресете.

 

Возможно, проблема в Квартусе была с тем, что в библиотеке просто не было триггеров с синхронным ресетом, тул не мог внедрить нужную аппаратуру?

П.С. Сам с синтезаторами для ПЛИС не работал, только для ASIC.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...