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

[Verilog] Накладывание сигналов

Здравствуйте, есть код, допустим вот такой:

 

module test (pin, led);

input pin;
output led;

reg led;

always @ (posedge pin)
    begin
        if (pin === 1)
            begin
                led = 1;
            end
    end
    
always @ (negedge pin)
    begin
        if (pin === 0)
            begin
                led = 0;
            end
    end

endmodule

 

Выдаёт ошибку: Error (10028): Can't resolve multiple constant drivers for net ...

 

Ошибка в возможности одновременно нескольких значений сигнала "led". Я понимаю, что невозможно в led запихнуть и "0" и "1" одновременно (хотя может стать X или Z).

Но, если посмотреть код, да, "posedge" и "negedge" могут сработать одновременно. Но, я здесь использую условие "if pin ...".

А вот сигнал "pin" ну никак не может иметь два состояния одновременно. И поэтому я немножко не могу понять: почему нет? Я не нарушаю условий. Одновременно 2 сигнала в один не будут залазить.

 

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

спасибо за внимание.

Изменено пользователем 2inltd

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


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

А вот сигнал "pin" ну никак не может иметь два состояния одновременно. И поэтому я немножко не могу понять: почему нет? Я не нарушаю условий. Одновременно 2 сигнала в один не будут залазить.

 

Потому как один "always..." это эквивалент одного триггера-защелки, а другой "always" - это эквивалент другого триггера-защелки... И Вы хотите, чтобы один триггер выдавал только 1, а другой - только 0, потому как второго условия у описания триггеров нет...

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


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

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

 

Этот код не содержит ошибок. Любой симулятор его промоделирует без проблем. Он просто несинтезируемый. Кто на него ругается? Синтезатор квартуса? И правильно ругается, потому, что нет у альтеры в технологии триггеров, работающих по двум разным клокам, на один из которых Вы хотите подать проинвертированный клок, а на другой без инверсии.

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


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

понял. вопросов больше нету.

Нет, есть вопросы.

always @ (posedge pin)

Никогда не делайте так. Только тактовая частота! (CLK)

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


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

always @ (posedge pin)

Никогда не делайте так. Только тактовая частота! (CLK)

Ну почему же, если убрать posedge, то получится описание асинхронной логики. :) В некоторых случаях значительно так значительно удобнее описать сложную логику, чем assign-ми пользоваться.

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


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

Нет, есть вопросы.

always @ (posedge pin)

Никогда не делайте так. Только тактовая частота! (CLK)

Мне тоже интересно почему?

Я понимаю, что при старте ПЛИС "posedge pin" или "negedge pin" может при определённых условиях сработать, но в данный момент это не критично.

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


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

Мне тоже интересно почему?

Ну примерно потому же, почему не надо использовать блокирующие присваивания :). Кто "не умеет их готовить", тот боится их использовать. Никаких противопоказаний, кроме неумения, к использованию таких конструкций, нету. А на самом деле бывают места, где без них и не обойтись, например в различных конструкциях синхронизаторов, особенно между асинхронным доменом и синхронной схемой, при условии, что времянки асинхронной части сравнимы или быстрее, чем у синхронной.

 

UPD:

Не устану повторять - всегда представляйте себе, во что описанная Вами схема должна синтезироваться, в какое множество как соединенных "К155ТМ2" и "К155ЛА3", если схема предназначена для синтеза, и все подобные вопросы поголовно отпадут сами!!!

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


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

аааааа. спасибо. понял. вопросов больше нету.

Мне понравился Ваш пример, и я его себе скопировал (только текст и сообщение компилятора). Буду использовать для обучения. Надеюсь, что Вы не против..

 

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


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

Мне понравился Ваш пример, и я его себе скопировал (только текст и сообщение компилятора). Буду использовать для обучения. Надеюсь, что Вы не против..

нет, не против. просто я только осваиваю ПЛИС и Verilog, поэтому и возникают разные вопросы. Естественно читал кое-какие материалы, но там не было описано, что "always @ (...)" является триггером-защёлкой.

