Jump to content

    

Recommended Posts

12 минут назад, Alex77 сказал:

второй вариант создан из первого программой конвертации схематика в verilog.

 

Я считаю правильным вариантом вот такой:

    process(all)
    begin
        q                          <= (others => '0');
        q(to_integer(unsigned(a))) <= '1';
    end process;

А ещё лучше оформить в виде функции и поместить в пользовательский пакет. Написано один раз. А пользоваться можно всегда.

 

Share this post


Link to post
Share on other sites
14 hours ago, turnip said:

как найти микросхему нужной логики?

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

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

Share this post


Link to post
Share on other sites
2 часа назад, Yuri124 сказал:

один сигнал опережает другой на несколько наносекунд...

Какие к чертям наносекунды!? :crazy:

ТС только вчера узнал что такое дешифратор! :biggrin:

Share this post


Link to post
Share on other sites

А еще: TTL, CMOS, LVTTL, LVCMOS, LVDS..... Питание 5В, 3.3В, 1.8В..... Быстродействие, нагрузочная способность..... и т.п. и т.д.

"О, сколько нам открытий чудных
Готовят просвещенья дух
И опыт, сын ошибок трудных,
И гений, парадоксов друг,
И случай, бог изобретатель." А.С. Пушкин

Share this post


Link to post
Share on other sites
25.09.2021 в 00:35, Flip-fl0p сказал:

Я считаю правильным вариантом вот такой:


    process(all)
    begin
        q                          <= (others => '0');
        q(to_integer(unsigned(a))) <= '1';
    end process;

А ещё лучше оформить в виде функции и поместить в пользовательский пакет. Написано один раз. А пользоваться можно всегда.

 

для разнообразия:

module top(
    input [2:0] num,
    output [4:0] out
    );
    
    assign out = 1'b1 << num;
    
endmodule

Share this post


Link to post
Share on other sites
16 hours ago, andrew_su said:

А еще: TTL, CMOS, LVTTL, LVCMOS, LVDS..... Питание 5В, 3.3В, 1.8В..... Быстродействие, нагрузочная способность..... и т.п. и т.д.

А на высоких частотах и/или длинных линиях -- ещё всякие импедансы и прочая чёрная магия :)

Share this post


Link to post
Share on other sites

Я пересмотрел модульную схему:

1408386603_.jpg.11153821b8f861dd2978c39b3f195e26.jpg

Хочу сделать плату шины к которой можно подключить 4 устройства(это процессор на FPGA, контроллер памяти и контроллер периферии на STM32, видео карта на Sipeed Lichee Tang Nano)

Шину обмена данными представляю следующим образом:

148868806_.jpg.a381065cea3ed9db9569e4db2e2e0875.jpg

Генератор импульсов думаю это кварцевый генератор, счётчик это микросхема К176ИЕ4, дешифратор КМ555ИД4

Принцип работы. Генератор импульсов подаёт сигнал на счётчик, тот на двухразрядном выходе генерирует 00,01,10,11 выбирая тем самым текущее устройство которое может передавать данные на шину. Устройство передатчик получив управление подаёт на шину номер устройства приёмника и данные. Затем дешифратор подключённый к шине передаёт сигнал устройству приёмника для приёма данных. Устройство приёмник которому передают данные их читает.

Ещё смутно представляю как физически всё сделать, надо купить нужные компоненты протестировать работу на макетке, потом закажу изготовление платы. Такую шину можно использовать в разных проектах когда нужен обмен данными между устройствами. SPI не подходит потому что это обмен данными только двух устройств или одного с несколькими и нужно делать дополнительные сигнальные выводы. В моей шине любое устройство может обмениваться данными с любым другим устройством(например контроллер периферии для звука может получать данные от контроллера памяти или контроллер памяти может передавать данные в видеокарту и тд.) и шина данных состоит из 10 контактов два на выбор устройства получателя и 8 на данные. Для быстродействия сделал шину только для 4х устройств, но можно её расширить снизив немного пропускную способность если не увеличить количество контактов данных или увеличить для большей пропускной способности.

