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

 
 
> pll в цык-2, как сделать
%-)
сообщение Dec 6 2009, 14:01
Сообщение #1


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

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



нужно задействовать pll в циклон-2 фпга.

на вход CLK0 подана частота с кварцевого генератора 50мгц

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

гуру, помогите vhdl-фрагментом как юзать PLL
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
%-)
сообщение Dec 10 2009, 13:38
Сообщение #2


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

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



Итак...

После осознанного перепрочтения всех своих тредов в форуме, посвященных несчастной шине обмена CPU=>FPGA, внял тому что сказал Shivers, в этой теме.

Сделал цепочку из двойных триггеров:

Код
process(C)
begin
if rising_edge(C) then
  CE1<=Port_CE;
  WE1<=Port_WE;
  A1<=Port_A;
  D1<=Port_D;
  CE2<=CE1;
  WE2<=WE1;
  A2<=A1;
  D2<=D1;
  if R_M(0)='0' then
   WriteAddress1<=("101000000"*Y)+X;
  else
   WriteAddress1<=("010100000"*Y)+X;
  end if;
  WriteAddress2<=WriteAddress1;
end if;
end process;

process(C)
variable W2:std_logic_vector(8 downto 0);
variable X0:std_logic_vector(8 downto 0);
variable X1:std_logic_vector(8 downto 0);
variable H2:std_logic_vector(7 downto 0);
variable Y0:std_logic_vector(7 downto 0);
variable Y1:std_logic_vector(7 downto 0);
begin
if rising_edge(C) then
  if(WE1='0' and WE2='1') then
   if CE2='0' then
    if A2='0' then
     case D2(15 downto 12) is
      when "1001" =>
       R_P:=D2(0);
      when "1010" =>
       R_W:=D2(8 downto 0);
       W2:='0'&R_W(8 downto 1);
       X0:="010100000"-W2;
       X1:="010011111"+W2;
       X:=X0;
      when "1011" =>
       R_H:=D2(7 downto 0);
       H2:='0'&R_H(7 downto 1);
       Y0:="01111000"-H2;
       Y1:="01110111"+H2;
       Y:=Y0;
      when others =>null;
     end case;
    else
     if X=X1 then
      X:=X0;
      if Y=Y1 then
       Y:=Y0;
      else
       Y:=Y+1;
      end if;
     else
      X:=X+1;
     end if;
    end if;
   end if;
  end if;
end if;
end process;

VRAM0_CE<='0';
VRAM1_CE<='0';

VRAM0_OE<=H(0) when (R_P='0' and Blank='1') else '1';
VRAM1_OE<=H(0) when (R_P='1' and Blank='1') else '1';

VRAM0_WE<=WE2 when (A2='1' and R_P='1') else '1';
VRAM1_WE<=WE2 when (A2='1' and R_P='0') else '1';

VRAM0_D<=D2 when R_P='1' else (others => 'Z');
VRAM1_D<=D2 when R_P='0' else (others => 'Z');

VRAM0_A<=WriteAddress2 when R_P='1' else ReadAddress;
VRAM1_A<=WriteAddress2 when R_P='0' else ReadAddress;

end VideoFlipper_Architecture;


И что вы думаете?

Фрагмент работает исправно как часы - глюков с путаницей "регистр-память" не возникло ни разу! rolleyes.gif

C - это клок с PLL = 200 МГц

С Блекфина биру только CE,WE,A,D. CLKOUT=133.3 МГц (не биру)

Устройство работает устойчиво при Tsu>=2, Tw>=1

При Tsu<2 адрес не успевает вычисляться - изобразение начинает скролиться по горизонтали и потихоньку съезжать по вертикали, что логично. Для регистров хватает.

При любом режиме с Thold>0, адрес вычисляется также некорректно.

В целом Tsu=2, Tw=1 я доволен, но интересует возможность получить более быструю времянку , например Tsu=1, Tw=1 -
возможно ли как-нибудь изменить вышеприведенный код?

