Worldmaster 0 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба Здравствуйте. Есть знатоки по FPGA GOWIN? У меня чип GW2AR-18 в корпусе EQ144. Если верить даташиту то у него есть на борту SDR SDRAM 32 bits 64M bits. У кого нибудь получилось запустить и поработать с этим модулем? В генераторе IP Core вроде даже есть возможность сгенерить код, но так какая то муть получается. Половина зашифрована (может так и должно быть). Как этим пользоваться вообще не ясно. Допустим если закрыть глаза на шифрованый блок то мне предлагают в своем коде использовать такой вот блок: SDRAM your_instance_name( .O_sdram_clk(O_sdram_clk_o), //output O_sdram_clk .O_sdram_cke(O_sdram_cke_o), //output O_sdram_cke .O_sdram_cs_n(O_sdram_cs_n_o), //output O_sdram_cs_n .O_sdram_cas_n(O_sdram_cas_n_o), //output O_sdram_cas_n .O_sdram_ras_n(O_sdram_ras_n_o), //output O_sdram_ras_n .O_sdram_wen_n(O_sdram_wen_n_o), //output O_sdram_wen_n .O_sdram_dqm(O_sdram_dqm_o), //output [3:0] O_sdram_dqm .O_sdram_addr(O_sdram_addr_o), //output [10:0] O_sdram_addr .O_sdram_ba(O_sdram_ba_o), //output [1:0] O_sdram_ba .IO_sdram_dq(IO_sdram_dq_io), //inout [31:0] IO_sdram_dq .I_sdrc_rst_n(I_sdrc_rst_n_i), //input I_sdrc_rst_n .I_sdrc_clk(I_sdrc_clk_i), //input I_sdrc_clk .I_sdram_clk(I_sdram_clk_i), //input I_sdram_clk .I_sdrc_selfrefresh(I_sdrc_selfrefresh_i), //input I_sdrc_selfrefresh .I_sdrc_power_down(I_sdrc_power_down_i), //input I_sdrc_power_down .I_sdrc_wr_n(I_sdrc_wr_n_i), //input I_sdrc_wr_n .I_sdrc_rd_n(I_sdrc_rd_n_i), //input I_sdrc_rd_n .I_sdrc_addr(I_sdrc_addr_i), //input [20:0] I_sdrc_addr .I_sdrc_data_len(I_sdrc_data_len_i), //input [7:0] I_sdrc_data_len .I_sdrc_dqm(I_sdrc_dqm_i), //input [3:0] I_sdrc_dqm .I_sdrc_data(I_sdrc_data_i), //input [31:0] I_sdrc_data .O_sdrc_data(O_sdrc_data_o), //output [31:0] O_sdrc_data .O_sdrc_init_done(O_sdrc_init_done_o), //output O_sdrc_init_done .O_sdrc_busy_n(O_sdrc_busy_n_o), //output O_sdrc_busy_n .O_sdrc_rd_valid(O_sdrc_rd_valid_o), //output O_sdrc_rd_valid .O_sdrc_wrd_ack(O_sdrc_wrd_ack_o) //output O_sdrc_wrd_ack ); Может кто расскажет как это можно применить? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба 26 minutes ago, Worldmaster said: Может кто расскажет как это можно применить? первая ссылка из гугла по ключевым словам "gowin SDRAM controller example" не помогает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 28 июня, 2023 Опубликовано 28 июня, 2023 (изменено) · Жалоба В 28.06.2023 в 21:28, des00 сказал: первая ссылка из гугла по ключевым словам "gowin SDRAM controller example" не помогает? че сразу гугл то?? Скачал я с оффсайта доки .. почитал. Но казалось что если кто то работал может знает какие нибудь особенности. Может подводные камни или еще чего.. Ну и все примеры на verilog а мне надо на VHDL. Изменено 28 июня, 2023 пользователем Worldmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба Вот например создал по мануалу компонент VHDL. Добавил в код и получил вот такую ошибку. Цитата RROR (PA2024) : The number(108) of ports exceeds the resource limit 104 regular I/Os and 1 RECONFIG_N I/Os of current device, you can also use 4 JTAG, 5 SSPI, 4 MSPI, 1 READY and 1 DONE I/Os by configuring Dual-Purpose Pin as regular I/O Что я сделал не так? Вот код после генератора который сказано вставить в свой дизайн: component SDRAM port ( 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); I_sdrc_rst_n: in std_logic; I_sdrc_clk: in std_logic; I_sdram_clk: in std_logic; I_sdrc_selfrefresh: in std_logic; I_sdrc_power_down: in std_logic; I_sdrc_wr_n: in std_logic; I_sdrc_rd_n: in std_logic; I_sdrc_addr: in std_logic_vector(20 downto 0); I_sdrc_data_len: in std_logic_vector(7 downto 0); I_sdrc_dqm: in std_logic_vector(3 downto 0); I_sdrc_data: in std_logic_vector(31 downto 0); O_sdrc_data: out std_logic_vector(31 downto 0); O_sdrc_init_done: out std_logic; O_sdrc_busy_n: out std_logic; O_sdrc_rd_valid: out std_logic; O_sdrc_wrd_ack: out std_logic ); end component; your_instance_name: SDRAM port map ( O_sdram_clk => O_sdram_clk_o, O_sdram_cke => O_sdram_cke_o, O_sdram_cs_n => O_sdram_cs_n_o, O_sdram_cas_n => O_sdram_cas_n_o, O_sdram_ras_n => O_sdram_ras_n_o, O_sdram_wen_n => O_sdram_wen_n_o, O_sdram_dqm => O_sdram_dqm_o, O_sdram_addr => O_sdram_addr_o, O_sdram_ba => O_sdram_ba_o, IO_sdram_dq => IO_sdram_dq_io, I_sdrc_rst_n => I_sdrc_rst_n_i, I_sdrc_clk => I_sdrc_clk_i, I_sdram_clk => I_sdram_clk_i, I_sdrc_selfrefresh => I_sdrc_selfrefresh_i, I_sdrc_power_down => I_sdrc_power_down_i, I_sdrc_wr_n => I_sdrc_wr_n_i, I_sdrc_rd_n => I_sdrc_rd_n_i, I_sdrc_addr => I_sdrc_addr_i, I_sdrc_data_len => I_sdrc_data_len_i, I_sdrc_dqm => I_sdrc_dqm_i, I_sdrc_data => I_sdrc_data_i, O_sdrc_data => O_sdrc_data_o, O_sdrc_init_done => O_sdrc_init_done_o, O_sdrc_busy_n => O_sdrc_busy_n_o, O_sdrc_rd_valid => O_sdrc_rd_valid_o, O_sdrc_wrd_ack => O_sdrc_wrd_ack_o ); Также в архитектуре прописал свои сигналы для связи: -- сигналы для SDRAM signal O_sdram_clk_o: std_logic; signal O_sdram_cke_o: std_logic; signal O_sdram_cs_n_o: std_logic; signal O_sdram_cas_n_o: std_logic; signal O_sdram_ras_n_o: std_logic; signal O_sdram_wen_n_o: std_logic; signal O_sdram_dqm_o: std_logic_vector(3 downto 0); signal O_sdram_addr_o: std_logic_vector(10 downto 0); signal O_sdram_ba_o: std_logic_vector(1 downto 0); signal IO_sdram_dq_io: std_logic_vector(31 downto 0); signal I_sdrc_rst_n_i: std_logic; signal I_sdrc_clk_i: std_logic; signal I_sdram_clk_i: std_logic; signal I_sdrc_selfrefresh_i: std_logic; signal I_sdrc_power_down_i: std_logic; signal I_sdrc_wr_n_i: std_logic; signal I_sdrc_rd_n_i: std_logic; signal I_sdrc_addr_i: std_logic_vector(20 downto 0); signal I_sdrc_data_len_i: std_logic_vector(7 downto 0); signal I_sdrc_dqm_i: std_logic_vector(3 downto 0); signal I_sdrc_data_i: std_logic_vector(31 downto 0); signal O_sdrc_data_o: std_logic_vector(31 downto 0); signal O_sdrc_init_done_o: std_logic; signal O_sdrc_busy_n_o: std_logic; signal O_sdrc_rd_valid_o: std_logic; signal O_sdrc_wrd_ack_o: std_logic; Что ему надо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 9 hours ago, Worldmaster said: че сразу гугл то?? Скачал я с оффсайта доки .. почитал. Но казалось что если кто то работал может знает какие нибудь особенности. Может подводные камни или еще чего.. потому что ваш вопрос был "Может кто расскажет как это можно применить? ", а первый документ в гугле это Gowin SDRAM IP Core User Guide, в котором указано как это применяется, в каких режимах и почему 9 hours ago, Worldmaster said: Ну и все примеры на verilog а мне надо на VHDL. учить оба языка, как минимум на уровне чтения. 9 hours ago, Worldmaster said: Вот например создал по мануалу компонент VHDL. Добавил в код и получил вот такую ошибку. Ну, все правильно, он же вам пишет красным по белому: не хватает ног 9 hours ago, Worldmaster said: Что я сделал не так? Сгенерировали корку для внешней (external) памяти, для которой не хватает ног. А надо было, как вы сами же пишете "то у него есть на борту SDR SDRAM 32 bits 64M bits", корку для встроенной (embedded). Как это сделать указано в том самом UserGuide. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба В 29.06.2023 в 06:21, des00 сказал: Ну, все правильно, он же вам пишет красным по белому: не хватает ног Так а с какого перепуга ему не хватает если память встроенная?? В 29.06.2023 в 06:21, des00 сказал: Сгенерировали корку для внешней (external) памяти, для которой не хватает ног. А надо было, как вы сами же пишете "то у него есть на борту SDR SDRAM 32 bits 64M bits", корку для встроенной (embedded). Как это сделать указано в том самом UserGuide. Так вот я и хочу узнать пробовал ли кто нибудь следовать этому мануалу и получить рабочий вариант именно с embedded памятью? Футболить на даташиты то каждый может. При формировании "корки", как вы сказали я уж догадался что надо использовать вариант с пометкой embedded. Более того даже додумался чтобы найти в списке моделей ту которая у меня установлена. И язык выставил VHDL. И при добавлении файлов в проект он мне выдал эту ошибку. Так и более того он формирует код архитектуры top и перекрывает то что писал я. Такое ощущение что для работы встроенного модуля ему нужны внешние ноги. Так что вопрос в силе: Есть люди у которых получилось запустить этот модуль без использования внешних ног или что я делаю не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба Как минимум авторы, которые добавили в user quide отсылку к проекту из коробки https://www.gowinsemi.com/en/support/ip_detail/5/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба В 29.06.2023 в 08:38, des00 сказал: Как минимум авторы, которые добавили в user quide отсылку к проекту из коробки https://www.gowinsemi.com/en/support/ip_detail/5/ Да. Этот проект сам по себе работает и не требует такого количества портов. Проблема возникает при добавлении корки к своему проекту. Ну да и этот проект на verilog. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба Вот сделал чистый проект. Добавил Core для embedded SDRAM. В дополнение добавил два своих сигнала. Но при попытке привязать свои сигналы к выходам начались ошибки что данный выход уже занят. Ну как так может быть то?? Вот проект если вдруг у кого нибудь будет желание помочь по существу. SimpleTest.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 45 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 1. У Вас сигналы btn, led и led2 очень "удачно" назначены на RECONFIGn, READY и DONE. Так что или переназначьте эти сигналы на другие выводы, или разрешите в настройках проекта использование соответствующих dual purpose pins в качестве regular IO. 2. Синтезатор на этапе оптимизации выбрасывает Ваш модуль MySDRAM, т.к. считает, что хотя он в проекте и описан, но не используется. Так что внимательно посмотрите на свою обертку поверх компонента SDRAM - скорее всего, там все не слава богу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба В 29.06.2023 в 16:31, StewartLittle сказал: У Вас сигналы btn, led и led2 очень "удачно" назначены на RECONFIGn, READY и DONE. Так ведь модуль embedded же? У меня в реальной схеме же уже разведены некоторые сигналы на внешние линии. В 29.06.2023 в 16:31, StewartLittle сказал: разрешите в настройках проекта использование соответствующих dual purpose pins в качестве regular IO. А где это? И что это значит? В 29.06.2023 в 16:31, StewartLittle сказал: dual purpose pins в качестве regular IO. Нашел. Поставил галочки. Теперь скомпилилось. Спасибо. )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться