Цитата(Golikov A. @ Sep 17 2015, 21:36)

то есть у вас все работает и проблем никаких нет, да?
наводящий вопрос
Как вы думаете регистр состоящий из Д триггеров, который может быть размещен в любом месте плис и ячейка памяти расположенная в блоке, с адресацией, имеют одинаковое время распространения сигнала от них до точки где данные захлопнуться?
Как вы думаете может такое получиться что вы выставите желаемый адрес по которому хотите считать данные так близко к моменту защелкивания данных, что не все сигналы успели дойти до регистра защелкивающего данные в другой части ПЛИС, к фронту клока управляющего этим регистром?
По первой части ответ очевиден - время распространения разное.
По второй части вопрос не доконца понял. Но отвечу так. Если частота выставления адреса чтения очень низкая, то проблем быть не должно. Наверное.
Цитата(iosifk @ Sep 17 2015, 22:16)

Вот две строки:
if rd'event and rd='1' then
bufDO(15 downto 0) <= Mem(conv_integer(Ard)); --вынимаем из памяти два отсчета данных
bufDO(31 downto 16) <= Mem(conv_integer(Ard+1));
Скажите, как происходит
Mem(conv_integer(Ard)); --вынимаем из памяти два отсчета данных
и Ard+1
Что там с латентностью? И насколько быстро произойдет "Ard+1" и потом Mem(conv_integer(Ard+1));
И все это за один фронт "rd'event and rd='1'" при том, что больше клоков то нет.... Только один этот фронт...
Т.е. это скорее всего счетчик, который идет на младшее слово. А с него же адрес идет на сумматор, и после сумматора на старшее??? Или это действительно две ячейки памяти и по выходу мультиплексор?
И если сравнивать с регистрами, то память медленнне раза в два....
Mem(conv_integer(Ard)); --вынимаем из памяти два отсчета данных
комментарий сразу к двум строкам относиться.
Что касается Ard+1, то у меня были по этому поводу сомнения. Взял да убрал чтения сразу двух отсчетов, теперь пишем в память 16 разрядов и читает из памяти 16 разрядов. Ну стало считываться в ПК в 2 раза медленнее ну и пофиг. НО общая проблема осталась.