|
Чтение данных из CPU в FPGA, vhdl |
|
|
|
Nov 23 2009, 06:39
|
Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Nov 23 2009, 06:57
|
Частый гость
 
Группа: Участник
Сообщений: 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; праильно? что-то совсем всё просто получается... слыхал что по фронту нужно фиксировать данные, а не по уровню. кому верить?
|
|
|
|
|
Nov 23 2009, 07:04
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(%-) @ Nov 23 2009, 09:57)  слыхал что по фронту нужно фиксировать данные, а не по уровню. кому верить? Так расскажите побольше. Может и по фронту нужно у вас. Вы же сказали, "как в SRAM", я подразумевал, что как в асинхронную SRAM. А если по фронту, то еще и тайминги все рассказывайте. А может у вас там еще и к клоку надо все привести. В общем - телепаты в отпуске, каков вопрос, таков ответ.
|
|
|
|
|
Nov 23 2009, 07:17
|
Частый гость
 
Группа: Участник
Сообщений: 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 МГц Не понятно по каким признакам вести запись(фронты или уровни?)
Сообщение отредактировал %-) - Nov 23 2009, 07:19
|
|
|
|
|
Nov 23 2009, 07:20
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(%-) @ Nov 23 2009, 11:17)  зря обижаетесь. вашим ответом доволен. просто я сам не знаю какой тайминг подойдет лучше. Скажу лучше процессор. ADSP BF533. Именно он будет слать данные. Через асинхронный банк Setup=1 такт, we=1 такт , hold =0 тактов. Частота clk=133.3333 МГц Не понятно по каким признакам вести запись  Лучше привести внешние сигналы к глобальному клоку ФПГА + добавить цепочку триггеров для подавления метастабильности
|
|
|
|
|
Nov 23 2009, 07:20
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Вы сначала определитесь, что эти данные с выхода регистра делать будут. Если зажигать светодиоды - это одно, защелка оптимальна будет. А если например поступать в FIFO, или еще куда на дальнейшую обработку, то это второй вопрос. Если на обработку - тогда рассказывайте в чем ее суть, какой длительности импульс we, какой клок в обработчике, привязан ли он к клоку DSP, если привязан, то с какими сетапами-холдами по каким сигналам. У меня нет документации на BF, и мне влом ее качать, чтобы смотреть все это самому.
|
|
|
|
|
Nov 23 2009, 08:34
|
Знающий
   
Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737

|
Цитата(%-) @ Nov 23 2009, 11:17)  Скажу лучше процессор. ADSP BF533. Именно он будет слать данные. Через асинхронный банк Setup=1 такт, we=1 такт , hold =0 тактов. Частота clk=133.3333 МГц Не понятно по каким признакам вести запись(фронты или уровни?)  Лучще вейвформу приведите. А то можно и по фронту написать, но подойдет-ли? Код always @(negedge we) if (!cs) rg <= d;
|
|
|
|
|
Nov 23 2009, 08:37
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
диаграммы ниже. отвечаю на вопросы от SMданные должны помещаться в некий буфер (в простейшем случае- массив) и ещё должен быть подсчёт байтов вот такие задачи. допускается настроить времянку так чтобы: Tsetup=1clk, Twrite=1 clk, Thold =0 clk вот хочется получить быструю времянку  clk=133 мгц
Сообщение отредактировал %-) - Nov 23 2009, 08:38
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 23 2009, 08:52
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Тогда, наверное, надо работать по CLKOUT (если ПЛИС работает по нему же) там ловить WE, и писать по нему. Предварительно очень внимательно изучив все цифры по времянкам, а именно всякие там tdo, tho, и определившись, успеет ли ПЛИС за такими времянками, и если успеет, какие где будут задержки.
А если ПЛИС работает не по CLKOUT, то нужен будет буфер, работающий асинхронно, и переход из него в тот клок-домен, по которому работает ПЛИС.
|
|
|
|
|
Nov 23 2009, 09:03
|
Знающий
   
Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737

|
Цитата(%-) @ Nov 23 2009, 12:37)  диаграммы ниже. Надо бы еще соответствие сигналов на времянке сигналам, которые идут в ПЛИС. Если верно понял идут данные, AWE = we, cs не нашел. Так как AWE всегда делает 101, то проще по его фронту и захватывать и лучше по переднему, тогда для ПЛИС setup = 2 такта, hold = 0 (обконстрейните ПЛИС и посмотрите выполнение времянок). Ну или по заднему фронту, тогда setup = 1, hold = 1. Как в плис ляжет, так и делайте. А потом через фифо приводите к внутреннему клоку плис.
|
|
|
|
|
Nov 23 2009, 09:46
|

Знающий
   
Группа: Свой
Сообщений: 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. Но будет больше потреблять, займет больше места внутри плис и т.д. В общем, свои + и -
|
|
|
|
|
Nov 23 2009, 12:40
|

Знающий
   
Группа: Свой
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|