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

Как в плис реализовать триггер защёлку по уровню?

Гость vitzap
1 hour ago, Yuri124 said:

возможно - в данном случае - задать макс. допустимую задержку от выхода этого latch до того фронта клока, на котором должен уже быть выставлен действительный адрес для SRAM. М.б. через мультицикл это определить - но с учетом асинхронности записи мл. байта в регистр ПЛИС  и клока ПЛИС - т.е. 1-2 такта ПЛИС учесть на переход в др. клоковый домен.

Так так такт как таковой отсутствует - схема комбинационная. Скорей, для задания констрейнов нужно использовать set_max_delay, но я такого никогда не делал. Когда-то давно, еще на MAX7000, словил срабатывание комбинационной схемы от "иголок" (решил "срисовать" схему на 1533 серии) и больше не грешил этим.

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

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


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

Как понял, просто и толково сделать не получится.

По любому танцев с бубном не избежать.

Впрочем всё как всегда ... :dance3:

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


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

13 minutes ago, vitzap said:

Так так такт как таковой отсутствует - схема комбинационная

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

Да и при комбинационной схеме есть возможность описать задержки (как конкретно пишется - уже не помню, есть  в описании команд, кажется от synopsys)

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


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

Гость vitzap
7 minutes ago, zombi said:

По любому танцев с бубном не избежать

Вы попробуйте сделать просто защелку. Скорей всего, заработает и так. Если будут глюки - задавать констрейны. Если не тянуть сигналы через большую ПЛИС (а мы не знаем, что у вас стоит), то все должно прокатить.

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


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

3 minutes ago, zombi said:

просто и толково

ну почему же, судя по приведенной Вами осциллограмме - МК выставляет этот байт адреса синхронно с ALE в такте Т2. Поскольку этот байт не используется сразу после того, как ALE стал 1, то можно смело пропускать этот байт в латч, и защелкивать (запрещать изменение) после того, как ALE стал в 0 - это ИМХО будет наиболее быстро.

Сложно только описать задержки, да еще с переходом в другой домен - ну так или делать синхронизатор готовности данных и адреса (чтобы точно знать, когда всё готово, при этом - возможно, еще придется запоминать и остальной адрес и данные) - это ИМХО будет проще всего. Тем более что нужно передать всё это дальше в SRAM. Но с учетом чуть ли не 5-кратного превышения частоты ПЛИС над частотой МК - очень вероятно, что можно обойтись без промежуточных регистров (зависит от времянки SRAM и задержек ПЛИС в выходных блоках). Только всё подробнейшим образом разрисовать и просчитать.

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


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

10 minutes ago, Yuri124 said:

Да и при комбинационной схеме есть возможность описать задержки (как конкретно пишется - уже не помню, есть  в описании команд, кажется от synopsys)

Человек хотел сказать - асинхронная схема (а не комбинационная).

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


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

14 minutes ago, Raven said:

хотел сказать - асинхронная схема (а не комбинационная)

без разницы. В схеме присутствует латч, он в любом случае появится после компиляции с каким-то именем, это имя и использовать в констрейнах.

Только внимательно читать отчет компилятора. Было такое - задал в констрейне имя как в проекте (это был даже не латч - регистр, а именно логика) - в отчете оппа - констрейн проигнорен, т.к. нет такого имени сигнала. Пришлось смотреть, как оно обозвалось компилятором и подправлять.

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

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


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

3 hours ago, zombi said:

Сейчас так и делаю инверсным ALE в DFF защелкиваю.

Но в таком случае мл.адреса на sram попадают позже как минимум на пол такта MK.

Короче, так и оставлю. Проще на МК wait states добавить чем весь этот гемор разрулить.

 

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


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

30 minutes ago, zombi said:

на МК wait states добавить

Если скорость не поджимает. Но гемора то особо не вижу - данные то МК выдает всё равно на такт позже.

 

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


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

19 minutes ago, Yuri124 said:

Если скорость не поджимает.

Ну так придётся чем то и пожртвовать.

19 minutes ago, Yuri124 said:

Но гемора то особо не вижу - данные то МК выдает всё равно на такт позже.

Это кому как. Почитал тут все что насоветовали. И понял, не для меня этот банкет :biggrin:

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


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

ну смотрите - если делать защелку, то мл. байт точно будет раньше, чем по спаду ALE (хотя защелка медленнее, чем D-триггер, насколько помнится, но при таких частотах МК думаю наносекунд 10 выиграете.

С другой стороны - данные придут только в след. такте, при быстрой SRAM, если ей не нужен большой setup по адресу - эти 10 нс без разницы (если не вести далеко по кристаллу, но так и данные тогда тоже надо будет, наверное, далеко вести).

А так квартус сам по себе может наставить латчей, если некорректно ( с его точки зрения) описан автомат, и предупредит об этом - т.к. латч часто не самое хорошее решение.

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

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

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


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

По заднему фронту ALE - работают подобные проекты.

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

Это далеко не самая важная проблема по сравнению с тем что ещё предстоит нагородить.

Спасибо за советы.

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


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

22 hours ago, zombi said:

эти адреса в самой плис тоже используются

Поставить в клоковом домене ПЛИС (150 МГц) 2-3 триггера синхронизатора на wire ale:

reg ale_r, ale_rr, ale_rrr;   - количество триггеров взял исходя из картинки (там адрес появляется после фронта ale) и из частот 32 и 150 МГц.

Поставить автомат:

1. ждать 1 на ale_rrr

2. address_150 <- address_MC; adress_valid <- 1'b1;  - формируется строб вылидности адреса, импульс, написать автомат так, чтобы этот импульс длился 1 такт 150 МГц

3. ждать 0 на ale_rrr

4. преход на 1.

 

Т.е. 4-й такт 150МГц пишет в регистр в домене 150 МГц адрес (можно весь, не только младший байт) - судя по картинке, должно работать норм. Но нужно посчитать точно, с каким разбросом выдает МК адрес по отношению к ALE, может быть получится и 3-м клоком защелкивать в регистр.

Таким образом - адрес будем иметь не позже спада ALE и гарантированно валидный в домене ПЛИС.

От фронта ALE можно посчитать каким клоком писать данные в домен ПЛИС - если это нужно. Тогда просто дополнить автомат еще 1-2 состояниями.

Посчитать и прописать min/max задержки rising edge ale  и мах задержку адреса (возможно - понадобится и min задержку адреса) - от ножек ПЛИС до клока 150 МГц.

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

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


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

16 часов назад, zombi сказал:

Не получилось.

Т.е. Вам непосредственно по теме ответили, Вы этот код вписали в исходник, но он не стал работать?

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


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

1 hour ago, Yuri124 said:

Поставить в клоковом домене ПЛИС (150 МГц) 2-3 триггера синхронизатора на wire ale:

Понял Вашу мысль. Спасибо Yuri124!

Т.о. синхронизатор необходим только на одном проводнике а не на всей шине. Шикарно!

21 minutes ago, Plain said:

Т.е. Вам непосредственно по теме ответили, Вы этот код вписали в исходник, но он не стал работать?

Нет конечно. Пока чисто теоретически всё. 

Прочитав про все сложности понял что в моём случае (опыте, знании и тд) это именно "не получилось" :biggrin:

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


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

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

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

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

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

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

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

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

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

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