Jump to content
    

Предупреждения VHDL

что-то типа такого должно быть

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;

 

Share this post


Link to post
Share on other sites

В 17.08.2023 в 10:39, Strob сказал:

В модуле верхнего уровня, в порты.

Да блин.. А об этом как можно было догадаться?? Или все таки это очевидные вещи?

 

В 17.08.2023 в 10:42, des00 сказал:

что-то типа такого должно быть

Так и сделал. И о чудо. Теперь буфер заполнен каким то мусором. Но это уже хорошо. 

Хоть чем то заполнен. То есть дальше только проверять как он правильно пишет?? 

Share this post


Link to post
Share on other sites

10 minutes ago, Worldmaster said:

Да блин.. А об этом как можно было догадаться?? Или все таки это очевидные вещи?

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

Share this post


Link to post
Share on other sites

11 minutes ago, Worldmaster said:

Да блин.. А об этом как можно было догадаться?? Или все таки это очевидные вещи?

Так и сделал. И о чудо. Теперь буфер заполнен каким то мусором. Но это уже хорошо. 

вероятную логику вещей я выше написал) у вас просто control/data path контроллера выкидывался из проекта потому что никуда не шел, оставалась только часть control path работы с системой. интерфейс работал, но вы видели нули

11 minutes ago, Worldmaster said:

Хоть чем то заполнен. То есть дальше только проверять как он правильно пишет?? 

да, именно так.

Share this post


Link to post
Share on other sites

В 17.08.2023 в 11:11, Strob сказал:

Просто бросить их никуда не выведя, плохая идея ))

Ну если вытаскивать каждый сигнал наружу то для него нужен будет констрейнт. В данном случае FloorPlanner даже не показывает линии сдрамы в списке для подключения к физическим линиям. 

Интересно это какая то фича именно конкретной среды или фича VHDL и я тоже могу подобным образом писать модули?

В 17.08.2023 в 11:12, des00 сказал:

вероятную логику вещей я выше написал)

Учту что такое может быть ))

 

За помощь Вам огромное спасибо. Прям выручили )))

 

Share this post


Link to post
Share on other sites

17 minutes ago, Worldmaster said:

Интересно это какая то фича именно конкретной среды или фича VHDL и я тоже могу подобным образом писать модули?

Фича среды/чипа. Просто у кристалла есть выводы, которые не выведены наружу и не могут быть адресованы как номер ножки, но они существуют и распаяны к чипу памяти, находящемуся в том же корпусе, но рядом с кристаллом плис.

Share this post


Link to post
Share on other sites

