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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Чтение данных из 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
SFx
сообщение Nov 23 2009, 06:22
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



а почему шина адреса не используется? все подряд данные собираетесь в плис гнать?
конструкцию модуля определяет не только входной, но и выходной интерфейс.
выходной интерфейс каким планируете ?
какое количество данных будете записывать в плис? как будете эти данные систематизировать?
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 23 2009, 06:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



вот на верилоге. на вхдл сами переводите если очень надо, не люблю монстров. Только тут еще сигнал OE есть, который, наверное, вы забыли.

Код
module simple_reg (d, nce, noe, nwe);
  inout [7:0] d;
  input nce, nwe, noe;

  reg [7:0] rg;

  // latch data from bus by nwe low
  always @*
    if (!nce & !nwe) rg <=  d;

  // read to bus while nce & noe low
  assign d = (nce | noe) ? 8'hzz : rg;

endmodule
Go to the top of the page
 
+Quote Post
%-)
сообщение Nov 23 2009, 06:57
Сообщение #4


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

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



Цитата(SFx @ Nov 23 2009, 10:22) *
а почему шина адреса не используется? все подряд данные собираетесь в плис гнать?


да.

Цитата(SFx @ Nov 23 2009, 10:22) *
конструкцию модуля определяет не только входной, но и выходной интерфейс.
выходной интерфейс каким планируете ?


только запись в ПЛИС.

Цитата(SFx @ Nov 23 2009, 10:22) *
какое количество данных будете записывать в плис? как будете эти данные систематизировать?


нужно передавать байты данных в ПЛИС. один за другим.
ассертить cs в 0 на время всей передачи запрещается - щёлкать 1-0-1 для каждого байта.


Цитата(SM @ Nov 23 2009, 10:39) *
вот на верилоге. на вхдл сами переводите если очень надо, не люблю монстров. Только тут еще сигнал OE есть, который, наверное, вы забыли.

Код
module simple_reg (d, nce, noe, nwe);
  inout [7:0] d;
  input nce, nwe, noe;

  reg [7:0] rg;

  // latch data from bus by nwe low
  always @*
    if (!nce & !nwe) rg <=  d;

  // read to bus while nce & noe low
  assign d = (nce | noe) ? 8'hzz : rg;

endmodule


Перевёл:
Код
process
begin
if ce='0' and we='0' then
  rg<=d;
end if;
end process;

d<=(others => 'Z') when ce=1 or oe=1 else rg;


праильно?

что-то совсем всё просто получается... слыхал что по фронту нужно фиксировать данные, а не по уровню. кому верить?
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 23 2009, 07:04
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(%-) @ Nov 23 2009, 09:57) *
слыхал что по фронту нужно фиксировать данные, а не по уровню. кому верить?


Так расскажите побольше. Может и по фронту нужно у вас. Вы же сказали, "как в SRAM", я подразумевал, что как в асинхронную SRAM. А если по фронту, то еще и тайминги все рассказывайте. А может у вас там еще и к клоку надо все привести. В общем - телепаты в отпуске, каков вопрос, таков ответ.
Go to the top of the page
 
+Quote Post
%-)
сообщение Nov 23 2009, 07:17
Сообщение #6


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

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



Цитата(SM @ Nov 23 2009, 10:04) *
Так расскажите побольше. Может и по фронту нужно у вас. Вы же сказали, "как в SRAM", я подразумевал, что как в асинхронную SRAM. А если по фронту, то еще и тайминги все рассказывайте. А может у вас там еще и к клоку надо все привести. В общем - телепаты в отпуске, каков вопрос, таков ответ.


зря обижаетесь. вашим ответом доволен. просто я сам не знаю какой тайминг подойдет лучше.

Скажу лучше процессор. ADSP BF533. Именно он будет слать данные. Через асинхронный банк

Setup=1 такт, we=1 такт , hold =0 тактов. Частота clk=133.3333 МГц

Не понятно по каким признакам вести запись(фронты или уровни?) sad.gif

Сообщение отредактировал %-) - Nov 23 2009, 07:19
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 23 2009, 07:20
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(%-) @ Nov 23 2009, 11:17) *
зря обижаетесь. вашим ответом доволен. просто я сам не знаю какой тайминг подойдет лучше.

Скажу лучше процессор. ADSP BF533. Именно он будет слать данные. Через асинхронный банк

Setup=1 такт, we=1 такт , hold =0 тактов. Частота clk=133.3333 МГц

Не понятно по каким признакам вести запись sad.gif


Лучше привести внешние сигналы к глобальному клоку ФПГА + добавить цепочку триггеров для подавления метастабильности
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 23 2009, 07:20
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Вы сначала определитесь, что эти данные с выхода регистра делать будут. Если зажигать светодиоды - это одно, защелка оптимальна будет. А если например поступать в FIFO, или еще куда на дальнейшую обработку, то это второй вопрос. Если на обработку - тогда рассказывайте в чем ее суть, какой длительности импульс we, какой клок в обработчике, привязан ли он к клоку DSP, если привязан, то с какими сетапами-холдами по каким сигналам. У меня нет документации на BF, и мне влом ее качать, чтобы смотреть все это самому.
Go to the top of the page
 
+Quote Post
dvladim
сообщение Nov 23 2009, 08:34
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



Цитата(%-) @ Nov 23 2009, 11:17) *
Скажу лучше процессор. ADSP BF533. Именно он будет слать данные. Через асинхронный банк
Setup=1 такт, we=1 такт , hold =0 тактов. Частота clk=133.3333 МГц
Не понятно по каким признакам вести запись(фронты или уровни?) sad.gif