С какой оптимальной (компромисс надёжность(!главное)/потребление) частотой можно нарезать данные для такого метода?

Понимаю, что des00, говорил что в 2.5 - 3 больше чем отдельный минимальный отсчёт нуля или единицы, но интересует данный случай.

P.S. а адрес с данными тоже надо нарезать - а то пиксель пишится в память размазанно влево-вправо

Сообщение отредактировал %-) - Dec 10 2009, 13:40
Go to the top of the page
 
+Quote Post
Builder
сообщение Dec 10 2009, 16:47
Сообщение #3


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(%-) @ Dec 10 2009, 15:38) *
И что вы думаете?
Фрагмент работает исправно как часы - глюков с путаницей "регистр-память" не возникло ни разу! rolleyes.gif
C - это клок с PLL = 200 МГц
С Блекфина биру только CE,WE,A,D. CLKOUT=133.3 МГц (не биру)
Устройство работает устойчиво при Tsu>=2, Tw>=1
При Tsu<2 адрес не успевает вычисляться - изобразение начинает скролиться по горизонтали и потихоньку съезжать по вертикали, что логично. Для регистров хватает.
При любом режиме с Thold>0, адрес вычисляется также некорректно.
В целом Tsu=2, Tw=1 я доволен, но интересует возможность получить более быструю времянку , например Tsu=1, Tw=1 -
возможно ли как-нибудь изменить вышеприведенный код?
С какой оптимальной (компромисс надёжность(!главное)/потребление) частотой можно нарезать данные для такого метода?
Понимаю, что des00, говорил что в 2.5 - 3 больше чем отдельный минимальный отсчёт нуля или единицы, но интересует данный случай.
P.S. а адрес с данными тоже надо нарезать - а то пиксель пишится в память размазанно влево-вправо

Вы хоть поняли почему не работало и почему заработало?
Если до конца поймёте - вопросы сами отпадут.
Нет с собой архива, так и быть, раз сами не нащли, кину вечером Вам на почту ещё одну доку по синхронизации доменов.
Как-то проскакивал документик на форуме, а ранее я его находил в инете, ссылку не помню.
Там описывается что Вы сейчас сделали.
Почитаете, разберётесь. Хотя мне этот способ меньше нравится, чем тот что я предлагал первым, хотят и это тоже рабочий, если всё правильно сделать.
Go to the top of the page
 
+Quote Post
%-)
сообщение Dec 10 2009, 22:43
Сообщение #4


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

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



Цитата(Builder @ Dec 10 2009, 19:47) *
Вы хоть поняли почему не работало и почему заработало?
Если до конца поймёте - вопросы сами отпадут.


Метастабильность, мать её! smile3046.gif

Где-то по вашим ссылкам видел тему в который был прикреплён PDF-ник про метастабильность. Там про шарик на вершине холма и о цепочке двух последовательных триггеров, тактируемых одним клоком.

Насколько я понимаю, кода WE1=0 и WE2=1 - анализируется фронт сигнала и вопрос о метастабильности вообще отпадает.

Так ?

Цитата(Builder @ Dec 10 2009, 19:47) *
Нет с собой архива, так и быть, раз сами не нащли, кину вечером Вам на почту ещё одну доку по синхронизации доменов.
Как-то проскакивал документик на форуме, а ранее я его находил в инете, ссылку не помню.


Это случайно не то, о чём только что написал выше?

Цитата(Builder @ Dec 10 2009, 19:47) *
Хотя мне этот способ меньше нравится, чем тот что я предлагал первым, хотят и это тоже рабочий, если всё правильно сделать.


Хочется осознать и ваш способ. Можете в терминах моих переменных-сигналов объяснить свой метод?
А то по ранее высказанным вами предложениями не могу сделать пример.
Go to the top of the page
 