Я лично считал, что в данном примере создаю регистр под светодиод (reg led;). А потом уже в программе работаю именно с этим регистром, а не с самой линией. И естественно, я считал, что в регистр в любой момент времени могу записать любое значение. А уже потом для самой линии постоянно из этого регистра берётся само значение. Как-то так.

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


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

Естественно читал кое-какие материалы, но там не было описано, что "always @ (...)" является триггером-защёлкой.

 

В документах обычно бывает наоборот - для каждого вида регистров (триггеров) приводится методика, как его правильно описать, чтобы синтезатор его синтезировал. примеры таких документов: http://www.xilinx.com/support/documentatio...cs-pdf/lab5.pdf ; http://acms.ucsd.edu/_files/preug.pdf (раздел Modeling sequential logic) ; http://www.altera.com/literature/hb/qts/qts_qii51007.pdf (Coding Guidelines for Registers and Latches) - разные конторы рассказывают одно и то же... Дело в том, что верилогом можно поведение черта с рогами описать, а вот синтезировать можно далеко не каждого такого....

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


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

В документах обычно бывает наоборот - для каждого вида регистров (триггеров) приводится методика, как его правильно описать, чтобы синтезатор его синтезировал. примеры таких документов: http://www.xilinx.com/support/documentatio...cs-pdf/lab5.pdf ; http://acms.ucsd.edu/_files/preug.pdf (раздел Modeling sequential logic) ; http://www.altera.com/literature/hb/qts/qts_qii51007.pdf (Coding Guidelines for Registers and Latches) - разные конторы рассказывают одно и то же... Дело в том, что верилогом можно поведение черта с рогами описать, а вот синтезировать можно далеко не каждого такого....

понятно. спасибо. почитаю.

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


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

И естественно, я считал, что в регистр в любой момент времени могу записать любое значение. А уже потом для самой линии постоянно из этого регистра берётся само значение. Как-то так.

 

Почитайте, как работают FF-ы, пока не поздно. А то с такими представлениями, Вы далеко не уедете в hdl-дизайне.

 

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


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

Ну почему же, если убрать posedge, то получится описание асинхронной логики. :) В некоторых случаях значительно так значительно удобнее описать сложную логику, чем assign-ми пользоваться.

Нуу, если убрать Posedge то получится совсем другая конструкция. Я думал что будет понятно, что я предостерегаю от использования "асинхронщины" в самом плохом смысле. И то, что автор делает самые первые шаги тоже вроде бы понятно.

 

Кстати Автор реализует почти тот же пример, кторый я приводил в соседнем топике.

На правах шутки:

"программистам на HDL" сначала бы выдавал ... K555ТМ2, кнопку и светодиод.

И если бы начинающий коллега описывая схему за базу взял примитивы, а не "курил HDL" (пытаясь соединить между собой два выхода), то просветление пришло бы гораздо раньше. И вообще это первая глава любого букваря по HDL. Как описать триггер, как описать мультиплексор, и так далее. Абстракционизмом уже позже можно начинать заниматься (потому что завтра он спросит "почему у меня не работает цикл for" - опять ведь программу пишут).

 

считал, что в данном примере создаю регистр под светодиод (reg led;). А потом уже в программе работаю именно с этим регистром

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


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

Не устану повторять - всегда представляйте себе, во что описанная Вами схема должна синтезироваться, в какое множество как соединенных "К155ТМ2" и "К155ЛА3", если схема предназначена для синтеза, и все подобные вопросы поголовно отпадут сами!!!

 

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

 

 

И я как программист, тоже пишу программу. Вот одно мне не понятно, почему вас так это все коробит. Ну есть программы с последовательным исполнением, есть с параллельным, это такие правила игры. Конечный автомат - суть своей и есть программа, чтобы параллельность превратить в последовательность.

 

Конце концов микроблайз - это тот-же конечный автомат который работает по последовательной программе.

 

Кстати после ПЛИСов, я в процессорах полюбил делать конечные автоматы. Прекрасно позволяют без операционок паралелить программу.

 

 

П.С. А можете сделать меня немного умнее... что есть === почему три символа равно? Что-то я не припомню такого из верилога? Это прям равно так что зуб даю как равно?

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


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

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

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

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

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

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

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

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

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

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