Лучще вейвформу приведите.
А то можно и по фронту написать, но подойдет-ли?
Код
always @(negedge we)
  if (!cs)
    rg <= d;
Go to the top of the page
 
+Quote Post
%-)
сообщение Nov 23 2009, 08:37
Сообщение #10


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

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



диаграммы ниже.

отвечаю на вопросы от SM

данные должны помещаться в некий буфер (в простейшем случае- массив)
и ещё должен быть подсчёт байтов

вот такие задачи.

допускается настроить времянку так чтобы: Tsetup=1clk, Twrite=1 clk, Thold =0 clk
вот хочется получить быструю времянку smile.gif
clk=133 мгц

Сообщение отредактировал %-) - Nov 23 2009, 08:38
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 23 2009, 08:52
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Тогда, наверное, надо работать по CLKOUT (если ПЛИС работает по нему же) там ловить WE, и писать по нему. Предварительно очень внимательно изучив все цифры по времянкам, а именно всякие там tdo, tho, и определившись, успеет ли ПЛИС за такими времянками, и если успеет, какие где будут задержки.

А если ПЛИС работает не по CLKOUT, то нужен будет буфер, работающий асинхронно, и переход из него в тот клок-домен, по которому работает ПЛИС.
Go to the top of the page
 
+Quote Post
dvladim
сообщение Nov 23 2009, 09:03
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



Цитата(%-) @ Nov 23 2009, 12:37) *
диаграммы ниже.

Надо бы еще соответствие сигналов на времянке сигналам, которые идут в ПЛИС.

Если верно понял идут данные, AWE = we, cs не нашел. Так как AWE всегда делает 101, то проще по его фронту и захватывать и лучше по переднему, тогда для ПЛИС setup = 2 такта, hold = 0 (обконстрейните ПЛИС и посмотрите выполнение времянок). Ну или по заднему фронту, тогда setup = 1, hold = 1. Как в плис ляжет, так и делайте.
А потом через фифо приводите к внутреннему клоку плис.
Go to the top of the page
 
+Quote Post
Shivers
сообщение Nov 23 2009, 09:46
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Смотря какие тайминги, и смотря как скорость ПЛИС. Для высоких скоростей работы я бы посоветовал делать полностью синхронный дизайн: работать по CKOUT, на все сигналы двойную синхронизацию, а только потом уже защелки.
Код
module simple_reg (CKOUT, d, nce, noe, nwe);
  inout [7:0] d;
  input nce, nwe, noe,CKOUT;

  reg [7:0] din_1d,din_2d, din, dout;
  reg nce_1d, nwe_1d, noe_1d, nce_2d, nwe_2d, noe_2d;

  // sync
  always @(posedge CLKOUT)
   begin
    nce_1d  <= nce;
    nce_2d  <= nce_1d;
    nwe_1d <= nwe;
    nwe_2d <= nwe_1d;
    noe_1d  <= noe;
    noe_2d  <= noe_1d;
    din_1d[7:0] <= d[7:0];
    din_2d[7:0] <= din_1d[7:0];
   end

//latches
  always @(posedge CLKOUT)
   begin
    if(nwe_2d & ~nwe_1d) din[7:0] <= din_2d[7:0];
    if(.....)  dout[7:0] <= ...
   end

  assign d = (nce | noe) ? 8'hzz : dout;

endmodule

Так получатся наилучшие сетапы, холды и общая fmax. Но будет больше потреблять, займет больше места внутри плис и т.д. В общем, свои + и -
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 23 2009, 10:43
Сообщение #14


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Shivers @ Nov 23 2009, 03:46) *
Смотря какие тайминги, и смотря как скорость ПЛИС. Для высоких скоростей работы я бы посоветовал делать полностью синхронный дизайн: работать по CKOUT, на все сигналы двойную синхронизацию, а только потом уже защелки.


при работе на CLKOUT в режиме source-synchronus синхронизаторы вообще не нужны, а при работе на другом асинхронном клоке на все сигналы ставить синхронизаторы, это простите меня бред. К тому же чреватый потенциальными проблемами, данные и адрес хлопать на триггерах не имеет смысла, т.к. это мультицикловые пути и условие по setup/hold легко выполняется протоколом шины.


--------------------
Go to the top of the page
 
+Quote Post
Shivers
сообщение Nov 23 2009, 12:40
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Цитата(des00 @ Nov 23 2009, 13:43) *
при работе на CLKOUT в режиме source-synchronus синхронизаторы вообще не нужны, а при работе на другом асинхронном клоке на все сигналы ставить синхронизаторы, это простите меня бред. К тому же чреватый потенциальными проблемами, данные и адрес хлопать на триггерах не имеет смысла, т.к. это мультицикловые пути и условие по setup/hold легко выполняется протоколом шины.

Это не бред, а помехоустойчивость. Если CKOUT - синхронный клок, то можно защелки и сразу ставить, бесспорно. Но если асинхронный, то двойная классическая схема синхронизация обязательна, иначе будете ловить все помехи на шине. В частности, в мостовых схемах асинхронных магистральных интерфейсов без этого никуда - внешний тактовый сигнал и сплошные схемы синхронизации. Опять же оговорюсь, этот кусок кода предназначен для помехоустойчивости, стабильности и хорошей времянки. Минусы емкость, ну и т.д. - писал выше.

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

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

 


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


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