+Quote Post
Builder
сообщение Dec 11 2009, 00:43
Сообщение #5


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(%-) @ Dec 11 2009, 00:43) *
Метастабильность, мать её! smile3046.gif
В том числе и она.
Цитата(%-) @ Dec 11 2009, 00:43) *
Где-то по вашим ссылкам видел тему в который был прикреплён PDF-ник про метастабильность. Там про шарик на вершине холма и о цепочке двух последовательных триггеров, тактируемых одним клоком.
Насколько я понимаю, кода WE1=0 и WE2=1 - анализируется фронт сигнала и вопрос о метастабильности вообще отпадает.
Так ?
Это случайно не то, о чём только что написал выше?
Вот файл, собственно мне добавить к тому что написаному ранее и тому что в файлах уже нечего.
Читайте темы, файлы, осознавайте.
Цитата(%-) @ Dec 11 2009, 00:43) *
Хочется осознать и ваш способ. Можете в терминах моих переменных-сигналов объяснить свой метод?
А то по ранее высказанным вами предложениями не могу сделать пример.
Перечитайте всё по ссылке, что я давал ранее, в частности пример синхронизатора от SM.
Представьте что тригер там будет асинхронно сбрасываться сигналом от проца, например WR.
Только нкакой дополнительной комбинаторики. По моему для осзания идее того примера достаточно.
С примером из UART от альтеры облом, потерял, не могу у себя найти. Но там идея та-же была,
асинхронный сброс и синхроннй анализ. Главное при реализации всё правильно сделать.

ЗЫ. не ленитесь копаться в чужиз доступных исходниках. Но сегодня в инете куча всего есть...
Прикрепленные файлы
Прикрепленный файл  CummingsSNUG2001SJ_AsyncClk_rev1_1.pdf ( 174.44 килобайт ) Кол-во скачиваний: 28
 
Go to the top of the page
 
+Quote Post
%-)
сообщение Dec 11 2009, 02:58
Сообщение #6


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

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



Цитата(Builder @ Dec 11 2009, 03:43) *
Вот файл, собственно мне добавить к тому что написаному ранее и тому что в файлах уже нечего.
Читайте темы, файлы, осознавайте


Почитал. Спасибо. Там также рассмотрен случай, когда используется комбинационная логика управляющих сигналов, что их надо объединять в функцию ДО синхронизации.
Вопрос - какие из сигналов: CE,WE,A,D являются управляющими?
Я склонен считать что CE и WE - обязательно, а вот на счёт A - не совсем уверен, потому что это - адресный бит от которого зависит распознавание "регистр-память"
И уж совсем менее склонен считать управляющим сигнал D - так как это данные, НО в старших битах - номер регистра.

Какие из них нужно объединить в функцию перед подачей на синхронизацию?

Цитата(Builder @ Dec 11 2009, 03:43) *
Перечитайте всё по ссылке, что я давал ранее, в частности пример синхронизатора от SM.



Вот его модуль:
Код
module interck2 ( in, out, clka, clkb, reset, completed);
input in, clka,clkb,reset;
output out, completed;

reg in_at_clka;
reg [1:0] out_at_clkb;

wire clra = reset | out_at_clkb[1];

always @(posedge clka or posedge clra)
  if (clra) in_at_clka <= 1'b0;
  else if (in) in_at_clka <= 1'b1;

always @(posedge clkb or posedge reset)
  if (reset) out_at_clkb <= 2'b00;
  else out_at_clkb <= {out_at_clkb[0] & !out_at_clkb[1], in_at_clka};

assign out = out_at_clkb[1];

reg [1:0] cmpl_at_clka;
reg cmpl_at_clkb;
wire clrb = reset | cmpl_at_clka[1];

always @(posedge clkb or posedge clrb)
  if (clrb) cmpl_at_clkb <= 1'b0;
  else if (out_at_clkb[1]) cmpl_at_clkb <= 1'b1;

always @(posedge clka or posedge reset)
  if (reset) cmpl_at_clka <= 2'h0; else
  cmpl_at_clka <= {cmpl_at_clka[0] & !cmpl_at_clka[1], cmpl_at_clkb};

assign completed = cmpl_at_clka[1];

endmodule


Честно говоря мало чего понял, потому что:

