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

 
 
> 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
 
Start new topic
Ответов
warrior-2001
сообщение Mar 2 2011, 15:35
Сообщение #2


Местный
***

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



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


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


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #5


Местный
***

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



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

А можете уточнить, какие именно глюки и кто именно устранял???
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- billidean   DDRIII+HPCII глюки или руки?   Feb 23 2011, 05:51
- - billidean   Подскажите плз, правильно ли я представляю себе ци...   Feb 23 2011, 16:04
- - billidean   Спасибо ОГРОМНОЕ замечательному форуму за такую пл...   Feb 24 2011, 14:31
|- - dinam   Сочувствую, сам не могу понять в чем проблема в мо...   Feb 25 2011, 03:11
- - dvladim   Цитата(billidean @ Feb 24 2011, 17:31) Сп...   Feb 25 2011, 17:44
- - billidean   В документации на HPCII говорится, что использоват...   Mar 2 2011, 13:48
|- - warrior-2001   Цитата(billidean @ Mar 18 2011, 17:46) А ...   Mar 21 2011, 12:53
- - billidean   при local_size=4 и манипулированием сигналами prec...   Mar 19 2011, 13:03
- - novartis   У меня коллега на работе тоже с такой проблемой му...   Mar 19 2011, 14:58
- - nmurzin   Объясните пожалуйста, а зачем вобще задирать local...   Mar 22 2011, 15:46
|- - warrior-2001   Цитата(nmurzin @ Mar 22 2011, 18:46) ... ...   Mar 23 2011, 08:48
- - nmurzin   В DataSheet на HPC2 на странице 12 есть таблица ...   Mar 23 2011, 09:28
- - billidean   Цитата(warrior-2001 @ Mar 21 2011, 16...   Mar 23 2011, 13:57
|- - warrior-2001   Цитата(billidean @ Mar 23 2011, 16:57) .....   Mar 23 2011, 14:55
- - Sergeyrtf   У меня с DDR2 тоже подобные проблемы - в тестовом ...   Apr 1 2011, 08:16


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

 


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


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