Jump to content

    

Прием на работу

Меня тут спросили, как на плисине сделать приемник\десериализатор, у которого единицы принимаются в виде перепадов на одной линии, а нули - на другой. Клоков нет, частота не известна и плавает.

Ниасилил... :crying:

Share this post


Link to post
Share on other sites
Меня тут спросили, как на плисине сделать приемник\десериализатор, у которого единицы принимаются в виде перепадов на одной линии, а нули - на другой. Клоков нет, частота не известна и плавает.

Ниасилил... :crying:

Популярный вопросик...

 

Share this post


Link to post
Share on other sites
Популярный вопросик...

Да? Давно не занимался вплотную плисами... А ответ же какой?

Share this post


Link to post
Share on other sites
Да? Давно не занимался вплотную плисами... А ответ же какой?
Ответов много, т.к. задача сформулирована не точно, поэтому правильный ответ не знает только автор вопроса...

 

Share this post


Link to post
Share on other sites
Ответов много, т.к. задача сформулирована не точно, поэтому правильный ответ не знает только автор вопроса...

Вот и у меня такое же впечатление сложилось. Я им сделал проектик, в котором был клок, но не со стороны приемной линии (где эти два сигнала), а со стороны десериализатора. Ну разве будет кто-то совсем без клока-то работать? Не понравилось... Аж зацепило, блин. Ночами не сплю теперь, перепады мерещатся... :)

Или там суть, что перепады могут быть только одного направления, например, из 0 в 1? Я-то делал для двух сразу...

Share this post


Link to post
Share on other sites
Меня тут спросили, как на плисине сделать приемник\десериализатор, у которого единицы принимаются в виде перепадов на одной линии, а нули - на другой. Клоков нет, частота не известна и плавает.

Ниасилил... :crying:

 

Может быть выделить переходы (ну что-то типа прерывания по фронту спадающему/нарастающему должно же быть в этих плисах), в моменты переходов формировать короткие импульсы, которые подавать на входы R и S асинхронного RS триггера. Я слышал что в плисах есть такое дело.

Допустим коротким импульсом на S входе перебрасываем триггер в единичное состояние, и храним. Коротким импульсом на R входе перебрасываем в нулевое состояние и храним. Храним - это когда на обоих входах лог. 0 например.

На выходе будет сигнал у которого единицы принимаются в виде перепадов на одной линии, а нули - на другой.

Сформированные перепады и тип логики триггера, должны быть так выбраны, чтоб не допускать неопределенного состояния триггера.

Share this post


Link to post
Share on other sites
Сформированные перепады и тип логики триггера, должны быть так выбраны, чтоб не допускать неопределенного состояния триггера.

Ага, в этом есть некоторые трудности. :)

Точнее, трудности не в том, чтобы не подавать одновременно на входы S и R (это можно искусственно заблокировать дополнительной логикой), а в том, откуда брать эти самые "короткие" импульсы. Вот пришел перепад 0-1, вот подали его на S, а сбросить само S обратно как? Это же надо успеть сделать до прихода следующего перепада.

Хотя... Если, допустим, его не сбрасывать, а держать до появления события во второй линии... И сбрасывать только после этого... И дополнительной логикой блокировать состояние, когда R и S оба равны 1... Но тогда получается, что можно пропустить первый бит в линии (если исходное состояние обеих линий равно 1, то логика будет блокировать работу триггера). В общем, ниасилить без клоков че-то... :crying: Да и надо ли? :)

Share this post


Link to post
Share on other sites
Ага, в этом есть некоторые трудности. :)

Точнее, трудности не в том, чтобы не подавать одновременно на входы S и R (это можно искусственно заблокировать дополнительной логикой), а в том, откуда брать эти самые "короткие" импульсы. Вот пришел перепад 0-1, вот подали его на S, а сбросить само S обратно как? Это же надо успеть сделать до прихода следующего перепада.

Хотя... Если, допустим, его не сбрасывать, а держать до появления события во второй линии... И сбрасывать только после этого... И дополнительной логикой блокировать состояние, когда R и S оба равны 1... Но тогда получается, что можно пропустить первый бит в линии (если исходное состояние обеих линий равно 1, то логика будет блокировать работу триггера). В общем, ниасилить без клоков че-то... :crying: Да и надо ли? :)

 

Ну я с ПЛИС к сож. не имел дела, но просто на логике можно построить такое дело.

Share this post


Link to post
Share on other sites
Ну я с ПЛИС к сож. не имел дела, но просто на логике можно построить такое дело.

Дык ПЛИС это логика и есть. Как строить будете? Эти короткие импульсы формировать на задержках на десяти инверторах? Это не наш метод. Хотя, может быть в этом и был тайный смысл задачи? Типа посмотреть, а может ли человек путем всяко-разных техник мануального расположения ячеек в плисине и задания констрейнов создавать полностью асинхронные проекты. Это что, ныне считается верхом мастерства?

Share this post


Link to post
Share on other sites
Дык ПЛИС это логика и есть. Как строить будете? Эти короткие импульсы формировать на задержках на десяти инверторах? Это не наш метод.

 

Если в целом вариант принять за основу, то можно и не на 10ти инверторах. Как вариант можно задействовать одновибратор с запуском по фронту.

Но это усложняет решение, мне кажется можно и нужно проще.

Share this post


Link to post
Share on other sites
Если в целом вариант принять за основу, то можно и не на 10ти инверторах. Как вариант можно задействовать одновибратор с запуском по фронту.

Но это усложняет решение, мне кажется можно и нужно проще.

Ха, так ведь этот одновибратор должен как-то мерять время, не так ли? Припоминаю, что, например, в 555 используются конденсаторы и компараторы. Но в ПЛИС конденсатор не вставишь, это правда.

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

Share this post


Link to post
Share on other sites
но есть ошибка в выходной части ;)

А что это за элемент такой большой с четырьмя входами? XOR? И что за ошибка?

Share this post


Link to post
Share on other sites
А что это за элемент такой большой с четырьмя входами? XOR?

Да XOR (элемент считает чётность).

 

вариант без ошибки:

post-9445-1308233601_thumb.jpg

:)

Share this post


Link to post
Share on other sites
Да XOR (элемент считает чётность).

Это, в смысле, три XOR-а? Четыре входа - как-то многовато...

Вообще, идея понятна, и о подобном я тоже думал, но не стал пытаться реализовать, т.к. уверен, что будет глючить. Как бы телега впереди лошади. Я тоже использовал восстановление клока в линии по XOR (внизу), но мне не удалось обойтись без формирования этих пресловутых коротких импульсов. А для этого понадобился внешний сигнал, для простоты я его сделал периодическим, т.е. клок.

 

А вариант без ошибки - это как? Зачем нам два выхода?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this