1) verilog
2) непонятны назначения сигналов
3) и как это примениить в моём случае?

Цитата(Builder @ Dec 11 2009, 03:43) *
Представьте что тригер там будет асинхронно сбрасываться сигналом от проца, например WR.
Только нкакой дополнительной комбинаторики. По моему для осзания идее того примера достаточно.


а вы можете куском кода, а то на словах как-то не сильно улавливаю суть явлений...

Цитата(Builder @ Dec 11 2009, 03:43) *
ЗЫ. не ленитесь копаться в чужиз доступных исходниках. Но сегодня в инете куча всего есть...


у меня уже все ссылки красные в поисковике laughing.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- %-)   pll в цык-2   Dec 6 2009, 14:01
- - Kuzmi4   MegaWizard Plug-In Manager спасёт отца русской дем...   Dec 6 2009, 14:33
- - Methane   Цитата(%-) @ Dec 6 2009, 16:01) ...   Dec 6 2009, 14:38
- - %-)   Подключил PLL следующим образом. В мегавизарде сфо...   Dec 9 2009, 01:01
|- - des00   Цитата(%-) @ Dec 8 2009, 19:01) ...   Dec 9 2009, 03:58
|- - %-)   Цитата(des00 @ Dec 9 2009, 07:58) телепат...   Dec 9 2009, 04:44
|- - des00   Цитата(%-) @ Dec 8 2009, 22:44) ...   Dec 9 2009, 05:37
||- - %-)   Цитата(des00 @ Dec 9 2009, 09:37) Кстати ...   Dec 9 2009, 06:11
||- - des00   Цитата(%-) @ Dec 9 2009, 00:11) ...   Dec 9 2009, 06:23
|||- - %-)   Цитата(des00 @ Dec 9 2009, 10:23) но у ва...   Dec 9 2009, 07:21
|||- - des00   Цитата(%-) @ Dec 9 2009, 01:21) ...   Dec 9 2009, 07:50
|||- - Builder   Цитата(des00 @ Dec 9 2009, 09:50) ИМХО я ...   Dec 9 2009, 08:09
|||- - %-)   Цитата(Builder @ Dec 9 2009, 12:09) Поищу...   Dec 9 2009, 08:52
|||- - Builder   Цитата(%-) @ Dec 9 2009, 10:52) ...   Dec 9 2009, 09:16
||- - Builder   Цитата(%-) @ Dec 9 2009, 09:11) ...   Dec 9 2009, 06:36
|- - Builder   Цитата(%-) @ Dec 9 2009, 07:44) ...   Dec 9 2009, 06:21
- - %-)   1) с PLL разобрался. работает 2) с памятью разобр...   Dec 9 2009, 11:13
|- - Builder   Может проблема в этом? Цитата(%-) @ ...   Dec 9 2009, 11:21
||- - %-)   Цитата(Builder @ Dec 9 2009, 15:21) Реком...   Dec 9 2009, 11:47
||- - %-)   Цитата(Builder @ Dec 9 2009, 15:21) Рискн...   Dec 9 2009, 13:25
|- - des00   Цитата(%-) @ Dec 9 2009, 05:13) ...   Dec 9 2009, 12:01
|- - %-)   Цитата(des00 @ Dec 9 2009, 16:01) 1. как ...   Dec 9 2009, 12:04
|- - des00   Цитата(%-) @ Dec 9 2009, 06:04) ...   Dec 9 2009, 17:29
|- - %-)   Цитата(des00 @ Dec 9 2009, 20:29) дорого ...   Dec 9 2009, 23:28
|- - des00   Цитата(%-) @ Dec 9 2009, 17:28) ...   Dec 10 2009, 06:30
- - des00   Цитата(%-) @ Dec 10 2009, 07:38)...   Dec 11 2009, 05:01
- - %-)   Цитата(des00 @ Dec 11 2009, 08:01) если в...   Dec 11 2009, 05:35
- - des00   Цитата(%-) @ Dec 10 2009, 23:35)...   Dec 11 2009, 06:30


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

 


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


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