Alex-IFMO 0 1 мая, 2012 Опубликовано 1 мая, 2012 · Жалоба Добрый день. Имеется в наличии борда от терасика DE2-115 (http://www.terasic.com.tw/cgi-bin/page/archive.pl?No=502). Пытаюсь на ней поднять SDRAM через SOPC. Для этого создаю в SOPC новый мастер компонент в таком виде: Добавляю SDRAM controller с параметрами: Получаю в SOPC такую систему: Генерирую без проблем и подключаю ее в основном модуле. Далее описал небольшое взаимодействие между SWITCH, LED и SDRAM. А именно, по действию первого свитча записать в SDRAM на заданный адрес определенное значение, по действию второго свитча считать это значение и вывести на LED. В результате получается не совсем то, что я ожидал. По действию первого свитча происходит и запись, и считывание. И я никак не могу разобраться в чем проблема. Пробовал промоделировать систему в моделсиме, но в ней не получается добиться хоть какой-нибудь реакции на выходы SDRAM от авалоноского мастера. Как правильно собирать и моделировать системы с авалоновским мастером? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Orochi 0 1 мая, 2012 Опубликовано 1 мая, 2012 (изменено) · Жалоба Добавляю SDRAM controller с параметрами: Вы специально поставили Bank = 2? У меня на DE2-115 этот параметр равен 4 и как следствие доступной памяти побольше 128) По поводу "заставить работать" terasic предлагает демо примеры для изучения, и на них всё прекрасно работает и крутится, не пробовали изучать? По поводу моделирования, може быть поставить галочку в настройках SDRAM "генерировать функциональную модель для тестбенча"? Изменено 1 мая, 2012 пользователем Orochi Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex-IFMO 0 1 мая, 2012 Опубликовано 1 мая, 2012 · Жалоба Вы специально поставили Bank = 2? У меня на DE2-115 этот параметр равен 4 и как следствие доступной памяти побольше 128) Насколько я понял из даташита на SDRAM, для данной памяти Bank = 2 (System Builder от терасика тоже генерирует для SDRAM 2 банка). По поводу "заставить работать" terasic предлагает демо примеры для изучения, и на них всё прекрасно работает и крутится, не пробовали изучать? Пробовал, изучал, получалось. Проблема в том, что во всех примерах в качестве мастера используется NIOS. Мне хочется обойтись без него. По поводу моделирования, може быть поставить галочку в настройках SDRAM "генерировать функциональную модель для тестбенча"? Пробовал, никакого толку не дает. До этого моделировал систему из своего мастера + PIO - все прекрасно работало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Orochi 0 1 мая, 2012 Опубликовано 1 мая, 2012 · Жалоба по поводу объёма памяти: в документации на плату заявлено 128МБ и в даташите 4 банка( по крайней мере у меня). На счёт записи в память напрямую, сам никогда не прбовал, небыло пока нужды, но может быть выложите исходники, или хотя бы кусок кода которым Вы пишите/читаете из памяти, и возможно так Вам помогут быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex-IFMO 0 2 мая, 2012 Опубликовано 2 мая, 2012 · Жалоба Собственное ничего сложного нет. Две пары свитчей для чтения и записи разных данных с разных адресов. reg [31:0] av_address; reg [31:0] av_wr_data; reg av_write; reg av_read; reg av_wait_req; assign DRAM_CLK = CLOCK_50; //======================================================= // Structural coding //======================================================= my_sdram ( // 1) global signals: .clk_0(CLOCK_50), .clk_0_reset(), .reset_n(KEY[0]), // the_my_master_0_avalon_master .address_from_the_my_master_0(av_address), .rd_data_to_the_my_master_0(LEDG), .rd_data_valid_to_the_my_master_0(), .read_from_the_my_master_0(av_read), .wait_req_to_the_my_master_0(av_wait_req), .wr_data_from_the_my_master_0(av_wr_data), .write_from_the_my_master_0(av_write), // the_sdram_0 .zs_addr_from_the_sdram_0(DRAM_ADDR), .zs_ba_from_the_sdram_0(DRAM_BA), .zs_cas_n_from_the_sdram_0(DRAM_CAS_N), .zs_cke_from_the_sdram_0(DRAM_CKE), .zs_cs_n_from_the_sdram_0(DRAM_CS_N), .zs_dq_to_and_from_the_sdram_0(DRAM_DQ), .zs_dqm_from_the_sdram_0(DRAM_DQM), .zs_ras_n_from_the_sdram_0(DRAM_RAS_N), .zs_we_n_from_the_sdram_0(DRAM_WE_N) ) ; //////////////////////////// always @(posedge CLOCK_50)begin if(SW[0]) begin av_address = 32'd115; av_wr_data = 32'd15; av_write = 1'b1; av_read = 1'b0; end if(SW[1]) begin av_address = 32'd215; av_wr_data = 32'd240; av_write = 1'b1; av_read = 1'b0; end if(SW[5]) begin av_address = 32'd115; av_write = 1'b0; av_read = 1'b1; end if(SW[6]) begin av_address = 32'd215; av_write = 1'b0; av_read = 1'b1; end end Вот, что получается на выходе по действию SW[0]: На rd_data появляется значение, хотя происходит операция записи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться