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

Проэкт не работает в чипе...

Насколько я понимаю не полный список чуствительности влияет только на моделирование, а на синтез не влияет,
Отнюдь, сравни

 

 

awlays @(posedge clk, posedge reset)

if (reset) Q <= 0;

else Q <= D;

 

и

 

 

awlays @(posedge clk)

if (reset) Q <= 0;

else Q <= D;

 

первый - D тригер с АСИНХРОННЫМ сбросом, второй - с СИНХРОННЫМ

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


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

Отнюдь, сравни

 

 

awlays @(posedge clk, posedge reset)

if (reset) Q <= 0;

else Q <= D;

 

и

 

 

awlays @(posedge clk)

if (reset) Q <= 0;

else Q <= D;

 

первый - D тригер с АСИНХРОННЫМ сбросом, второй - с СИНХРОННЫМ

 

да, но если убрать posedge из первого списка:

 

 

awlays @(posedge clk, reset)

if (reset) Q <= 0;

else Q <= D;

 

то тоже полуачем асинхорнный сброс, точно так-же как видимо и в

 

 

awlays @(posedge clk)

if (reset) Q <= 0;

else Q <= D;

 

я ошибаюсь ?

 

Да. Только не в ресете. А по сформированному ресету в нужном Вам состоянии. А лачи наверно из за неполного описания состояний в case. Надо или полное или состояния по умолчанию.

 

