Цитата(torik @ Mar 19 2008, 12:41)

Например что-то типа этого?
Код
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
...
Я себе все примерно так и представлял. Вот скомпилировал ваш пример (изменил только условие в always, той где адрес инкрементируется, на posedge sdram_clk100). Результаты симуляции в файле test, что-то они совсем не похожи на требования работы мастера шины (в файле avalon). В режиме когда данные пишутся все время пока буфер не пуст(времена после 940 ns в test), частота работы памяти ограничивается скоростью записи в буфер (в данном случае 25 МГц), тут все вроде как надо. Я же хочу накапливать в фифо пакет 256х32, дождаться освобождения шины, занять ее и передать весь пакет и не обращаться к памяти пока не накопится следующий пакет.
Мне уже посоветовали радикальный метод: написать свой контроллер памяти, но хотелось бы обойтись готовым.