|
|
  |
VHDL синтезирование задержек |
|
|
|
Nov 30 2009, 06:12
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(des00 @ Nov 30 2009, 07:40)  нцатый раз советую, сделайте синхронный дизайн !!! Слушай умного человека, внимательно слушай. Цитата(%-) @ Nov 30 2009, 08:06)  вы хотите сказать что ПЛИС на задержкой 8нс справится с клоком 133 МГц ? В большинстве случаев умным людям хватит и 66 МГц. Разве свет клином сошелся только на одном из двух фронтов тактовых импульсов ? Цитата(%-) @ Nov 30 2009, 08:06)  а вот мне хочется асинхронный - и буду его долбить! Да, да ! Долбись головой об стену ! Только когда прийдёт другая партия ПЛИС, немного измениться питание (из-за другой серии источников питания) не удивляйся почему задержки резко изменились.
|
|
|
|
|
Nov 30 2009, 06:24
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(%-) @ Nov 29 2009, 23:53)  можете оставаться при своих "синхронных" мнениях, но существуют теже чипы видеоконтроллеров с АСИНХРОННЫМ интерфейсом, которые могут манипулировать с адресом своей SRAM ПОСЛЕ каждой записи по асинхронной шине. и вовсе без синхронности и на частотах до 100 мгц включительно. Какое отношение имеет асинхронный интерфейс к синхронному дизайну? Не мешайте все в одну кучу. Цитата неужели ПЛИС такие убогие, что это не реализуемо на асинхронке? А? реализуемо но не с вашим уровнем владения цифровой схемотехникой и ПЛИС а частности. Без обид, это констатация факта %)
--------------------
|
|
|
|
|
Nov 30 2009, 06:37
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
уговорили. буду на синхронке делать. есть CLKOUT - выход с процессора, к нему привязаны все времянки остальных сигналов: we - строб записи a - адрес d - данные cs - выбор чипа времянка на рисунке ниже. Tsetup=2clk Thold =1 clk Twrite=2 clk Ttransition=1 clk Помогите пожалуйста кодом - как можно сделать синхронно!
Сообщение отредактировал %-) - Nov 30 2009, 06:41
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 30 2009, 06:43
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
Цитата(SM @ Nov 30 2009, 09:30)  И кто же это Вас так жестоко дезинформировал? Неужели собственные догадки на тему восьмерки в маркировке микрухи? кстати, а что означает восьмёрка в конце? задержка от одного входного пина на другой выходной пин? помогите плиз с синхронным интерфейсом (времянки в предыдущем мойм сообщении) CLKOUT=133 мгц
|
|
|
|
|
Nov 30 2009, 06:58
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(%-) @ Nov 30 2009, 09:43)  кстати, а что означает восьмёрка в конце? А ничего не означает. Так, условный попугай, происхождение которого известно разве что разработчикам кристалла. Цитата(%-) @ Nov 30 2009, 09:43)  помогите плиз с синхронным интерфейсом (времянки в предыдущем мойм сообщении) А что помогать-то? Нарисуйте схему на бумажке из триггеров и логики, и опишите потом на удобном вам языке.
|
|
|
|
|
Nov 30 2009, 07:08
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
Цитата(Shtirlits @ Nov 30 2009, 10:48)  Времянки видно, но я решительно не понимаю, в чем затруднение? как привязать остальные сигналы к CLOCKOUT ? завести счётчик CLKOUT? и в зависимости от его значения ловить данные и адрес? P.S. никогда не нарезал сигналы по клоку. Люди! Покажите как это делается!!!
|
|
|
|
|
Nov 30 2009, 07:23
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(%-) @ Nov 30 2009, 01:08)  как привязать остальные сигналы к CLOCKOUT ? Покажите как это делается!!! в ваших предыдущих темах вам несколько раз рассказывали как это делается. поднимите старые темы. если на картинке все что вам нужно, то я бы сделал как то так Код wire clk = clkout_from_pll_in_zero_buffer_mode;
always_ff @(posedge clk) begin // IO register latch a_reg <= a; d_reg <= d; nrd_reg <= nrd; nwr_reg <= nwr; ncs_reg <= ncs; // write <= ~nwr_reg & ~write & ~ncs_reg; end
always_ff @(posedge clk) begin if (write) begin case (a_reg) // bla-bla-bla endcase end end PS. Write access достаточно одного такта.
--------------------
|
|
|
|
|
Nov 30 2009, 07:30
|
Частый гость
 
Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331

