Всем привет!
подскажите как можно красивее сделать...
есть поток данных по lvds, заворачиваю его на dcfifo по 32 бита, передаю на комп по 16 бит, фронт на чтение подаю раз в два фронта на клоке на записи и через модуль заворачиваю на ftdi
разрешаю чтение по двум битам c ftdi ~TXEn и ~rdempty
WRn флаг вешаю по ~rdempty и передаю первые 16 бит и вторые
получается что в буфере появляется 32 бита и они сразу же улетают в ftdi
куски кода:
****
always @(posedge i_ft600_clk)
begin
rdclk <= ~rdclk;
end
data_fifo fifo_inst(
.data( r_input_data ),
.wrreq( 1'b1 ),
.wrfull( w_wrfull ),
.wrusedw( w_wrusedw ),
.wrclk( i_frame_clk ),
.rdclk( rdclk ),
.rdreq( ~i_ft600_txe_n && ~w_rdempty ),
.q( o_data ),
.rdfull( w_rdfull ),
.rdempty( w_rdempty ),
.rdusedw( w_rdusedw )
);
****
always @(posedge i_ft600_clk) begin
if( ~w_rdempty ) begin
if( ~first_byte )
o_data <= i_data[15:0];
else
o_data <= i_data[31:16];
first_byte <= ~first_byte;
o_be <= 2'b11;
o_wr_n <= 1'b0;
end else begin
o_data <= 16'h0000;
o_wr_n <= 1'b1;
end
end
в данных есть начало посылки имеет уникальный ключ DC 0A DC 0A DA 0C DA 0C 64 бита
возможно ли сделать так чтобы буфер накапливал целиком посылку с ключа и потом отправлял ее на ftdi?
и вопрос со * можно ли используя тот же 32х битный fifo переставлять куски 64х битной посылки (DC 0A DA 0C DC 0A DA 0C)?
использую MAX10 памяти впритык хватает на буфер 32 х 8к, 64 х 8к уже не поместится, а посылка имеет размер 13Кб, по lvds подается на много медленнее чем usb порт успевает забрать
или может быть пора прикручивать память и делать что то типа фрейм буфера? есть примеры для MAX10 у кого нибудь на verilog?