|
pll в цык-2, как сделать |
|
|
|
 |
Ответов
|
Dec 10 2009, 13:38
|
Частый гость
 
Группа: Участник
Сообщений: 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; И что вы думаете? Фрагмент работает исправно как часы - глюков с путаницей "регистр-память" не возникло ни разу! 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
|
|
|
|
|
Dec 10 2009, 16:47
|
iBuilder©
   
Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322

|
Цитата(%-) @ Dec 10 2009, 15:38)  И что вы думаете? Фрагмент работает исправно как часы - глюков с путаницей "регистр-память" не возникло ни разу! 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, 22:43
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
Цитата(Builder @ Dec 10 2009, 19:47)  Вы хоть поняли почему не работало и почему заработало? Если до конца поймёте - вопросы сами отпадут. Метастабильность, мать её! Где-то по вашим ссылкам видел тему в который был прикреплён PDF-ник про метастабильность. Там про шарик на вершине холма и о цепочке двух последовательных триггеров, тактируемых одним клоком. Насколько я понимаю, кода WE1=0 и WE2=1 - анализируется фронт сигнала и вопрос о метастабильности вообще отпадает. Так ? Цитата(Builder @ Dec 10 2009, 19:47)  Нет с собой архива, так и быть, раз сами не нащли, кину вечером Вам на почту ещё одну доку по синхронизации доменов. Как-то проскакивал документик на форуме, а ранее я его находил в инете, ссылку не помню. Это случайно не то, о чём только что написал выше? Цитата(Builder @ Dec 10 2009, 19:47)  Хотя мне этот способ меньше нравится, чем тот что я предлагал первым, хотят и это тоже рабочий, если всё правильно сделать. Хочется осознать и ваш способ. Можете в терминах моих переменных-сигналов объяснить свой метод? А то по ранее высказанным вами предложениями не могу сделать пример.
|
|
|
|
|
Dec 11 2009, 00:43
|
iBuilder©
   
Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322

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