Блин.. походу рано обрадовались. (((

Оказывается когда я прописал в портах линии то он начал ругаться на то что USB находится в банках 1,8в.

И когда я менял банки для USB слетели констрейнты пинов для USB.

В общем когда все поправил то опять все вернулось на свои круги. Также нули считывает ((.

Но ошибок и варнингов по портам теперь не пишет. 

 

Я же правильно понял что при записи нужно писать в регистр I_sdrc_data модуля.

А при чтении считывать из O_sdrc_data ?

 

Точнее он считывает не нули а 0xFF

Edited by Worldmaster

Share this post


Link to post
Share on other sites

7 hours ago, Worldmaster said:

Но ошибок и варнингов по портам теперь не пишет. 

Как минимум теперь он собирается корректно)

7 hours ago, Worldmaster said:

Я же правильно понял что при записи нужно писать в регистр I_sdrc_data модуля.

А при чтении считывать из O_sdrc_data ?

Точнее он считывает не нули а 0xFF

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

Там ЕМНП, надо корректно включить память, выставив cke, потом выполнить конфигурирование памяти, потом подождать и только потом читать/писать. Если есть возможность посмотреть отладчиком что происходит, то будет неплохо

Share this post


Link to post
Share on other sites

В 17.08.2023 в 19:00, des00 сказал:

надо корректно включить память, выставив cke

Как я его выставлю то?? если доступа нет к этой линии.

image.thumb.png.4b058056d57d8e878e9262979e62f771.png

 

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

Но у меня подозрение что писали его на очень скорую руку абы как. Лишь бы выложить на сайт. Потому как некоторые вещи либо не описаны либо описаны не совсем для этого модуля.

на одном ресурсе нашел что якобы используется 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. 

а потом свяжу его с выходной линией ?

 

 

 

 

 

Share this post


Link to post
Share on other sites

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, код которых вы выше приводили.

Share this post


Link to post
Share on other sites

В 18.08.2023 в 09:25, des00 сказал:

Вы уверены что значение правильное? ЕМНП, команда конфигурации передается как rowa, а не cola.

Значение я подбирал исходя из страницы даташита на память.

image.thumb.png.3dd0dc369708c12982d1b2ad974aa958.png

Вроде все верно. Только CAS latency поставил в 3 такта.

 

В 18.08.2023 в 09:25, des00 сказал:

но по идее внутрисхемный отладчик какой то должен же быть.

Ну вот не вижу в этой среде даже кнопки "Запустить/debug" или похожих. Какого нибудь debugger  в папке с программой тоже не нашел. Если кто нибудь подскажет где брать то я бы воспользовался конечно.

image.thumb.png.81451b6d5f36ba4216b68ffa3307383c.png

 

В 18.08.2023 в 09:25, des00 сказал:

А про моделсим да, вы же взяли модель памяти, контроллер, и вашу обертку и запихали это в моделсим? Модель памяти не выдает ошибок?

Чего?? Я создал проект в моделсиме, загрузил файлики VHD, скомпилил, выбрал линии, задал клок и смотрел на сигналы. 

image.thumb.png.c5349d08dbb80cc4c0e754c0c48183c0.png

Он все скомпилил, запустил, все циклы ходят бесконечно как и планируется с заданными задержками.

Его можно использовать как Proteus?? И прям гонять на модели памяти?? 

В 18.08.2023 в 09:25, des00 сказал:

это нужно делать до IO buffer, код которых вы выше приводили.

То есть там где это все в шифрованом виде?

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

В 18.08.2023 в 09:44, des00 сказал:

какая часть вашего sdram_addr_request выдается в этот момент на шину вы знаете?

У меня других линий просто нет. В описании модуля всего одна линия адреса. Вот диаграмма для передачи команды активации. Я эту диаграмму взял за основу при передачи любых управляющих команд. Я так понял что внутри все развязано

image.thumb.png.2d5830eadbb0646bfc218e0c471869cd.png

При селекте банки они требуют bank/row

image.thumb.png.d2906194aa5d230beb9892da2e5cb82f.png

а при чтении записи col/addr

image.thumb.png.d24ccfd30462834debb16589184b5a45.png

 

В 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 сказал:

Вот возьмите модель сдрам памяти от микрона на сайте производителя и подключите к вашему проекту. Внутри модели есть черкер, который покажет все ли в порядке с настройками, протоколом + вы сможете туда писать и читать.

Фига... я не в курсе ваще. )))

Нашел. Но модель же на верилоге. Их все равно можно связать?

 

 

 

image.png

Edited by Worldmaster

Share this post


Link to post
Share on other sites

2 hours ago, Worldmaster said:

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

В проект добавить GAO Config File. Его надо настроить, триггеры, условия, сигналы и пр. Потом прошить и запустить Gowin Analyzer Oscilloscope. Детали смотрите в документации Gowin Analyzer Oscilloscope User Guide...

Edited by Strob

Share this post


Link to post
Share on other sites

есть вот такой глупый вопрос, а почему тут 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. Ну и в целом, даже если они выпустили новую корку, с другими параметрами, то запустить старую из рефернсных примеров, посмотреть как они работают с моделью памяти и сравнить с новой. Особенно не понятно, зачем, имея самонастраиваемую корку для встроенной памяти, делать для пользователя менее юзер френдли.

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.

×
×
  • Create New...