Значит без внешнего resetа все-таки не обойтись... , т.е. придется шить на борту... :(

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


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

нет симулятора для Xilinxа
Нужен Моделсим + подключить библиотеки.
По входам упрявляющие сигналы никак не синхронизированы с клоком чипа, посему кака видимо правильно советовал sazh - неплохо-бы их засинхронизировать перед вводом в логику.
Именно.

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


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

Значит без внешнего resetа все-таки не обойтись... , т.е. придется шить на борту... :(

 

Я же выкатил реализацию, как без внешнего ресета обойтись. Если нужна запись константы в регистр только по включению питания. Сплошь и рядом ее по включению питания (Альтера) использую.

И на xilinx должно пройти. Пробуйте. Смотрите реализацию в RTL просмотрщике и количество задействованных ресурсов.

Driver_original_a.zip

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


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

Отнюдь, сравни

 

 

awlays @(posedge clk, posedge reset)

if (reset) Q <= 0;

else Q <= D;

 

и

 

 

awlays @(posedge clk)

if (reset) Q <= 0;

else Q <= D;

 

первый - D тригер с АСИНХРОННЫМ сбросом, второй - с СИНХРОННЫМ

 

Я имел ввиду при описании на VHDL

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


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

Нужен Моделсим + подключить библиотеки.

 

У меня ModelSim под Латтис (OEM Lattice edition)...

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


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

У меня ModelSim под Латтис (OEM Lattice edition)...
Скачать либы и попробовать - дело получаса. На крайняк если очень надо - всегда можно что-то необходимое из закромов вынуть :).

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


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

да, но если убрать posedge из первого списка:

 
awlays @(posedge clk, reset)
if (reset) Q <= 0;
else Q <= D;

то тоже полуачем асинхорнный сброс,

 

Это не асинхронный сброс - это вообще невесть что, оно будет защелкивать D в Q по заднему фронту

 

reset (в добавок к положительному фронту clk). Синтезатор должен обругаться

 

точно так-же как видимо и в

 
awlays @(posedge clk)
if (reset) Q <= 0;
else Q <= D;

я ошибаюсь ?

Ошибаешься, это СИНХРОННЫЙ сброс, само по себе выставление reset в 1 не сбросит Q в 0, а произойдет это только по переднему фронту clk (это собственно и определяется списком чуствительности)

 

 

 

 

Я имел ввиду при описании на VHDL
А что, VHDL каким то особенным способом интерпретирует списки чуствительности? Или синтезатор при синтезе с VHDL имеет право их проигнорировать, заодно нарушив семантику? :(

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


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

Это не асинхронный сброс - это вообще невесть что, оно будет защелкивать D в Q по заднему фронту

 

reset (в добавок к положительному фронту clk). Синтезатор должен обругаться

 

Может быть, я не знаком с синтаксисом Verilogа

 

Ошибаешься, это СИНХРОННЫЙ сброс, само по себе выставление reset в 1 не сбросит Q в 0, а произойдет это только по переднему фронту clk (это собственно и определяется списком чуствительности)

 

Да, опять-же синтакс Verilogа мне мало знаком (если вообще), посему наверно и недопонял.

 

Я же выкатил реализацию, как без внешнего ресета обойтись. Если нужна запись константы в регистр только по включению питания. Сплошь и рядом ее по включению питания (Альтера) использую.

И на xilinx должно пройти. Пробуйте. Смотрите реализацию в RTL просмотрщике и количество задействованных ресурсов.

 

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

Симулируется хорошо в functional, синтезировал под Xilinx, загрузил в чип - работает как часы... :a14:

 

Но странная вещь происходит: пытаюсь симулировать в post-route functional и post-route timing - reset (и все что на него завязано) не работают... :07: . Симуляция показывает reseta не происходит вообще.

Не пойму почему...то-ли такая реализация сильно привязана к технологии конкретного чипа/бренда (возможно в Xilinxовой CPLD работает, а в Latticeовской (под которую и симулировал) - не будет ?)

Странно....

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


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

загрузил в чип - работает как часы... :a14:

Но странная вещь происходит: пытаюсь симулировать в post-route functional и post-route timing - reset (и все что на него завязано) не работают... :07: . Симуляция показывает reseta не происходит вообще.

Не пойму почему...то-ли такая реализация сильно привязана к технологии конкретного чипа/бренда (возможно в Xilinxовой CPLD работает, а в Latticeовской (под которую и симулировал) - не будет ?)

Странно....

 

Если я правильно понял, в железе xilinx реализация типа моей работает, а post-route timing в моделсиме это не работает. так не должно быть. Если конечно отрабатываются указания синтезатору при моделировании. Нюанс такой реализации заключается в том, что схема базируется на установке всх регистров по включению питания в ноль. А далее нужно смотреть как синтезатор отнесся к той части схемы, на которой реализованы внутренний ресет по включению питания. Эта часть схемы функционирует только во время "инициализации" по включению питания и не обладает периодичностью, как если бы ресет был бы внешний.

Синтезатор и может быть симулятор (если во времени это не ощущает) может минимизировать эту часть схемы, выбросив формирователь ресета и задать его константой 1, а значит и интервала не будет.

У Квартуса например есть специальное указание синтезатору. Кстати, указание внутренним сигналам в разделе инициализации проекта не минимизирует такую схему. Это по ресурсам в мап технологическом видно (константа 1 или счетчик формирования интервала). И временное моделирование это показывает в Квартусе, пакет цельный, а в связке с моделсимом я такую конструкцию не пробовал.

Если во временном моделировании этого интервала нет. А по ресурсам такая схема есть, и в железе работает, значит при моделировании в моделсиме в связке с xilinx что то не то. Наверное.

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

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


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

Но странная вещь происходит: пытаюсь симулировать в post-route functional и post-route timing - reset (и все что на него завязано) не работают... :07: . Симуляция показывает reseta не происходит вообще.
Это бага в ISE Xilinx'а (точнее в генераторе post-route модели) Они зачем то сигнал glbl.PRLD (это загрузка начальных значений после reset'а) сделали локальной цепью в сгенерированной post-route модели (вместо того, что бы подключить ее к цепи PRLD модуля glbl) И сигнал этот никуда не подключен :crying: Добавь в bench.v

 

 assign uut. \glbl.PRLD = glbl.PRLD;

- заработает

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


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

Это бага в ISE Xilinx'а (точнее в генераторе post-route модели) Они зачем то сигнал glbl.PRLD (это загрузка начальных значений после reset'а) сделали локальной цепью в сгенерированной post-route модели (вместо того, что бы подключить ее к цепи PRLD модуля glbl) И сигнал этот никуда не подключен :crying: Добавь в bench.v

 

 assign uut. \glbl.PRLD = glbl.PRLD;

- заработает

 

В том то и дело что вначале синтезирую и симулирую под Lattice (у меня симулятор OEM ModelSim/Active-HDL Lattice). Затем, открываю ISE Web, синтезирую под Xilinx и загружаю в чип (CPLD) Xilinxа...

Т.е. говоря о симуляции (и functional и post-route) я имею ввиду симуляцию под Lattice. Значит получается так что функциональная симуляция под Lattice работает ОК а post-route functional & timing на Lattice не работает. При этом синтезируя для Xilinx XCR3064 - в чипе работает ОК.

