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

 
 
> SOPC модуль - чтение из sdram, что-то я застопорился
RHnd
сообщение Nov 30 2007, 16:18
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Учу свой переферийный модуль побайтово читать данные из памяти. Задача, вроде, тривиальная, однако где-то я застопорился.
Итак, код выглядит примерно так:
Код
assign master_write=1'b0;
assign master_writedata=32'd0;
assign master_byteenable=4'b1111;

always @(posedge clk) begin
    if (State==FirstState) begin//установка запроса
           master_address<=Addr;
           master_read<=1'b1;
           State<=SecondState;
    end
    else begin //ожидание снятия waitrequest и чтение данных
           if (!master_waitrequest) begin
               master_read<=0;
               Data<=master_readdata[7:0];
               Addr<=Addr+32'd1;
               State<=FirstState;
           end
    end
end


Смотрел сигналтабом, что выставляется на шинах - вроде, все правильно. Выставился адрес, выставился запрос на чтение. Выставился waitrequest. По сбросу waitrequest сбросился и запрос чтения. Но вот данные, выставленные на master_readdata, меня расстраивают. Первый байт читается правильно, а далее читается какой-то совершенно другой байт (каждый раз один и тот же), причем этого второго (как и последующих) байта в памяти по данному адресу и рядом нет (проверял дебагером ниоса). Компонент в сопсе создан, вроде, без ошибок. Адреса, выставляемые по версии сигнал таба, совпадают с адресами из дебагера ниоса. Кеша данных в системе нет, да и все равно первый байт читается верно.
Подскажите, где может быть загвоздка. help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vetal
сообщение Nov 30 2007, 19:13
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Цитата
Бррр... Но это же к сишному коду относится, разве нет? Если я в модуль как значение Address вместо (alt_u32*)Pointer передам (alt_u8*)Pointer, то разве модулю не один фик?

Как раз относится. Главное как выделить, а передавать можно любым поинтером.
К примеру у адреса int младшие 2 бита должны быть "00". Если вы с этим интом будете работать через char*, то байты 0-3 будут на своем месте в соответствии в byteenable. А если выделять char без выравнивания, то будет смещение от раза к разу разное и вам придется пересчитывать в железе адреса слов и byteenable чтобы выковырять нужный байт.
Цитата
Минимальный размер - шина SDRAM, 32 бита.

Еще надо учитывать byteenable. Проще провести эксперимент и удостовериться.

Не понимаю вашего рвения читать именно 1 байт, и боязнь 4 сразу - по скорости они будут читаться одинаково!
Go to the top of the page
 
+Quote Post
RHnd
сообщение Nov 30 2007, 19:30
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Цитата(vetal @ Nov 30 2007, 22:13) *
Как раз относится. Главное как выделить, а передавать можно любым поинтером.
К примеру у адреса int младшие 2 бита должны быть "00". Если вы с этим интом будете работать через char*, то байты 0-3 будут на своем месте в соответствии в byteenable. А если выделять char без выравнивания, то будет смещение от раза к разу разное и вам придется пересчитывать в железе адреса слов и byteenable чтобы выковырять нужный байт.

Хм. В том примере, который я приводил, адрес передается выровненый, последние два бита 0. Однако, не помогло. Или же я чего-то не понимаю. Надо будет в понедельник проверить, что будет читаться при Adr+=4.

Цитата(vetal @ Nov 30 2007, 22:13) *
Не понимаю вашего рвения читать именно 1 байт, и боязнь 4 сразу - по скорости они будут читаться одинаково!

Да, честно говоря, лень дополнительный автомат распределения 4 байт по одному писать. smile.gif Хотя, думаю, так и сделаю.

PS: А точно проблема именно в адресации? Других вариантов нет?
Go to the top of the page
 
+Quote Post



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

 


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


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