реклама на сайте
подробности

 
 
> Чтение данных из CPU в FPGA, vhdl
%-)
сообщение Nov 23 2009, 06:08
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331



сигналы:
ce - выбор ПЛИС (активное 0)
we - запись в ПЛИС (активное 0)
d[7 downto 0] - данные которые надо записать в ПЛИС

как сделать простейшее чтение данных из шины процессора в ПЛИС на vhdl ?

наподобие как запись в SRAM
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BSV
сообщение Nov 24 2009, 01:11
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045



Делал интерфейс с Блэкфином на Спартан 3. Использовал синхронный вариант + ARDY. Максимально быструю времянку получить цели не было. Что там на плате было не знаю - ваял удаленно, платы в глаза не видел. Претензий от заказчика не было.

В коде из Вашего крайнего поста не совсем понятно, почему данные защелкиваются по спаду WE (или это инвертированный сигнал AWEn?). Также было бы нелишним занести (if CS='0') then в тело (if falling_edge(WE) then) тогда это будет разрешение записи в регистр, а у Вас в терминах ПЛИС это получается непонятно что (весь код не приведен).

Если асинхронно, я бы делал так
Код
process(AWEn)
begin
  if (AWEn'event and AWEn = '1') then
    if (CS='0' and A='0' and  D(15 downto 12) = "0101") then
      Y<=D(7 downto 0);
    end if;
    ...
  end if;
end process;

Только при желаемых времянках (Tsetup=1clk, Twrite=1 clk, Thold =0 clk) нужно учитывать ИМХО, что например задержки от пинов CS, A, D(15:12) до триггеров должны быть не более 7,5 + (7,5 - 6) + 0,8 ns. Табличка с параметрами:
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
Go to the top of the page
 
+Quote Post
%-)
сообщение Nov 24 2009, 02:37
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331



Цитата(BSV @ Nov 24 2009, 05:11) *
В коде из Вашего крайнего поста не совсем понятно, почему данные защелкиваются по спаду WE (или это инвертированный сигнал AWEn?). Также было бы нелишним занести (if CS='0') then в тело (if falling_edge(WE) then) тогда это будет разрешение записи в регистр, а у Вас в терминах ПЛИС это получается непонятно что (весь код не приведен).


WE - обычный сигнал стробирования (активный 0)
по фронту WE почему-то некорректно работает - скорее всего из-за того что данные уже недостоверны - нужно увеличивать Hold Time

