2013-05-02 6 views
1

У меня проблема с назначением vhdl. Мне нужно создать буфер FIFO между шиной 500 МГц и другой шиной 30 МГц.FIFO с 2 часами в VHDL

Я разработал базовый FIFO буфер

inputs: Data_in, Write_EN, CLK_500, Read_EN, CLK_30, FlushFIFO.

outputs: Data_out, FULL, EMPTY.

Этот буфер был разработан с использованием 2D-массив:

type fifo_arr is array (0 to 63) of std_logic_vector(39 downto 0); 
signal FIFO : fifo_arr := (others => (others => '0')); 

Проблема заключается в следующем: Как я должен писать процессы и поддерживать указатель между ними для синхронизации? С методом, который я пробовал, код не будет синтезироваться (ERROR: XST: 827 Сигнал ptr не может быть синтезирован)

Любые идеи?

спасибо и привет

ответ

5

Это может быть идея, чтобы показать нам код, который на самом деле жаловался!

FIFOs через часы доменов хитры, чтобы не пытались слегка ...

Сказав, что - как это выглядит как домашнее задание, хорошо читать, можно найти здесь:

http://eda.ee.nctu.edu.tw/jdhuang/courses/ipcd04/paper/alfke_final.pdf

(один из авторов поздно, большой, Питер Alfke - он разработал первый чип FIFO, в 1969 году, и широко рассматривается как или даже , FIFO-гуру)

2

Возможно, вы можете посмотреть в эти ядра FIFO, которые доступны в опциях, в частности, с двойной версией fifo. Это даст вам четкое представление о синхронизации указателей

http://opencores.org/project,generic_fifos

1

Я думаю, вам нужно будет указатель чтения и записи указателей, которые являются как по модулю 64, так что ФИФО в основном кольцевой буфер. Используйте серое кодирование для адресации, поскольку серые кодированные числа изменяют только 1 бит между смежными значениями. Это можно использовать для проверки ошибок. Чтение указателя находится на домене чтения, указатель записи находится на домене записи. Возможно, перекрестите каждый указатель на противоположный домен для полных и пустых проверок?

Смежные вопросы