Edited by turnip

Share this post


Link to post
Share on other sites

Осталось еще загуглить что такое шина адреса и сигналы управления, и снова модульную схему пересмотреть. :biggrin:

И так до бесконечности...

Вам уже советовали изучить хотя бы старые (Z80 например и его шины) процессоры, а лучше вообще заняться чем-то другим?

 

Share this post


Link to post
Share on other sites
28 минут назад, Freibier сказал:

Осталось еще загуглить что такое шина адреса и сигналы управления, и снова модульную схему пересмотреть. :biggrin:

И так до бесконечности...

Смотрел работу разных интерфейсов в том числе и PCI, который мне не понравился, поэтому стал продумывать свой интерфейс. Я забыл рассказать что ещё разработал и протокол передачи\приёма данных устройствами. Опишу в кратце:

Сначала устройство передатчик подаёт сигнал устройству приёмнику, что хочет ему передать некий пакет данных. Устройство приёмник если свободно, то сообщает, что готово получить данные иначе игнорирует сигнал на получение данных, а передающее устройство продолжает подавать сигнал на передачу и ждёт когда получающее устройство освободится передав сигнал готовности. Далее когда устройство передатчик получает сигнал готовности получения данных приёмником, то передаёт заголовок, в котором содержится адрес и количество данных пакета. Затем производится передача данных.

28 минут назад, Freibier сказал:

Вам уже советовали изучить хотя бы старые (Z80 например и его шины) процессоры, а лучше вообще заняться чем-то другим?

Опять же, я изучал как работает процессор Z80 и мне не понравилось это, для того времени конечно может и нормально, но сегодня логику работы передачи данных на аппаратном уровне можно упростить, а программно это сделать более продвинуто, раньше программно сделать было невозможно наверно, если только делать минипроцессоры микросхемы для такой логики(какую описал выше)

Edited by turnip

Share this post


Link to post
Share on other sites
18 минут назад, turnip сказал:

Сначала устройство передатчик подаёт сигнал устройству приёмнику что хочет ему передать некий пакет данных. Устройство приёмник если свободно, то сообщает что готово получить данные. Далее устройство передатчик передаёт заголовок, в котором содержится адрес и количество данных пакета. Затем производится передача данных.

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

Edited by stealthisname

Share this post


Link to post
Share on other sites
2 hours ago, turnip said:

К176ИЕ4, дешифратор КМ555ИД4

А ещё неплохо было бы посмотреть справочные данные микросхем. Ибо ВНЕЗАПНО обнаружится, что 176-й серии подавай питание 9 В (и логические уровни соответствующие), 555-й -- 5 В, а всякие там STM32 и ПЛИСины в общем случае не выше 3,3 В.

А вообще, накал бреда знатный. Давно такого читать не приходилось :)

Share this post


Link to post
Share on other sites
2 часа назад, stealthisname сказал:

Как подобные коллизии решаются, если обратной связи устройств с генератором импульсов по схеме нет? что помешает счетчику переключиться во время передачи данных?

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

1 час назад, SII сказал:

Ибо ВНЕЗАПНО обнаружится, что 176-й серии подавай питание 9 В (и логические уровни соответствующие), 555-й -- 5 В, а всякие там STM32 и ПЛИСины в общем случае не выше 3,3 В.

А я специально указал маркировку, чтобы мне сказали правильно ли подобрал или нет и какие микросхемы лучше использовать. Кроме того питание шины отдельное. Думаю будет блок питания возможно 9v от которого выходы на питание шины и с понижением для устройств.

1 час назад, SII сказал:

А вообще, накал бреда знатный. Давно такого читать не приходилось :)

Это потому что кто-то изобретает :boast: а вы сопли жуёте :on_the_quiet2:

Edited by turnip

Share this post


Link to post
Share on other sites

ОФФТОП: Я  таких "энтузиастов" называю "ардуинщики" - теории не знают, лепят из кубиков "замки", гордятся "работающим проектом" и жутко обижаются, когда указывают на ляпы и косяки...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this