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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> DDRIII+HPCII глюки или руки?
billidean
сообщение Feb 23 2011, 05:51
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Всех с праздником, мужики.
Уже неделю сижу с проблемой::
есть код (примерный):
Код
...
...
    write_data_in    : in std_logic_vector(63 downto 0);
...
    read_data_out    : out std_logic_vector(63 downto 0);
    rdata_valid_out    : out std_logic := '0';
...
...

    local_size <= "010";

process( phy_clk )
    variable var_local_address : std_logic_vector(23 downto 0) := ( others => '0' );
    variable counter_write : integer := 0;
    variable counter_read_req  : integer := 0;
    variable counter_read_data : integer := 0;
begin

    case( step ) is
    ---
    when step_pre            =>
                    if( start_write == '1' ) then
                        counter_write := 100;
                        step := step_write_first;
                    end if;
                    if( start_read == '1' ) then
                        counter_read_req  := 100;
                        counter_read_data := 100;
                        step := step_read;
                    end if;
                    local_burstbegin    <= '0';
                    local_write_req    <= '0';
                    local_read_req    <= '0';
                    local_address    <= ( others => '0' ); --начинаю с 0-го адреса
                    var_local_address    <= ( others => '0' ); --начинаю с 0-го адреса
    ---
    when step_write_first    =>
                    if( counter_write = 0 ) then
                        local_address     <= ( others => '0' );
                        local_write_req   <= '0';
                        local_burstbegin  <= '0';
                        step := step_pre;
                    else
                        if( local_ready = '1' ) then
                            local_address     <= var_local_address;
                            local_write_req   <= '1';
                            local_burstbegin  <= '1';
                            local_write_data(63 downto 0)  <= write_data_in(63 downto 0);
                            step := step_write_second;
                        end if;
                    end if;
    ---
    when step_write_second    =>
                    local_burstbegin  <= '0';
                    counter_write       := counter_write - 1;
                    var_local_address <= (инкремент var_local_address)
                    step := step_write_first;
    ---
    when step_read            =>
                    if( counter_read_req = 0 ) then
                        local_address      <= ( others => '0' );
                        local_read_req    <= '0';
                        local_burstbegin  <= '0';
                        step := step_pre;
                    else
                        if( local_ready = '1' ) then
                            local_address     <= var_local_address;
                            local_read_req    <= '1';
                            local_burstbegin  <= '1';
                            var_local_address <= (инкремент var_local_address)
                            counter_read_req := counter_read_req - 1;
                        end if;
                    end if;
                    if( counter_read_data = 0 ) then
                        rdata_valid_out <= '0';
                        step := step_pre;
                    else
                        if( local_rdata_valid = '1' ) then
                            rdata_valid_out <= '1';
                            read_data_out(63 downto 0) <= local_rdata(63 downto 0);
                            counter_read_data := counter_read_data - 1;
                        else
                            rdata_valid_out <= '0';
                        end if;
                    end if;
    end case;

end process;

На железе (Stratix IV) получаю данные read_data_out правильные процентов на 99, а 1% битые.
Почему так???

Не совсем вник в то, когда менять адрес относительно сигнала local_burstbegin, по фронту или по спаду бурста.
Go to the top of the page
 
+Quote Post
billidean
сообщение Feb 23 2011, 16:04
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Подскажите плз, правильно ли я представляю себе циклограмму при local_size=2:
Код
phy_clk          :  _I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__

local_burstbegin :  _I````I____I````I____I````I____I````I____I````I____I````I____

local_address    :  _<:::::::::><:::::::::><:::::::::><:::::::::><:::::::::>_____

local_write_data :  _<:::::::::><:::::::::><:::::::::><:::::::::><:::::::::>_____

Извините за плохую читабельность, торопился rolleyes.gif

Сообщение отредактировал billidean - Feb 23 2011, 16:05
Go to the top of the page
 
+Quote Post
billidean
сообщение Feb 24 2011, 14:31
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Спасибо ОГРОМНОЕ замечательному форуму за такую плотную поддержку.

Но я уже сам все сделал.

З.Ы. А могли бы подсказать.

З.З.Ы. Вот так все здесь и делают: "Я то знаю ответ tongue.gif но говорить не буду. Пусть сами пытаются"
Go to the top of the page
 
+Quote Post
dinam
сообщение Feb 25 2011, 03:11
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898



Сочувствую, сам не могу понять в чем проблема в моём случае (см. соседний топик).
Go to the top of the page
 
+Quote Post
dvladim
сообщение Feb 25 2011, 17:44
Сообщение #5


Знающий
****

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



Цитата(billidean @ Feb 24 2011, 17:31) *
Спасибо ОГРОМНОЕ замечательному форуму за такую плотную поддержку.

