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

 
 
> 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, 16:36
Сообщение #2


Гуру
******

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



Цитата
Первый байт читается правильно, а далее читается какой-то совершенно другой байт (каждый раз один и тот же), причем этого второго (как и последующих) байта в памяти по данному адресу и рядом нет (проверял дебагером ниоса).

Для какого адреса вы пытаетесь читать? Для нормальной работы адрес должен быть кратен 4 байтам. Чтобы выровнять нужный массив используйте аттрибут __aligned__(4). В противном случае вам необходимо пересчитывать адрес для получения доступа нужному байту, т.к. byteenable работает внутри слова по нужному адресу.
Go to the top of the page
 
+Quote Post
RHnd
сообщение Nov 30 2007, 18:00
Сообщение #3


Знающий
****

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



Цитата(vetal @ Nov 30 2007, 19:36) *
Для какого адреса вы пытаетесь читать? Для нормальной работы адрес должен быть кратен 4 байтам. Чтобы выровнять нужный массив используйте аттрибут __aligned__(4).

Не совсем понял, аттрибут __aligned__(4) относится к чему, где именно его использовать? Не получится ли так, что каждый байт информации будет занимать 4 байта памяти?
Цитата(vetal @ Nov 30 2007, 19:36) *
В противном случае вам необходимо пересчитывать адрес для получения доступа нужному байту, т.к. byteenable работает внутри слова по нужному адресу.

Если не затруднит, то можно подробнее, как именно пересчитывать адрес для получения доступа к нужному байту и как это связано с byteenable?

Цитата(Postoroniy_V @ Nov 30 2007, 20:38) *
2)считывать в своём модуле данные всё такие побайтно biggrin.gif а не "по 4 байтно" biggrin.gif
ибо по исходнику видно что шину внутрь завели 32-х разрядную.
тоесть второй варинт такой:
- либо автомат сделать который будет считывать по 4 байта и адрес+=4 а не +=1, и уже потом 4 байта раскидывать как нужно

Да, есть такой вариант. Но не хочется, т.к. количество байт может быть не кратно 4. Хотя, это не особо мешает, но не хочется.
Цитата(Postoroniy_V @ Nov 30 2007, 20:38) *
- либо сразу считывать по 8 бит, тоесть шина данных должна быть 8 битсо всеми вытекающими wink.gif

А как? Мне казалось, что по спецификации шина данных всегда 32 бита. Т.е. можно объявить master_readdata 8-ми битной и все заработает?
Цитата(Postoroniy_V @ Nov 30 2007, 20:38) *
з.ы. автомат в исходное состояние не плохо бы привести сбросом

Не, ну это понятно. smile.gif Тут было опущено для краткости. Там и сам автомат посложнее. smile.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 18:26
Рейтинг@Mail.ru


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