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

Поведенческая модель без ресета

Здравствуйте!

 

Есть прибор , на нем ПЛИС 5576ХС3, схема не предусматривает какой либо сброс приходящий поле кофигурирования ПЛИС

Поэтому все процессы без сброса регистров и сигналов. 

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

Полскадие как в этих условиях сделать правильную поведенческкю модель которую можно прмоделирвать?

 

Спасибо

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


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

Приветствую!

33 minutes ago, addi II said:

Здравствуйте!

Полскадие как в этих условиях сделать правильную поведенческкю модель которую можно прмоделирвать?

Три варианта -  в порядке паршивости

  1. найти в симуляторе  опцию автоматической начальной установки значений регистров при запуске сима. :dash2:
  2. сделать установку начальных значений в блоках initial  :dash3:
  3. сделать модуль автоматической генерации внутреннего глобального ресета, а в нем (и только в нем) уже использовать второй вариант) :dance2:

Удачи! Rob. 

  

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


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

1 hour ago, RobFPGA said:
  • найти в симуляторе  опцию автоматической начальной установки значений регистров при запуске сима. :dash2:

никогда такой не пользовался, но всегда подозревал, что она есть :)

1 hour ago, addi II said:

Есть прибор , на нем ПЛИС 5576ХС3, схема не предусматривает какой либо сброс приходящий поле кофигурирования ПЛИС

 

Вот вам еще надо уточнить, а в какое состояние устанавливаются все внутренние значения после загрузки.

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


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

25 minutes ago, Tpeck said:

никогда такой не пользовался, но всегда подозревал, что она есть :)

Вот вам еще надо уточнить, а в какое состояние устанавливаются все внутренние значения после загрузки.

на tcl можно написать, у модельсима есть команды для этого.

а скорее всего (сам не пользовал) там все скопировано с альтеры - наверно есть какой-то атрибут начальной загрузки, тоже наверно, можно tcl-ем достать и выставлять в него, но такого я не делал

 

 

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


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

20 hours ago, RobFPGA said:

Приветствую!

Три варианта -  в порядке паршивости

  1. найти в симуляторе  опцию автоматической начальной установки значений регистров при запуске сима. :dash2:
  2. сделать установку начальных значений в блоках initial  :dash3:
  3. сделать модуль автоматической генерации внутреннего глобального ресета, а в нем (и только в нем) уже использовать второй вариант) :dance2:

Удачи! Rob. 

Я думал что initial используется только для тестбенчей...

20 hours ago, RobFPGA said:

  

 

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


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

Приветствую!

32 minutes ago, addi II said:

Я думал что initial используется только для тестбенчей...

Естественно initial  в основном используется при симуляции. Но в модулях для синтеза можно делать и так

reg reg_var_a,reg_var_b,reg_var_c;

/* synthesis translate_off */ 
initial begin
  reg_var_a = 1'b0;
  reg_var_b = 1'b1;
  reg_var_c = 1'bx;
  ...
end
/* synthesis translate_on */ 
...

И в скобках translate_off/translate_on   лепить нужные конструкции для симуляции.

 

Ну и кое что в initial поддерживается при синтезе - например  $readmem(b|h) для инициализации памяти. Но это сильно зависит от конкретного синтезатора.    

 

Удачи! Rob.

 

 

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


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

Еще можно при объявлении переменных:

reg [7:0] cnt = 0 ;

Причем можно ставить даже не нулевые значения.

reg [7:0] cnt = 8'd1 ;

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

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

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


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

Приветствую!

1 hour ago, BSACPLD said:

Еще можно при объявлении переменных:


reg [7:0] cnt = 0 ;

...

Да можно и так. Но опять же это чаще для симуляции  так как не все синтезаторы могут поддерживают инициализацию регистров таким способом.

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

 

Удачи! Rob.

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


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

7 minutes ago, RobFPGA said:

Да можно и так. Но опять же это чаще для симуляции  так как не все синтезаторы могут поддерживают инициализацию регистров таким способом.

Насколько мне известно, почти все современные синтезаторы поддерживают данную конструкцию.

Проверял на Quartus, Synplify, ISE и Vivado.

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


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

А еще в выходном нетлисте есть сигналы devpor, devclrn. Можно ими дернуть через force/release.

В 09.03.2019 в 16:04, BSACPLD сказал:

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

Это бесплатная логика, т.к. трассировка все равно чаще идет через LUT.

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


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

On 3/7/2019 at 8:41 PM, RobFPGA said:
  1. найти в симуляторе  опцию автоматической начальной установки значений регистров при запуске сима. :dash2:
  2. сделать модуль автоматической генерации внутреннего глобального ресета, а в нем (и только в нем) уже использовать второй вариант) :dance2:

 

  

Можно эти 2 пункта более подробно?

Промоделировал с inital, в modelsim, все ок

Прошиваю, смотрю - модели нет(...

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


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

On 3/7/2019 at 7:54 PM, addi II said:

Здравствуйте!

 

Есть прибор , на нем ПЛИС 5576ХС3, схема не предусматривает какой либо сброс приходящий поле кофигурирования ПЛИС

Поэтому все процессы без сброса регистров и сигналов. 

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

Полскадие как в этих условиях сделать правильную поведенческкю модель которую можно прмоделирвать?

 

Спасибо

В 5576ХС3 триггера с асинхронным ресетом. Можно сделать глобальный ресет по включению питания, все равно другой пользы от асинхронного ресета нет. И будет вам сброс и в модели и в железе.

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


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

Приветствую!

48 minutes ago, addi II said:

Можно эти 2 пункта более подробно?

Промоделировал с inital, в modelsim, все ок

Во многих симулятора можно указать значение регистров (0 или 1) в начале симуляции (с помощью опции при компиляции или запуске сима. Как пример  для vlog +initreg[=<spec>][+0|1|X|Z] Initialize variables of type indicated by <spec>.) По умолчанию это обычно X.  

 

Если логика дизайна не критична к процедуре сброса то тогда да - задали через глобально начальное значение как в целевой FPGA и будь что будет. А если критично то полагаться что само как то сбросится наивно. Спокойнее самому сделать так, чтобы быть уверенным что это произойдет и так как нужно и тогда когда надо. И если так случилось что нет внешнего сброса то самое простое это сделать на счетчике/регистре сдвига автомат формирующий глобальный импульс сброса для всей внутренней логики. С различной степенью параноидальности контролирующей что это произойдет.  А для установки начального значения в таком модуле при симуляции как раз и использовать initial. 

48 minutes ago, addi II said:

Прошиваю, смотрю - модели нет(...

:scratch_one-s_head:О чем это? 

 

Удачи! Rob.

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


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

On 3/7/2019 at 7:54 PM, addi II said:

Здравствуйте!

 

Есть прибор , на нем ПЛИС 5576ХС3, схема не предусматривает какой либо сброс приходящий поле кофигурирования ПЛИС

Поэтому все процессы без сброса регистров и сигналов. 

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

Полскадие как в этих условиях сделать правильную поведенческкю модель которую можно прмоделирвать?

 

Спасибо

Всё что красное - проинициализировать. Например:

reg [31:0] bus;

reg bus_en;

initial {bus, bus_en} = '0;

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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