скажите, а lcd индикатор этот нужно к ножкам плис через токоограничивающие резисторы подключать? или можно без них, как бы у меня отладочная плата и гнездо для индикатора, но резисторов там нет
Принципиальная схема показана на 2:20, резисторы есть только на подсветке и регулировке яркости, на сигнальных цепях они не требуются. Для собственного успокоения можно, конечно, подключить и через какие-нибудь низкоомные резисторы, но у ПЛИС есть своё ограничение по току на выводах.
@@ПЛИСоводство спасибо, а такой еще вопросик, подключаю несколько кнопок к ножкам плиса которые также не имеют подтяжки, есть ли такие настройки которые позволяют подтягивать "ИСПОЛЬЗУЕМЫЕ" ножки к плюсу или к минусу? если нету такой опции то как вариант может подойти подтяжка константой 1'h1; или элементом -И- ? т.е представить что вместо резистора снаружи я дописываю в модуль елемент -И- со входами по "1" который подключаю выходом к INPUT внутри модуля для кнопки и он дает постоянный плюс на INPUT, а кнопка с наружи прижимает потенциал к земле при нажатии.
@@коментатор-н1г У плисин есть встроенные подтяжки. Если мне не изменяет память, делается это через выставление опций в пинпланере, сейчас у меня нет доступа до Квартуса, так что точнее сказать не могу. Но такими методами как у Вас действовать не получится, компилятор просто не позволит подать выход элемента И на вход, или, скажем, соединить выходы двух элементов вместе, т.к. в архитектуре ПЛИС такого не заложено. В общем посмотрите что там есть в PinPlaner-e.
@@ПЛИСоводство, не курсовая...)) У меня такая ситуация, предложили сходить в компанию на собеседование связанную с SystemVerilog, верификацией UVM... Сам не был связан с этими вещами... Но хочу подготовиться.. Вот нашёл ваши видео, изучаю. Хочу сказать очень даже познавательные. Скачал книгу Цифровая схемотехника и архитектура компьютера второе издание Дэвид М. Харрис и Сара Л. Харрис. Может что-нибудь подскажите ??? В каком направление двигаться.. Хотелось бы с вами пообщаться, если вы не против вот мой адрес: vk.com/id12641716
@@Dima21272 Сложно сказать... Я сам с SystemVerilog не очень, а про UVM только что-то мельком слышал. Из книг по Verilog-у могу посоветовать: Основы языка проектирования цифровой аппаратуры Verilog - Соловьёв Проектирование и верификация цифровых систем на кристаллах. Verilog & System Verilog - Хаханов Логическое проектирование и верификация систем на SystemVerilog - Дональ Томас, но в сети я её найти не смог.
Здравствуйте. Не могу разобраться как строится алгоритм работы дисплея и как писать файл lcdcd.v. подскажите, если не трудно что почитать/посмотреть чтоб понять
И ещё, какого типа регистр используете для хранения инструкций? С входами l0-l5, d0-d5 и выходом q. Заранее извиняюсь если это было в предыдущих видео, пока не со всеми материалами ознакомился
@@ИгорьБрыков-з4с Не совсем понятен вопрос по поводу типа регистра. Это обычный регистр хранения с параллельной загрузкой и параллельным чтением, особенность только в том что каналов для загрузки шесть штук. Или интересует номер интегральной микросхемы с аналогичными функциями? Такой нет. Алгоритм работы дисплея исполняет управляющее устройство, оно же управляющий автомат, оно же конечный автомат. По конечным автоматам в сети информации много, только, по большей части, сухая теория из которой непонятен смысл происходящего. Если кратко, то сначала рисуется алгоритм работы автомата, его можно нарисовать в виде графа (кружочки со стрелочками), можно в виде блок-схемы (как в видео), далее уже по имеющемуся алгоритму либо вручную составляется таблица переходов и выходов с последующим построением по ней схемы, либо пишется код на HDL-языке, например на Верилоге. Если интересуют подробности по автоматам, то могу порекомендовать посмотреть мои лекции, начиная с 17 и далее ruclips.net/p/PL4UMfOeGYsvZs-gvs0dC8oO3HXrmGC1bm Как написать код автомата на Верилоге смотреть тут начиная с 2:00:40 ruclips.net/video/2w6DJIATTa4/видео.html
@@ПЛИСоводство я примерно уловил для чего он нужен, но мне больше по душе мультиплексоры, попробую через него решить. Ещё у меня немного другой дисплей (типа 12864) но в целом он на тех же принципах работает. К моей плате шёл пример от китайцев, он как то непонятно описан, видимо тоже автомат используется. Решил написать свой вариант модуля и наткнулся на ваши видео. Спасибо за развёрнутый ответ
@@ПЛИСоводство а если рассмотреть задачу выводить не символы а картинку, то нужно будет передавать картинку в память cgram по типу как самодельные символы? А поскольку cgram ограничена по объёму то нужно будет картинку разбивать на части и грузить на экран порционно? Я в верном направлении мыслю, или есть более простой способ, как считаете?
@@ПЛИСоводство А вот и вопросы.. Как сделать подобие стека и "подпрограмм" и как работать с двунаправленными шинами? Условный пример (обрезан по максимуму, с кучей нарушений, команда с аргументами будет браться из сдвигового регистра): module NAND_CIV ( inout reg [7:0] NAND_DATA, input wire CLK, output reg ALE,CLE,CE1,RE,WE); reg [7:0] state_reg, next_state, tmp_state, tmp_nand; parameter Idle = 0, wr_cmd_1 = 1, wr_cmd_2 = 2, wr_cmd_3 = 3, wr_adr_1 = 4, wr_adr_2 = 5, wr_adr_3 = 6, rd_id_0 = 10; initial state_reg
@@None-sh9sw Не уловил сути, но по поводу возникновения защёлок могу сказать, что причина их возникновения - не до конца прописанные значения на всех переходах условия. Например в ветке "wr_cmd_1" tmp_state не определён, и компилятор пытается хранить предыдущее состояние, а так как tmp_state это не регистр а выход комбинационной схемы (ибо always @*) то он и реализует запоминание на защёлках. Вообще от защёлок в комбинационных схемах надо избавляться, а если нужно запоминание то его надо создавать на регистрах (always @(posedge Clk)). По поводу двунаправленной шины - да, assign = ( ? : {WIDTH{1'bz}}); так обычно и делают. Порт объявляется как inout ; Ну да, в Квартусе довольно интересно симулятор показывает двунаправленные шины. Отдельно показывает что выдаётся на шину по каждому источнику, и отдельно показывает итоговое состояние шины (если правильно помню).
@@ПЛИСоводство Нашлась статья habr.com/ru/post/347928/ где подглядел интересный вариант с одним always. Получился такой черновик с одним always yadi.sk/d/pMs5LMikn3aH1Q , где можно менять только один сигнал без образования кучи защелок. Получилось что-то типа конечного автомата внутри конечного автомата. (Прошлый код проверял в железе - работает, в Hi-Z линии переходят, нужные последовательности создает, ответ смотрится через логический анализатор.) "так как tmp_state это не регистр а выход комбинационной схемы (ибо always @*)" Как их отличать? Любое присвоение внутри "always @*" и получаю выход комбинационной схемы и при попытке еще раз присвоить в другом месте получу защелки? "если нужно запоминание то его надо создавать на регистрах (always @(posedge Clk))" Можно увидеть максимально короткий пример? Насколько порочная практика вместо "L3_REGDataY = 0;" и так далее использовать объединение в стиле {ALE,CLE,CE1,RE,WE}
@@None-sh9sw Странная статья, дело не в количестве always-ов, а в том какая схема получится после компиляции. Да тем и отличается, если always-блок объявлен как always @*, то это комбинационная схема, и все переменные в ней - это выходы комбинационной логики. А если always-блок объявлен как always @(posedge Clk), то это уже регистры. И вот для регистров необязательно прописывать значения на всех ветках условия, регистр умеет хранить своё значение по умолчанию, это его свойство, в отличии от комб. схем. "и при попытке еще раз присвоить в другом месте получу защелки?" Наоборот, если не присвоить значение комб. схеме НЕ на всех ветках условия, то компилятор попытается сохранить прошлое значение путём установления защёлок. Этого надо избегать, и присваивать значения на ВСЕХ ветках условия. "Можно увидеть максимально короткий пример?" Об автоматах коротко, к сожалению, не получается. Первый этап - надо понять принцип работы автомата, чем отличается автомат Мили от Мура, их свойства и прочее. Второй этап - научится кодировать автоматы в Верилоге. Второе без первого смысла не имеет. Как создаются автоматы в Верилоге можно посмотреть здесь (с таим-кодом): ruclips.net/video/2w6DJIATTa4/видео.html А вот теорию автоматов рассматривали в курсе по цифровой схемотехнике, начиная с 17-ой лекции. Но, я так понимаю, его никто не смотрит, видимо из-за того что долго и нудно. Может попозже сделаю видос по автоматам где попробую изложить суть покомпактнее. "Насколько порочная практика вместо "L3_REGDataY = 0;" и так далее использовать объединение в стиле {ALE,CLE,CE1,RE,WE}
если в даташите указанно питание 5 вольт, значит надо подавать 5 вольт и даталинии тоже 5 вольт. помню два вечера потерял, не было инициализации, а аак только 5 вольт подал, сразу все взлетело.
*НАРОД, а вы в курсе что он умет по человечески, как на Си писать на Verilog ?!* И боле того, может абсолютно понятным микроконтрольщику Си-шнику языком объяснить на примере кода что где и как ! Я после 2ч таких комментов сразу сел и с 1ого раза прогу на плис нахерачил на 5стр! НО вот зачем то зрителей терроризируют низкоуровневым джихадом.. загадка :))) И не признается что можно делать ИНАЧЕ ;)
@@ПЛИСоводство в комментах ко 2ой части писали похожий моему, про что-то подобное макросу, для управления управляющим устройством, код управляющего автомата мне кажется был бы не таким громоздким
@@vladimirpavlov1885 Да как сказать... Проще скорее всего не будет. Возможно будет гибче. Хотя, с другой стороны, чем так плохо? Заполняй ОЗУ букавками, а они сами на экране высвечиваются.
@@dmitryveselov5546 Да полное кощунство и издевательство над камнем..... Хотя есть кубы и халы, куда уж проще ! То над AVR измывались, хотя был CAVR, с кодгеном, клик клик мышкой и код, но неееет им нужно было либы в жопу диска запихать, расширение Си-файлов как и прошивки черными матюгами обозвать...., лишить пользователя отладки итп...
Говорю выложи ты тот, высокоуровневый, современный код в стиле Си для 1620 и ПРОКОММЕНТИРУЙ, будет толпа народу !!! А то ну это садизм.... Высокоуровневым языком писать низкоуровневые схемные алгоритмы.... ;/ Круто конечно , большущая работа, с кириллицей в CGRAM, с RAM плиски!, но читаемость.... Это пиздец :( Если только либу сделать...
Это который, из китайского примера? Его даже показывать людям стыдно. Да и FPGA это само по себе "низкоуровневые схемы", это её природа. А толпы народу не будет, в принципе - вся эта тема с FPGA специфическая, а канал не раскручен.
Продолжайтеи...уроки по плис .. пожалуйста !!!! Делайте уроки с различной переферией ...
Стараемся.
скажите, а lcd индикатор этот нужно к ножкам плис через токоограничивающие резисторы подключать? или можно без них, как бы у меня отладочная плата и гнездо для индикатора, но резисторов там нет
Принципиальная схема показана на 2:20, резисторы есть только на подсветке и регулировке яркости, на сигнальных цепях они не требуются. Для собственного успокоения можно, конечно, подключить и через какие-нибудь низкоомные резисторы, но у ПЛИС есть своё ограничение по току на выводах.
@@ПЛИСоводство спасибо, а такой еще вопросик, подключаю несколько кнопок к ножкам плиса которые также не имеют подтяжки, есть ли такие настройки которые позволяют подтягивать "ИСПОЛЬЗУЕМЫЕ" ножки к плюсу или к минусу? если нету такой опции то как вариант может подойти подтяжка константой 1'h1; или элементом -И- ? т.е представить что вместо резистора снаружи я дописываю в модуль елемент -И- со входами по "1" который подключаю выходом к INPUT внутри модуля для кнопки и он дает постоянный плюс на INPUT, а кнопка с наружи прижимает потенциал к земле при нажатии.
@@коментатор-н1г У плисин есть встроенные подтяжки. Если мне не изменяет память, делается это через выставление опций в пинпланере, сейчас у меня нет доступа до Квартуса, так что точнее сказать не могу. Но такими методами как у Вас действовать не получится, компилятор просто не позволит подать выход элемента И на вход, или, скажем, соединить выходы двух элементов вместе, т.к. в архитектуре ПЛИС такого не заложено.
В общем посмотрите что там есть в PinPlaner-e.
Здравствуйте! Jack0v. Не могли бы вы помочь? Есть пару вопросов по Fpga... Можно как-то с вами связаться?
Спрашивайте смело.
@@ПЛИСоводство вы в контакте есть?
@@Dima21272 Вопрос в чём, кратко? Помочь с курсовиком/дипломом? Извините, но на это нет времени.
@@ПЛИСоводство, не курсовая...)) У меня такая ситуация, предложили сходить в компанию на собеседование связанную с SystemVerilog, верификацией UVM... Сам не был связан с этими вещами... Но хочу подготовиться.. Вот нашёл ваши видео, изучаю. Хочу сказать очень даже познавательные. Скачал книгу Цифровая схемотехника и архитектура компьютера второе издание Дэвид М. Харрис и Сара Л. Харрис. Может что-нибудь подскажите ??? В каком направление двигаться..
Хотелось бы с вами пообщаться, если вы не против вот мой адрес: vk.com/id12641716
@@Dima21272 Сложно сказать... Я сам с SystemVerilog не очень, а про UVM только что-то мельком слышал.
Из книг по Verilog-у могу посоветовать:
Основы языка проектирования цифровой аппаратуры Verilog - Соловьёв
Проектирование и верификация цифровых систем на кристаллах. Verilog & System Verilog - Хаханов
Логическое проектирование и верификация систем на SystemVerilog - Дональ Томас, но в сети я её найти не смог.
Здравствуйте. Не могу разобраться как строится алгоритм работы дисплея и как писать файл lcdcd.v. подскажите, если не трудно что почитать/посмотреть чтоб понять
И ещё, какого типа регистр используете для хранения инструкций? С входами l0-l5, d0-d5 и выходом q. Заранее извиняюсь если это было в предыдущих видео, пока не со всеми материалами ознакомился
@@ИгорьБрыков-з4с Не совсем понятен вопрос по поводу типа регистра. Это обычный регистр хранения с параллельной загрузкой и параллельным чтением, особенность только в том что каналов для загрузки шесть штук. Или интересует номер интегральной микросхемы с аналогичными функциями? Такой нет.
Алгоритм работы дисплея исполняет управляющее устройство, оно же управляющий автомат, оно же конечный автомат. По конечным автоматам в сети информации много, только, по большей части, сухая теория из которой непонятен смысл происходящего. Если кратко, то сначала рисуется алгоритм работы автомата, его можно нарисовать в виде графа (кружочки со стрелочками), можно в виде блок-схемы (как в видео), далее уже по имеющемуся алгоритму либо вручную составляется таблица переходов и выходов с последующим построением по ней схемы, либо пишется код на HDL-языке, например на Верилоге.
Если интересуют подробности по автоматам, то могу порекомендовать посмотреть мои лекции, начиная с 17 и далее
ruclips.net/p/PL4UMfOeGYsvZs-gvs0dC8oO3HXrmGC1bm
Как написать код автомата на Верилоге смотреть тут начиная с 2:00:40
ruclips.net/video/2w6DJIATTa4/видео.html
@@ПЛИСоводство я примерно уловил для чего он нужен, но мне больше по душе мультиплексоры, попробую через него решить. Ещё у меня немного другой дисплей (типа 12864) но в целом он на тех же принципах работает. К моей плате шёл пример от китайцев, он как то непонятно описан, видимо тоже автомат используется. Решил написать свой вариант модуля и наткнулся на ваши видео. Спасибо за развёрнутый ответ
@@ИгорьБрыков-з4с 12864 у меня тоже есть, настанет время и про него видос сделаю.
Удачи в освоении.
@@ПЛИСоводство а если рассмотреть задачу выводить не символы а картинку, то нужно будет передавать картинку в память cgram по типу как самодельные символы? А поскольку cgram ограничена по объёму то нужно будет картинку разбивать на части и грузить на экран порционно? Я в верном направлении мыслю, или есть более простой способ, как считаете?
Сенсей вернулся!
Раз в три месяца видос. Чаще пока не получается, увы.
@@ПЛИСоводство А вот и вопросы..
Как сделать подобие стека и "подпрограмм" и как работать с двунаправленными шинами?
Условный пример (обрезан по максимуму, с кучей нарушений, команда с аргументами будет браться из сдвигового регистра):
module NAND_CIV
( inout reg [7:0] NAND_DATA,
input wire CLK,
output reg ALE,CLE,CE1,RE,WE);
reg [7:0] state_reg, next_state, tmp_state, tmp_nand;
parameter Idle = 0, wr_cmd_1 = 1, wr_cmd_2 = 2, wr_cmd_3 = 3, wr_adr_1 = 4, wr_adr_2 = 5, wr_adr_3 = 6, rd_id_0 = 10;
initial state_reg
@@None-sh9sw Не уловил сути, но по поводу возникновения защёлок могу сказать, что причина их возникновения - не до конца прописанные значения на всех переходах условия. Например в ветке "wr_cmd_1" tmp_state не определён, и компилятор пытается хранить предыдущее состояние, а так как tmp_state это не регистр а выход комбинационной схемы (ибо always @*) то он и реализует запоминание на защёлках. Вообще от защёлок в комбинационных схемах надо избавляться, а если нужно запоминание то его надо создавать на регистрах (always @(posedge Clk)).
По поводу двунаправленной шины - да, assign = ( ? : {WIDTH{1'bz}}); так обычно и делают. Порт объявляется как
inout ;
Ну да, в Квартусе довольно интересно симулятор показывает двунаправленные шины. Отдельно показывает что выдаётся на шину по каждому источнику, и отдельно показывает итоговое состояние шины (если правильно помню).
@@ПЛИСоводство Нашлась статья habr.com/ru/post/347928/ где подглядел интересный вариант с одним always.
Получился такой черновик с одним always yadi.sk/d/pMs5LMikn3aH1Q , где можно менять только один сигнал без образования кучи защелок.
Получилось что-то типа конечного автомата внутри конечного автомата.
(Прошлый код проверял в железе - работает, в Hi-Z линии переходят, нужные последовательности создает, ответ смотрится через логический анализатор.)
"так как tmp_state это не регистр а выход комбинационной схемы (ибо always @*)"
Как их отличать? Любое присвоение внутри "always @*" и получаю выход комбинационной схемы и при попытке еще раз присвоить в другом месте получу защелки?
"если нужно запоминание то его надо создавать на регистрах (always @(posedge Clk))"
Можно увидеть максимально короткий пример?
Насколько порочная практика вместо "L3_REGDataY = 0;" и так далее использовать объединение в стиле {ALE,CLE,CE1,RE,WE}
@@None-sh9sw Странная статья, дело не в количестве always-ов, а в том какая схема получится после компиляции.
Да тем и отличается, если always-блок объявлен как always @*, то это комбинационная схема, и все переменные в ней - это выходы комбинационной логики. А если always-блок объявлен как always @(posedge Clk), то это уже регистры. И вот для регистров необязательно прописывать значения на всех ветках условия, регистр умеет хранить своё значение по умолчанию, это его свойство, в отличии от комб. схем.
"и при попытке еще раз присвоить в другом месте получу защелки?"
Наоборот, если не присвоить значение комб. схеме НЕ на всех ветках условия, то компилятор попытается сохранить прошлое значение путём установления защёлок. Этого надо избегать, и присваивать значения на ВСЕХ ветках условия.
"Можно увидеть максимально короткий пример?"
Об автоматах коротко, к сожалению, не получается. Первый этап - надо понять принцип работы автомата, чем отличается автомат Мили от Мура, их свойства и прочее. Второй этап - научится кодировать автоматы в Верилоге. Второе без первого смысла не имеет. Как создаются автоматы в Верилоге можно посмотреть здесь (с таим-кодом):
ruclips.net/video/2w6DJIATTa4/видео.html
А вот теорию автоматов рассматривали в курсе по цифровой схемотехнике, начиная с 17-ой лекции. Но, я так понимаю, его никто не смотрит, видимо из-за того что долго и нудно. Может попозже сделаю видос по автоматам где попробую изложить суть покомпактнее.
"Насколько порочная практика вместо "L3_REGDataY = 0;" и так далее использовать объединение в стиле {ALE,CLE,CE1,RE,WE}
Ой, а я вроде хде то его уже видел, этот 1620 ?! :))) Правда он у меня выводил : I HEAT PUTLER !, I HEAT CHUBAIS ! :))))
конечно классно обьясняете,но чёрный фон это жесть просто хоть глаз выколи особенно синие и красные символы как в анекдоте негры ночью воруют уголь
Да, с телефона такое смотреть плохо.
@@ПЛИСоводство моник 22 дюйма смотрю почти в упор зрение 100%
@@ПЛИСоводство посмотрите любую схему или даташит везде белый фон ,пожалуйста возьмите это за правило
@@bablon1981 В этом нет стиля.
я на 27 дюймовом смотрю, мне не мешает)
Здравствуйте! Всё интересно, но не читабельно, после СИ сплошная каша, нет Вы молодец! только контингент у нас разный и код не все могут понять.
Для того чтобы понять код есть отдельный курс по Verilog-у
ruclips.net/p/PL4UMfOeGYsvblwrP3VYKHq11xgkxVqoUj
если в даташите указанно питание 5 вольт, значит надо подавать 5 вольт и даталинии тоже 5 вольт. помню два вечера потерял, не было инициализации, а аак только 5 вольт подал, сразу все взлетело.
Хочешь сказать мне просто повезло?
@@ПЛИСоводство да.
@@ПЛИСоводство они бывают на 3.6 вольта вроде, но их днем с огнем не найти.
@@Илья-г9п3з То ли в даташите каком-то прочёл, то ли ещё где-то. Не помню откуда я эту инфу взял.
Первый!
Надо же, вот теперь и у меня первонахи появились. Успех!
*НАРОД, а вы в курсе что он умет по человечески, как на Си писать на Verilog ?!*
И боле того, может абсолютно понятным микроконтрольщику Си-шнику языком объяснить на примере кода что где и как !
Я после 2ч таких комментов сразу сел и с 1ого раза прогу на плис нахерачил на 5стр!
НО вот зачем то зрителей терроризируют низкоуровневым джихадом.. загадка :))) И не признается что можно делать ИНАЧЕ ;)
Потому что если делать "иначе" то не сложится правильного понимания вещей.
Можно было инструкции по инициализации загнать в рам файл
Можно было бы, но как-то жирно под несколько команд ОЗУ выделять.
@@ПЛИСоводство в комментах ко 2ой части писали похожий моему, про что-то подобное макросу, для управления управляющим устройством, код управляющего автомата мне кажется был бы не таким громоздким
@@ПЛИСоводство я это просто к чему: вполне вероятно можно превратить управляющий автомат в некое подобие ядра процессора
@@vladimirpavlov1885 Да как сказать... Проще скорее всего не будет. Возможно будет гибче. Хотя, с другой стороны, чем так плохо? Заполняй ОЗУ букавками, а они сами на экране высвечиваются.
@@ПЛИСоводство для узко специализированного назначения и так сойдёт) спасибо за хорошие ролики, удачи!
Arduino must die!
Хотя она перешла на STM, так что ещё немного поживёт)
Интересно. Не знал...
@@dmitryveselov5546 Да полное кощунство и издевательство над камнем..... Хотя есть кубы и халы, куда уж проще !
То над AVR измывались, хотя был CAVR, с кодгеном, клик клик мышкой и код, но неееет им нужно было либы в жопу диска запихать, расширение Си-файлов как и прошивки черными матюгами обозвать...., лишить пользователя отладки итп...
Говорю выложи ты тот, высокоуровневый, современный код в стиле Си для 1620 и ПРОКОММЕНТИРУЙ, будет толпа народу !!!
А то ну это садизм.... Высокоуровневым языком писать низкоуровневые схемные алгоритмы.... ;/
Круто конечно , большущая работа, с кириллицей в CGRAM, с RAM плиски!, но читаемость.... Это пиздец :( Если только либу сделать...
Это который, из китайского примера? Его даже показывать людям стыдно. Да и FPGA это само по себе "низкоуровневые схемы", это её природа.
А толпы народу не будет, в принципе - вся эта тема с FPGA специфическая, а канал не раскручен.