Цитата(BSV @ Nov 24 2009, 05:11) *
Если асинхронно, я бы делал так
Код
process(AWEn)
begin
  if (AWEn'event and AWEn = '1') then
    if (CS='0' and A='0' and  D(15 downto 12) = "0101") then
      Y<=D(7 downto 0);
    end if;
    ...
  end if;
end process;


как быть если нужно опрашивать несколько регистров? номера регистров задаются в старших 4-х битах, остальные биты - содержимое

Цитата(BSV @ Nov 24 2009, 05:11) *
Только при желаемых времянках (Tsetup=1clk, Twrite=1 clk, Thold =0 clk) нужно учитывать ИМХО, что например задержки от пинов CS, A, D(15:12) до триггеров должны быть не более 7,5 + (7,5 - 6) + 0,8 ns. Табличка с параметрами:


а вот это очень горько sad.gif хотелось бы Tsetup=1clk @133MHz

ещё вопрос.
как быть если нужно с одними и теме же объектами работать по фроту, спаду и уровню? vhdl ругается - пишит что не может имплементировать регистры

вот полный процесс(откомментировал).

процесс должен подсчитывать байты и вычислять адрес видеопамяти. увеличение по Х и У. когда A=1
и записывать в регистры когда A=0:

Код
process(WE)
begin
if falling_edge(WE) then
  --Обработка регистров
  if (CS='0' and A='0' and D(15 downto 12)="0000") then
   R_D<=D(0);
  end if;
  if (CS='0' and A='0' and D(15 downto 12)="0001") then
   R_M<=D(1 downto 0);
  end if;
  if (CS='0' and A='0' and D(15 downto 12)="0010") then
   R_P<=D(0);
  end if;
  if (CS='0' and A='0' and D(15 downto 12)="0011") then
   R_X0<=D(8 downto 0);
   X<=D(8 downto 0);
  end if;
  if (CS='0' and A='0' and D(15 downto 12)="0100") then
   R_X1<=D(8 downto 0);
  end if;
  if (CS='0' and A='0' and D(15 downto 12)="0101") then
   R_Y0<=D(7 downto 0);
   Y<=D(7 downto 0);
  end if;
  if (CS='0' and A='0' and D(15 downto 12)="0110") then
   R_Y1<=D(7 downto 0);
  end if;
  if (CS='0' and A='0' and D(15 downto 12)="0111") then
   R_C<=D(7 downto 0);
  end if;
  if (CS='0' and A='0' and D(15)='1') then
   R_RGB(conv_integer(R_C))<=D(14 downto 0);
  end if;
  --Вычисление адреса в видеопамяти WriteAddress=320*y+x
  if (CS='0' and A='1') then
   WriteAddress<=("101000000"*Y)+X; --вычисление адреса из старых координат
   if X=R_X1 then --новые координаты - X и Y увеличиваются, для следующего адреса
    X<=R_X0;
    if Y=R_Y1 then
     Y<=R_Y0;
    else
     Y<=Y+1;
    end if;
   else
    X<=X+1;
   end if;
  end if;
end if;
end process;


смысл этого процесса в установке прямоугольной области (R_X0,R_Y0,R_X1,R_Y1) на дисплее для того чтобы потом слева-направа сверху-вниз записывать данные

прошу покритиковать или дополнить

Сообщение отредактировал %-) - Nov 24 2009, 02:41
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- %-)   Чтение данных из CPU в FPGA   Nov 23 2009, 06:08
- - SFx   а почему шина адреса не используется? все подряд д...   Nov 23 2009, 06:22
|- - %-)   Цитата(SFx @ Nov 23 2009, 10:22) а почему...   Nov 23 2009, 06:57
|- - SM   Цитата(%-) @ Nov 23 2009, 09:57)...   Nov 23 2009, 07:04
|- - %-)   Цитата(SM @ Nov 23 2009, 10:04) Так расск...   Nov 23 2009, 07:17
|- - Dima_G   Цитата(%-) @ Nov 23 2009, 11:17)...   Nov 23 2009, 07:20
- - SM   вот на верилоге. на вхдл сами переводите если очен...   Nov 23 2009, 06:39
- - SM   Вы сначала определитесь, что эти данные с выхода р...   Nov 23 2009, 07:20
- - dvladim   Цитата(%-) @ Nov 23 2009, 11:17)...   Nov 23 2009, 08:34
- - %-)   диаграммы ниже. отвечаю на вопросы от SM данные ...   Nov 23 2009, 08:37
- - SM   Тогда, наверное, надо работать по CLKOUT (если ПЛИ...   Nov 23 2009, 08:52
- - dvladim   Цитата(%-) @ Nov 23 2009, 12:37)...   Nov 23 2009, 09:03
- - Shivers   Смотря какие тайминги, и смотря как скорость ПЛИС....   Nov 23 2009, 09:46
|- - des00   Цитата(Shivers @ Nov 23 2009, 03:46) Смот...   Nov 23 2009, 10:43
|- - Shivers   Цитата(des00 @ Nov 23 2009, 13:43) при ра...   Nov 23 2009, 12:40
|- - des00   Цитата(Shivers @ Nov 23 2009, 06:40) Это ...   Nov 23 2009, 14:27
|- - Shivers   Цитата(des00 @ Nov 23 2009, 17:27) Вы одн...   Nov 23 2009, 14:49
- - SM   Ну вы бы асики-то не приплетали... Там все на так,...   Nov 23 2009, 14:55
|- - Shivers   Цитата(SM @ Nov 23 2009, 17:55) Ну вы бы ...   Nov 23 2009, 15:04
|- - SM   Цитата(Shivers @ Nov 23 2009, 18:04) Если...   Nov 23 2009, 15:06
- - dvladim   Цитата(Shivers @ Nov 23 2009, 16:40) Это ...   Nov 23 2009, 20:45
- - %-)   вот часть дизайна, которая перехватывает обращение...   Nov 23 2009, 23:13
|- - des00   Цитата(%-) @ Nov 23 2009, 20:37)...   Nov 24 2009, 04:19
- - SM   Еще констрейны покажите. Исходника мало.   Nov 24 2009, 05:55
|- - %-)   Цитата(SM @ Nov 24 2009, 08:55) Еще конст...   Nov 24 2009, 06:44
|- - SM   Цитата(%-) @ Nov 24 2009, 09:44)...   Nov 24 2009, 07:13
- - SFx   констрейны - это ограничения, которые требуется вы...   Nov 24 2009, 07:18
|- - %-)   Цитата(SFx @ Nov 24 2009, 10:18) констрей...   Nov 24 2009, 07:22
|- - SM   Цитата(%-) @ Nov 24 2009, 10:22)...   Nov 24 2009, 07:25
|- - %-)   Цитата(SM @ Nov 24 2009, 11:25) Создаете ...   Nov 24 2009, 08:22
|- - SM   Цитата(%-) @ Nov 24 2009, 11:22)...   Nov 24 2009, 08:24
|- - %-)   Цитата(SM @ Nov 24 2009, 12:24) А дальше ...   Nov 25 2009, 05:46
- - dvladim   Цитата(%-) @ Nov 24 2009, 06:37)...   Nov 24 2009, 19:17
- - %-)   проблема почти полностью решена с помощью буфера м...   Nov 25 2009, 03:15
- - SM   для WE - если он заведен как тактовый сигнал creat...   Nov 25 2009, 11:22


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016