реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Avalon Master + SDRAM controller, Подключение и моделирование SDRAM контроллера
Alex-IFMO
сообщение May 1 2012, 10:16
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 27-04-12
Пользователь №: 71 600



Добрый день.

Имеется в наличии борда от терасика 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 от авалоноского мастера.
Как правильно собирать и моделировать системы с авалоновским мастером?
Спасибо.
Go to the top of the page
 
+Quote Post
Orochi
сообщение May 1 2012, 10:35
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 6-07-11
Из: Кострома
Пользователь №: 66 096



Цитата(Alex-IFMO @ May 1 2012, 14:16) *
Добавляю SDRAM controller с параметрами:


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

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

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

Сообщение отредактировал Orochi - May 1 2012, 10:36
Go to the top of the page
 
+Quote Post
Alex-IFMO
сообщение May 1 2012, 11:42
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 27-04-12
Пользователь №: 71 600



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


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


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

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


Пробовал, никакого толку не дает. До этого моделировал систему из своего мастера + PIO - все прекрасно работало.
Go to the top of the page
 
+Quote Post
Orochi
сообщение May 1 2012, 12:25
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 6-07-11
Из: Кострома
Пользователь №: 66 096



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

На счёт записи в память напрямую, сам никогда не прбовал, небыло пока нужды, но может быть выложите исходники, или хотя бы кусок кода которым Вы пишите/читаете из памяти, и возможно так Вам помогут быстрее.
Go to the top of the page
 
+Quote Post
Alex-IFMO
сообщение May 2 2012, 07:58
Сообщение #5





Группа: Новичок
Сообщений: 6
Регистрация: 27-04-12
Пользователь №: 71 600



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

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 появляется значение, хотя происходит операция записи.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 21:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016