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

 
 
> FIFO и SDRAM контроллер, Как заставить работать вместе на 80-100 МГц?
studert
сообщение Mar 19 2008, 06:07
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 6-03-05
Из: Новосибирск
Пользователь №: 3 121



Привет. Есть фифо буфер входных данных, есть альтеровский СДРАМ контроллер. Необходимо по мере заполнения первого сливать данные во внешнюю память, поскольку сдрам делят еще 2 модуля, то необходимо работать на частотах 80-100 МГц. СДРАМ контроллер в произвольный момент времени может выставить сигнал waitrequest, я так понял из описания шины авалон при получении этого сигнала нужно удерживать неизменными адрес данные и управляющие сигналы. Задержка с отправки запроса на чтение до получения данных около 27 нсек, значит первые 2 такта будут записаны не те данные, а при установке waitrequest данные еще дважды изменятся. Как можно решить эти расхождения? В описании шины avalon ничего подходящего не нашел, там только pipeline чтение. Была мысль поставить промежуточный регистровый буфер, но что-то пока не получилось, да и кажется это некрасивым решением, интересно узнать как вообще решаются такие задачи.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
torik
сообщение Mar 19 2008, 06:41
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Например что-то типа этого?

Код
vfifo256x16 vfifo            (    .aclr(~CLR),
                            .data(Data16),
                            .rdclk(sdram_clk100),.rdreq(fifo_rdreq),
                            .wrclk(CLK25),.wrreq(WRITE_fifo),
                            .q(fifo_q),
                            .rdempty(fifo_rdempty)
                        );

assign            fifo_rdreq = (~fifo_rdempty) & (~waitrequest0);
always    @(posedge sdram_clk100) begin
    if (fifo_rdempty == 1'b0) begin
        write_n0 <= 1'b0;
    end else begin
        if ((waitrequest0 == 1'b0)) write_n0 <= 1'b1;
    end
end

always    @(sdram_clk100) begin
    address_0 <= (CLR == 1'b1) ?
        (((write_n0 == 1'b0)&&(waitrequest0 == 1'b0)) ? address_0 + 2'd2 : address_0 + 2'd0) :                 start_adr0;
end
wire            [23:0]    start_adr2 = 24'h0;


write_n0 - сигнал записи для SDRAM
address_0 - адрем
fifo_q - подключить к данным памяти
read_n0 - не забыть подключить к 1

Вобщем идея состоит в том, что сигнал записи генерируется из сигнала непустости) фифо и waitrequest
...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post



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

 


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


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