Такхто видимо оно не имеет отношения к багам среды Xilinxа..

 

 

 

Если я правильно понял, в железе xilinx реализация типа моей работает, а post-route timing в моделсиме это не работает. так не должно быть. Если конечно отрабатываются указания синтезатору при моделировании. Нюанс такой реализации заключается в том, что схема базируется на установке всх регистров по включению питания в ноль. А далее нужно смотреть как синтезатор отнесся к той части схемы, на которой реализованы внутренний ресет по включению питания. Эта часть схемы функционирует только во время "инициализации" по включению питания и не обладает периодичностью, как если бы ресет был бы внешний.

Синтезатор и может быть симулятор (если во времени это не ощущает) может минимизировать эту часть схемы, выбросив формирователь ресета и задать его константой 1, а значит и интервала не будет.

У Квартуса например есть специальное указание синтезатору. Кстати, указание внутренним сигналам в разделе инициализации проекта не минимизирует такую схему. Это по ресурсам в мап технологическом видно (константа 1 или счетчик формирования интервала). И временное моделирование это показывает в Квартусе, пакет цельный, а в связке с моделсимом я такую конструкцию не пробовал.

Если во временном моделировании этого интервала нет. А по ресурсам такая схема есть, и в железе работает, значит при моделировании в моделсиме в связке с xilinx что то не то. Наверное.

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

 

Да, в железе Xilinxа оно вроде работает, но в post-route симуляции в Lattice - не работает (обнулевка), хотя functional симуляция в том-же Латтисе - да работает. Ныло-бы интересно узнатч работает ли оно в симуляции post-route functional and timing в Xilinxе...а так-же интересно было-бы увидеть будет ли работать в железе Lattice...

Может RTL viewer Латиса даст ответ похему post-route симулятор в Латице не отрабатывает...

Завтра гляну....

 

А может кто-бы кто сидит на Xilinx смог-бы просимулировать код у него и рассказать нам как оно там работает ? Я бы дал VHDL код и test-bench...

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


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

А что, VHDL каким то особенным способом интерпретирует списки чуствительности? Или синтезатор при синтезе с VHDL имеет право их проигнорировать, заодно нарушив семантику?

 

Так как Вы привели примеры на Verilog, которого я к сожалению не знаю (знаком, но очень поверхностно) и не смог понять и проверить Ваши утверждения до конца. Из-за этого я так и написал.

 

З.Ы. Изначально вопрос стоял про Vhdl

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


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

В том то и дело что вначале синтезирую и симулирую под Lattice (у меня симулятор OEM ModelSim/Active-HDL Lattice). Затем, открываю ISE Web, синтезирую под Xilinx и загружаю в чип (CPLD) Xilinxа...

Т.е. говоря о симуляции (и functional и post-route) я имею ввиду симуляцию под Lattice.

Ой. :07: Не понял тайного смысла делать post-route симуляцию на Lattice, если железка на Xilinx'е :( Или Lattice уже выкупил у Xilinx'а CPLD ветку и начал делать синтез для них? :wacko:

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


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

хотя functional симуляция в том-же Латтисе - да работает. Ныло-бы интересно узнатч работает ли оно в симуляции post-route functional and timing в Xilinxе...а так-же интересно было-бы увидеть будет ли работать в железе Lattice...

Может RTL viewer Латиса даст ответ похему post-route симулятор в Латице не отрабатывает...

Завтра гляну....

 

Чистый functional наверно моделсимовский. Он оперирует процессами, к примитивам Латтисе не привязан и к Латтисе отношения не имеет.

А чтобы привязаться к Латтисе, нужна имитация включения по питанию. У xilinx эту функцию выполняет GSR.

Короче, смотрите структуру выбранного семейства (eeprom, sram), можно ли эту структуру в ноль инициализировать, читаете раздел как активизировать инициализацию регистров по включению питания в симуляторе. По ресурсам кристалла определяете, выбросил или нет синтезатор часть схемы, реализующую формирование внутреннего ресета (Ищите опцию в смнтезаторе типа игнорировать состояния регистров по power-up или нет. Если игнорировать, то и смысла в схеме формирования начальных состояний этих регистров нет, синтезатор вместо этой схемы константу подставит).

Если все регистры по включению в ноль инициализируются без внешних сигналов и схема формирования внутреннего ресета в ресурсах присутствует, то и в железе рабоать будет.

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


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

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

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

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

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

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

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

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

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

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