|
Цитата(des00 @ Nov 30 2009, 11:23)  в ваших предыдущих темах вам несколько раз рассказывали как это делается. поднимите старые темы. если на картинке все что вам нужно, то я бы сделал как то так Код wire clk = clkout_from_pll_in_zero_buffer_mode;
always_ff @(posedge clk) begin // IO register latch a_reg <= a; d_reg <= d; nrd_reg <= nrd; nwr_reg <= nwr; ncs_reg <= ncs; // write <= ~nwr_reg & ~write & ~ncs_reg; end
always_ff @(posedge clk) begin if (write) begin case (a_reg) // bla-bla-bla endcase end end PS. Write access достаточно одного такта. огромное спасибо  у вас CLK берется с PLL плис, но процессор имеет свой CLKOUT - можно ли на него зацепиться через входной пин плис? в какой момент можно изменить адрес у памяти? во время Transition Time? можно ли CLKOUT(133МГц) взять с платы проводом длиной 15 см , присоединив резисторы по 33 ом к процессору и входной ноге плис?
Сообщение отредактировал %-) - Nov 30 2009, 07:31
|
|
|
|
|
Nov 30 2009, 07:35
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
"конечный автомат" реализованный любым способом, чем нагляднее - тем меньше места ошибке. Ниже не самый лучший вариант, но для примера сгодится. Сигналы ready и AD_out совпадают с точностью до полярности. Так получается, что автомат готов именно тогда, когда не пишет в память. Код type state_t is ( st_idle, st_setup_1, st_setup_2, st_write_1, st_write_2, st_hold ); signal state : state_t;
begin
RD <= '0';
process(reset, clk) begin if (reset='1') then state <= st_idle; CS_out <= '1'; AD_out <= '0'; nWE_out <= '1'; ready <= '0'; elsif rising_edge(clk) then AD_out <= '1'; ready <= '0'; CS_out <= '1'; case state is when st_idle => if cmd_write='1' then state <= st_setup_1; else AD_out <= '0'; ready <= '1'; end if; when st_setup_1 => state <= st_setup_2; when st_setup_2 => state <= st_write_1; when st_write_1 => CS_out <= '0'; state <= st_write_2; when st_write_2 => CS_out <= '0'; state <= st_hold; when st_hold => ready <= '1'; state <= st_idle; end case; end if; end process;
|
|
|
|
|
Nov 30 2009, 07:55
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(%-) @ Nov 30 2009, 01:30)  у вас CLK берется с PLL плис, но процессор имеет свой CLKOUT - можно ли на него зацепиться через входной пин плис? не просто с PLL, а с PLL в режиме компенсации задержек IO буфера, у альтеры этот режим называется ZeroDelayBuffer. У ксайлов Source Synchronus Mode. На вход этой PLL и подаете CLKOUT с проца. ИМХО так будет лучше всего. В противном случае (если PLL использовать нельзя) нужно будет учитывать задержку клока до триггеров в IO буфере. Либо делать систему с нарезкой сигнала на собственной тактовой частоте от локального генератора. Тогда логику формирования сигнала записи надо будет поменять (относительно моего примера). Цитата в какой момент можно изменить адрес у памяти? во время Transition Time? не совсем понимаю что у вас "память", если это плис которую проц видит как память, то проц может менять адрес в каждой новой транзакции. Если фпга транслирует то что приняла от проца к своей памяти, то ИМХО после завершения доступа к этой памяти.
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|