Ну а объяснить в чем была проблема и в чем состояло решение?
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 2 2011, 13:48
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



В документации на HPCII говорится, что использовать сигнал precharge необходимо при переключении банков памяти,
И я этому поверил blush.gif
Моя система работает с адресами в пределах одного банка. Запись данных производится пакетаами по 100 слов. Сейчас я использую local_size=4(выше в коде было 2).
Я как честный человек провожу строб сигнала precharge каждый раз перед началом передачи пакета(100).
Опытным путем я выяснил (может это только у меня wacko.gif ), что при таком раскладе в память пишутся какие-то битые данный процентов на 5.
Я долго тыкал клаву на всякие кнопки и натыкал выход из моей ситуации.
При каждой установке бурста(local_burstbegin) я загонял строб сигнала precharge, и о чудо w00t.gif данные перестали биться.

З.Ы.: вот такая моя история борьбы начинающего ПЛИС-схемотехника с HPCII

Сообщение отредактировал billidean - Mar 2 2011, 13:49
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Mar 2 2011, 15:35
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



При генерации контроллера отключите precharge. Данная опция подробно описана в мануале.


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 3 2011, 13:34
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Цитата(warrior-2001 @ Mar 2 2011, 18:35) *
При генерации контроллера отключите precharge. Данная опция подробно описана в мануале.

Сегодня пробовал отключить эту галочку при насчтройке контроллера DDR3. В результате данные записываются битые на 50 процентов.
Вернул обратно - все ок.
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Mar 4 2011, 12:36
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



Цитата(billidean @ Mar 3 2011, 16:34) *
Сегодня пробовал отключить эту галочку при насчтройке контроллера DDR3. В результате данные записываются битые на 50 процентов.
Вернул обратно - все ок.

Думаю, что после отключения "галочки" поменялась времянка. Вообще основные мучения с ddr/ddr2 у меня были связаны с шиной Avalon. Как только выяснилось это - http://www.alteraforum.com/forum/showthrea....oss=burstbegin , и ещё ряд глюков был устранён Альтерой - всё проблемы ушли.
Физический интерфейс не может так глючить - обычно проблемы либо в таймингах либо в локальной шине. При наличии свободного места в ПЛИС контроллеры памяти обычно без проблем запускаются на максимальных скоростях.


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 18 2011, 14:46
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Цитата(warrior-2001 @ Mar 4 2011, 16:36) *
... и ещё ряд глюков был устранён Альтерой - всё проблемы ушли.

А можете уточнить, какие именно глюки и кто именно устранял???
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 19 2011, 13:03
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



при local_size=4 и манипулированием сигналами precharge и refresh у меня вроде получилось сделать ОЗУ из DDR3.
Но попытки сделать все то же самое с local_size=64 ничего не получается, данные портиться начинают.

Вообще кто-нибудь использовал local_size=64? если да, то ПЛЗ подскажите что-нить help.gif
Go to the top of the page
 
+Quote Post
novartis
сообщение Mar 19 2011, 14:58
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



У меня коллега на работе тоже с такой проблемой мучается, если справится, отпишусь.
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Mar 21 2011, 12:53
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



Цитата(billidean @ Mar 18 2011, 17:46) *
А можете уточнить, какие именно глюки и кто именно устранял???

Конкретные глюки описаны в err data на ddr/dd2/dd3 контроллеры. Устраняет разработчик - Altera.
Проверил свои проекты - local_size меняется от 1 до 32. 64 пока не использовал.
Если при отключении чего-то появляются ошибки - я бы копал в эту сторону. Повторюсь, при генерации оставляю precharge на откуп Altera.


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post
nmurzin
сообщение Mar 22 2011, 15:46
Сообщение #14


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

Группа: Участник
Сообщений: 94
Регистрация: 24-11-10
Из: г.Зеленоград
Пользователь №: 61 141



Объясните пожалуйста,
а зачем вобще задирать local_size более чем 2 ?
Ведь burst_begin можно дергать непрерывно.
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Mar 23 2011, 08:48
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



Цитата(nmurzin @ Mar 22 2011, 18:46) *
...
а зачем вобще задирать local_size более чем 2 ?
...

Если, к примеру, в проекте используется большая локальная шина, со своим интерконнектом и прочими вкусностями.
Мне нужно в рамках спецификации этой шины подключить к ней контроллер ddr/ddr2/ddr3 фирмы Altera. Берётся Avalon и делается переходник между ним и этой локальной шиной, с поддержкой пачек, с handshake и т.д.
И вот чтобы этот переходник не весил много - проще пачки передавать напрямую. Раз контроллер поддерживает - отчего не пользоваться-то?


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 30th June 2025 - 05:11
Рейтинг@Mail.ru


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