des00 26 August 17, 2023 Posted August 17, 2023 · Report post что-то типа такого должно быть entity top is port ( ................. -- embedded SRAM pins declaration O_sdram_clk: out std_logic; O_sdram_cke: out std_logic; O_sdram_cs_n: out std_logic; O_sdram_cas_n: out std_logic; O_sdram_ras_n: out std_logic; O_sdram_wen_n: out std_logic; O_sdram_dqm: out std_logic_vector(3 downto 0); O_sdram_addr: out std_logic_vector(10 downto 0); O_sdram_ba: out std_logic_vector(1 downto 0); IO_sdram_dq: inout std_logic_vector(31 downto 0); ); end top; Quote Share this post Link to post Share on other sites More sharing options...
Worldmaster 0 August 17, 2023 Posted August 17, 2023 · Report post В 17.08.2023 в 10:39, Strob сказал: В модуле верхнего уровня, в порты. Да блин.. А об этом как можно было догадаться?? Или все таки это очевидные вещи? В 17.08.2023 в 10:42, des00 сказал: что-то типа такого должно быть Так и сделал. И о чудо. Теперь буфер заполнен каким то мусором. Но это уже хорошо. Хоть чем то заполнен. То есть дальше только проверять как он правильно пишет?? Quote Share this post Link to post Share on other sites More sharing options...
Strob 0 August 17, 2023 Posted August 17, 2023 · Report post 10 minutes ago, Worldmaster said: Да блин.. А об этом как можно было догадаться?? Или все таки это очевидные вещи? Ну, в общем случае, если не предполагать какие-то волшебные возможности сапра, все сигналы должны куда-то подключиться в файлах. Просто бросить их никуда не выведя, плохая идея )) Quote Share this post Link to post Share on other sites More sharing options...
des00 26 August 17, 2023 Posted August 17, 2023 · Report post 11 minutes ago, Worldmaster said: Да блин.. А об этом как можно было догадаться?? Или все таки это очевидные вещи? Так и сделал. И о чудо. Теперь буфер заполнен каким то мусором. Но это уже хорошо. вероятную логику вещей я выше написал) у вас просто control/data path контроллера выкидывался из проекта потому что никуда не шел, оставалась только часть control path работы с системой. интерфейс работал, но вы видели нули 11 minutes ago, Worldmaster said: Хоть чем то заполнен. То есть дальше только проверять как он правильно пишет?? да, именно так. Quote Share this post Link to post Share on other sites More sharing options...
Worldmaster 0 August 17, 2023 Posted August 17, 2023 · Report post В 17.08.2023 в 11:11, Strob сказал: Просто бросить их никуда не выведя, плохая идея )) Ну если вытаскивать каждый сигнал наружу то для него нужен будет констрейнт. В данном случае FloorPlanner даже не показывает линии сдрамы в списке для подключения к физическим линиям. Интересно это какая то фича именно конкретной среды или фича VHDL и я тоже могу подобным образом писать модули? В 17.08.2023 в 11:12, des00 сказал: вероятную логику вещей я выше написал) Учту что такое может быть )) За помощь Вам огромное спасибо. Прям выручили ))) Quote Share this post Link to post Share on other sites More sharing options...
Strob 0 August 17, 2023 Posted August 17, 2023 · Report post 17 minutes ago, Worldmaster said: Интересно это какая то фича именно конкретной среды или фича VHDL и я тоже могу подобным образом писать модули? Фича среды/чипа. Просто у кристалла есть выводы, которые не выведены наружу и не могут быть адресованы как номер ножки, но они существуют и распаяны к чипу памяти, находящемуся в том же корпусе, но рядом с кристаллом плис. Quote Share this post Link to post Share on other sites More sharing options...
Worldmaster 0 August 17, 2023 Posted August 17, 2023 (edited) · Report post Блин.. походу рано обрадовались. ((( Оказывается когда я прописал в портах линии то он начал ругаться на то что USB находится в банках 1,8в. И когда я менял банки для USB слетели констрейнты пинов для USB. В общем когда все поправил то опять все вернулось на свои круги. Также нули считывает ((. Но ошибок и варнингов по портам теперь не пишет. Я же правильно понял что при записи нужно писать в регистр I_sdrc_data модуля. А при чтении считывать из O_sdrc_data ? Точнее он считывает не нули а 0xFF Edited August 17, 2023 by Worldmaster Quote Share this post Link to post Share on other sites More sharing options...
des00 26 August 17, 2023 Posted August 17, 2023 · Report post 7 hours ago, Worldmaster said: Но ошибок и варнингов по портам теперь не пишет. Как минимум теперь он собирается корректно) 7 hours ago, Worldmaster said: Я же правильно понял что при записи нужно писать в регистр I_sdrc_data модуля. А при чтении считывать из O_sdrc_data ? Точнее он считывает не нули а 0xFF надо читать внимательно мануал на корку и крутить в симмуляторе с моделью сдрам памяти, например от микрона. Там ЕМНП, надо корректно включить память, выставив cke, потом выполнить конфигурирование памяти, потом подождать и только потом читать/писать. Если есть возможность посмотреть отладчиком что происходит, то будет неплохо Quote Share this post Link to post Share on other sites More sharing options...
Worldmaster 0 August 18, 2023 Posted August 18, 2023 · Report post В 17.08.2023 в 19:00, des00 сказал: надо корректно включить память, выставив cke Как я его выставлю то?? если доступа нет к этой линии. Все управление вроде как сам модуль выполняет. Самый свежий мануал именно на этот модуль на китайском, он очень даже небольшой и я его уже почти наизусть выучил. Но у меня подозрение что писали его на очень скорую руку абы как. Лишь бы выложить на сайт. Потому как некоторые вещи либо не описаны либо описаны не совсем для этого модуля. на одном ресурсе нашел что якобы используется MT48LC4M16 (64 мегабита). За основу при формировании диаграмм взял именно их мануал. CKE это как я понимаю линия I_sdrc_rst_n. Она у меня во соответстии с диаграммами выставляется в 1. В 17.08.2023 в 19:00, des00 сказал: потом выполнить конфигурирование памяти НУ да. Выполняю инициализацию вот в таком порядке: when 1 => sdram_request_cmd <= NOP_CMD; mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= 5; when 2 => sdram_request_cmd <= PRECHARGE_CMD; sdram_addr_request <= (others => '1'); -- all banks mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= tRP; wait_ack_request <='1'; when 3 => sdram_request_cmd <= NOP_CMD; mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= 5; when 4 => sdram_request_cmd <= REFRESH_CMD; mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= tRFC; when 5 => sdram_request_cmd <= NOP_CMD; mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= 5; when 6 => sdram_request_cmd <= REFRESH_CMD; mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= tRFC; when 7 => sdram_request_cmd <= NOP_CMD; mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= 5; when 8 => sdram_request_cmd <= LOAD_MODE_CMD; sdram_addr_request <= "000000000000000110000"; -- config mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= tMRD; when 9 => sdram_request_cmd <= NOP_CMD; mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= 5; Между командами огромный интервал. почти секунда для надежности. Так что все внутренние процессы должны успевать исполнятся. В 17.08.2023 в 19:00, des00 сказал: Если есть возможность посмотреть отладчиком что происходит, то будет неплохо Насчет отладчика можно поподробнее. У меня подключение выполнено через штатный программатор GOWIN SZFPGA. Отладка как в классических средах по шагам тут разве возможна с остановкой на каждой инструкции?? Насколько я понимаю тут единственный вариант это modelsim. Или нет? Пытался записывать в буфер и отправлять на комп состояние линий cas ras wen. Типа отправил команду на precharge и затем состояние линий в буфер и на комп. Но почему то там всегда единицы. Да и он ошибку пишет при чтении out линий. Цитата Cannot read from 'out' object 'o_sdram_ras_n', use 'buffer' or 'inout' instead("C:\Delme\FPGA\SimpleTest\src\usage.vhd":766) А я могу прослойку сделать из своих сигналов ?? или это повлияет на связи с физическим модулем? если например в архитектуре пропишу свой сигнал как latch. а потом свяжу его с выходной линией ? Quote Share this post Link to post Share on other sites More sharing options...
des00 26 August 18, 2023 Posted August 18, 2023 · Report post 1 hour ago, Worldmaster said: Как я его выставлю то?? если доступа нет к этой линии. CKE это как я понимаю линия I_sdrc_rst_n. Она у меня во соответстии с диаграммами выставляется в 1. это должен контроллер делать, ну ок, считаем что шаги Quote 2. Assert and hold CKE at a LVTTL logic LOW since all inputs and outputs are LVTTL-compatible. 3. Provide stable CLOCK signal. Stable clock is defined as a signal cycling within timing constraints specified for the clock pin. 4. Wait at least 100µs prior to issuing any command other than a COMMAND INHIBIT or NOP. 5. Starting at some point during this 100µs period, bring CKE HIGH. Continuing at least through the end of this period, 1 or more COMMAND INHIBIT or NOP commands must be applied выполняются верно. 1 hour ago, Worldmaster said: НУ да. Выполняю инициализацию вот в таком порядке: when 8 => sdram_request_cmd <= LOAD_MODE_CMD; sdram_addr_request <= "000000000000000110000"; -- config mstate <= SDRAM_CMD_PROCESS; after_cmd_request_delay <= tMRD; Между командами огромный интервал. почти секунда для надежности. Так что все внутренние процессы должны успевать исполнятся. Вы уверены что значение правильное? ЕМНП, команда конфигурации передается как rowa, а не cola. Да, у вас в контроллере нет разделения адреса на две секции, но обычно, на простых контроллерах их делают как {rowa,cola}, а не {cola, rowa}. Ну т.е. в документации прям указано что биты регистра конфигурации лежат в младшей части адреса? 1 hour ago, Worldmaster said: Насчет отладчика можно поподробнее. У меня подключение выполнено через штатный программатор GOWIN SZFPGA. Отладка как в классических средах по шагам тут разве возможна с остановкой на каждой инструкции?? Насколько я понимаю тут единственный вариант это modelsim. Или нет? С говином не работал, но по идее внутрисхемный отладчик какой то должен же быть. А про моделсим да, вы же взяли модель памяти, контроллер, и вашу обертку и запихали это в моделсим? Модель памяти не выдает ошибок? 1 hour ago, Worldmaster said: А я могу прослойку сделать из своих сигналов ?? или это повлияет на связи с физическим модулем? если например в архитектуре пропишу свой сигнал как latch. а потом свяжу его с выходной линией ? это нужно делать до IO buffer, код которых вы выше приводили. Quote Share this post Link to post Share on other sites More sharing options...
Worldmaster 0 August 18, 2023 Posted August 18, 2023 · Report post В 18.08.2023 в 09:25, des00 сказал: Вы уверены что значение правильное? ЕМНП, команда конфигурации передается как rowa, а не cola. Значение я подбирал исходя из страницы даташита на память. Вроде все верно. Только CAS latency поставил в 3 такта. В 18.08.2023 в 09:25, des00 сказал: но по идее внутрисхемный отладчик какой то должен же быть. Ну вот не вижу в этой среде даже кнопки "Запустить/debug" или похожих. Какого нибудь debugger в папке с программой тоже не нашел. Если кто нибудь подскажет где брать то я бы воспользовался конечно. В 18.08.2023 в 09:25, des00 сказал: А про моделсим да, вы же взяли модель памяти, контроллер, и вашу обертку и запихали это в моделсим? Модель памяти не выдает ошибок? Чего?? Я создал проект в моделсиме, загрузил файлики VHD, скомпилил, выбрал линии, задал клок и смотрел на сигналы. Он все скомпилил, запустил, все циклы ходят бесконечно как и планируется с заданными задержками. Его можно использовать как Proteus?? И прям гонять на модели памяти?? В 18.08.2023 в 09:25, des00 сказал: это нужно делать до IO buffer, код которых вы выше приводили. То есть там где это все в шифрованом виде? Quote Share this post Link to post Share on other sites More sharing options...
des00 26 August 18, 2023 Posted August 18, 2023 · Report post 6 minutes ago, Worldmaster said: Значение я подбирал исходя из страницы даташита на память. вопрос не про значение, а про то, откуда оно берется. у сдрам памяти 2 адреса: адрес рядов, адрес столбцов. Отображение этих частей на ваш общий адрес дано в описании корки? команда LMR детектируется когда RAS = 0, CAS = 0, какая часть вашего sdram_addr_request выдается в этот момент на шину вы знаете? 6 minutes ago, Worldmaster said: Чего?? Я создал проект в моделсиме, загрузил файлики VHD, скомпилил, выбрал линии, задал клок и смотрел на сигналы. Он все скомпилил, запустил, все циклы ходят бесконечно как и планируется с заданными задержками. Вот возьмите модель сдрам памяти от микрона на сайте производителя и подключите к вашему проекту. Внутри модели есть черкер, который покажет все ли в порядке с настройками, протоколом + вы сможете туда писать и читать. 6 minutes ago, Worldmaster said: То есть там где это все в шифрованом виде? в этом вашем сообщении вы откуда то взяли код же https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=172095&do=findComment&comment=1871570 Quote Share this post Link to post Share on other sites More sharing options...
Worldmaster 0 August 18, 2023 Posted August 18, 2023 (edited) · Report post В 18.08.2023 в 09:44, des00 сказал: какая часть вашего sdram_addr_request выдается в этот момент на шину вы знаете? У меня других линий просто нет. В описании модуля всего одна линия адреса. Вот диаграмма для передачи команды активации. Я эту диаграмму взял за основу при передачи любых управляющих команд. Я так понял что внутри все развязано При селекте банки они требуют bank/row а при чтении записи col/addr В 18.08.2023 в 09:44, des00 сказал: в этом вашем сообщении вы откуда то взяли код же https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=172095&do=findComment&comment=1871570 это файл который корка генерит. Там половина шифрованая. В 18.08.2023 в 09:44, des00 сказал: Вот возьмите модель сдрам памяти от микрона на сайте производителя и подключите к вашему проекту. Внутри модели есть черкер, который покажет все ли в порядке с настройками, протоколом + вы сможете туда писать и читать. Фига... я не в курсе ваще. ))) Нашел. Но модель же на верилоге. Их все равно можно связать? Edited August 18, 2023 by Worldmaster Quote Share this post Link to post Share on other sites More sharing options...
Strob 0 August 18, 2023 Posted August 18, 2023 (edited) · Report post 2 hours ago, Worldmaster said: Если кто нибудь подскажет где брать то я бы воспользовался конечно. В проект добавить GAO Config File. Его надо настроить, триггеры, условия, сигналы и пр. Потом прошить и запустить Gowin Analyzer Oscilloscope. Детали смотрите в документации Gowin Analyzer Oscilloscope User Guide... Edited August 18, 2023 by Strob Quote Share this post Link to post Share on other sites More sharing options...
des00 26 August 21, 2023 Posted August 21, 2023 · Report post есть вот такой глупый вопрос, а почему тут https://www.gowinsemi.com/en/support/database/2056/ указано что "The second is an embedded SDRAM controller for GW2AR-18, GW1NR-4, etc., and this SDRAM IP can be generated directly without the need to set parameter" а в описании 2.2.2 Embedded SDRAM Controller указано что контроллер не требуется настраивать (выполнять LMR и все такое), а в описании и в референсных примерах в самом контроллере отсутствуют сигналы cmd_en/cmd/cmd_ack? В примерах контроллер не инициализируется, а сразу начинает писать/читать из памяти и в память. Почему корки разные? корки из рисунка под названием SDRAM HS на сайте вообще нет. PS. Ну и в целом, даже если они выпустили новую корку, с другими параметрами, то запустить старую из рефернсных примеров, посмотреть как они работают с моделью памяти и сравнить с новой. Особенно не понятно, зачем, имея самонастраиваемую корку для встроенной памяти, делать для пользователя менее юзер френдли. Quote Share this post Link to post Share on other sites More sharing options...