Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Avalon Master + SDRAM controller
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Alex-IFMO
Добрый день.

Имеется в наличии борда от терасика 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
Цитата(Alex-IFMO @ May 1 2012, 14:16) *
Добавляю SDRAM controller с параметрами:


Вы специально поставили Bank = 2? У меня на DE2-115 этот параметр равен 4 и как следствие доступной памяти побольше 128)

По поводу "заставить работать" terasic предлагает демо примеры для изучения, и на них всё прекрасно работает и крутится, не пробовали изучать?

По поводу моделирования, може быть поставить галочку в настройках SDRAM "генерировать функциональную модель для тестбенча"?
Alex-IFMO
Цитата(Orochi @ May 1 2012, 14:35) *
Вы специально поставили Bank = 2? У меня на DE2-115 этот параметр равен 4 и как следствие доступной памяти побольше 128)


Насколько я понял из даташита на SDRAM, для данной памяти Bank = 2 (System Builder от терасика тоже генерирует для SDRAM 2 банка).
Цитата
По поводу "заставить работать" terasic предлагает демо примеры для изучения, и на них всё прекрасно работает и крутится, не пробовали изучать?


Пробовал, изучал, получалось. Проблема в том, что во всех примерах в качестве мастера используется NIOS. Мне хочется обойтись без него.

Цитата
По поводу моделирования, може быть поставить галочку в настройках SDRAM "генерировать функциональную модель для тестбенча"?


Пробовал, никакого толку не дает. До этого моделировал систему из своего мастера + PIO - все прекрасно работало.
Orochi
по поводу объёма памяти: в документации на плату заявлено 128МБ и в даташите 4 банка( по крайней мере у меня).

На счёт записи в память напрямую, сам никогда не прбовал, небыло пока нужды, но может быть выложите исходники, или хотя бы кусок кода которым Вы пишите/читаете из памяти, и возможно так Вам помогут быстрее.
Alex-IFMO
Собственное ничего сложного нет. Две пары свитчей для чтения и записи разных данных с разных адресов.

CODE

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 появляется значение, хотя происходит операция записи.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.