Цитата(RobFPGA @ Sep 29 2015, 03:46)

Приветствую!
Ой да что вы говорите! Не пугайте маленьких. Я еще на MAX7000 серии делал подобное и на статике и на просто DDR 100 MHz вполне себе рабочая была. У TC конечно память слегка неудобная для таких частот тут лучше синхронная статика подошла бы - придется помурыжится с таймингами чтобы вытянуть 100 MHz рабочей
Дерзайте!
Удачи! Rob.
Спасибо за поддержку!
Вот такая схема вырисовывается, остаётся реализовать конечный автомат.
8 разрядные данные гружу в регистр 16 бит и сигнал sby который теперь фактически сформировался и снизил частоту со 100 до 50Мгц.
Всем этим делом будет рулить конечный автомат, получать запросы на чтение и формировать подтверждение когда процесс записи деактивируется.
Ну как думаете, получится иль нет?
Текст счётчика адреса выглядит следующим образом:
CODE
module ADDR_counter(
input res,
input clk,
input wr,
input rd,
output full,
output empty,
output [ADDR-1:0] Addr_Sram
);
parameter ADDR = 5; // Параметр разрядности Адреса SRAM
//--- Счётчики адресов чтения и записи ------------------------------
assign Addr_Sram = (wr) ? write_addr[ADDR-1 : 0] : read_addr[ADDR-1 : 0];
reg [ADDR:0] read_addr=0;
always @(posedge clk or posedge res) //По такту чтения
begin
if(res)
begin
read_addr <= 0;
end
else
begin
if (rd) read_addr <= read_addr + 1'b1;
else read_addr <= read_addr;
end
end
//---
reg [ADDR:0] write_addr=0;
always @(posedge clk or posedge res) //По такту записи
begin
if(res)
begin
write_addr <= 0;
end
else
begin
if (wr) write_addr <= write_addr + 1'b1;
else write_addr <= write_addr;
end
end
//--- Абработка флагов заполненности ФИФО ------------------------------
assign full = ((write_addr[ADDR-1:0] == read_addr[ADDR-1:0]) && (write_addr[ADDR] ^ read_addr[ADDR]))? 1'b1 : 1'b0; //Фифо полное
assign empty = ((write_addr[ADDR-1:0] == read_addr[ADDR-1:0]) && (!(write_addr[ADDR] ^ read_addr[ADDR])))? 1'b1 : 1'b0; //Фифо пустое
endmodule
А вот схема
Прикрепленные файлы
fifo.pdf ( 388.81 килобайт )
Кол-во скачиваний: 39