Перейти к содержанию
    

Avalon Master + SDRAM controller

Добрый день.

 

Имеется в наличии борда от терасика DE2-115 (http://www.terasic.com.tw/cgi-bin/page/archive.pl?No=502).

Пытаюсь на ней поднять SDRAM через SOPC. Для этого создаю в SOPC новый мастер компонент в таком виде:

78577762.jpg

 

 

Добавляю SDRAM controller с параметрами:

74011796.jpg

 

 

Получаю в SOPC такую систему:

83308248.jpg

 

 

Генерирую без проблем и подключаю ее в основном модуле. Далее описал небольшое взаимодействие между SWITCH, LED и SDRAM. А именно, по действию первого свитча записать в SDRAM на заданный адрес определенное значение, по действию второго свитча считать это значение и вывести на LED.

В результате получается не совсем то, что я ожидал. По действию первого свитча происходит и запись, и считывание. И я никак не могу разобраться в чем проблема.

Пробовал промоделировать систему в моделсиме, но в ней не получается добиться хоть какой-нибудь реакции на выходы SDRAM от авалоноского мастера.

Как правильно собирать и моделировать системы с авалоновским мастером?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавляю SDRAM controller с параметрами:

74011796.jpg

 

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

 

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

 

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

Изменено пользователем Orochi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Насколько я понял из даташита на SDRAM, для данной памяти Bank = 2 (System Builder от терасика тоже генерирует для SDRAM 2 банка).

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

 

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

 

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

 

Пробовал, никакого толку не дает. До этого моделировал систему из своего мастера + PIO - все прекрасно работало.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по поводу объёма памяти: в документации на плату заявлено 128МБ и в даташите 4 банка( по крайней мере у меня).

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собственное ничего сложного нет. Две пары свитчей для чтения и записи разных данных с разных адресов.

 

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]:

 

stp1z.jpg

 

На rd_data появляется значение, хотя происходит операция записи.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...