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

 
 
> 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
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 18)
nmurzin
сообщение Mar 23 2011, 09:28
Сообщение #16


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

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



В DataSheet на HPC2 на странице 12 есть таблица

Table 1–3. DDR and DDR2 SDRAM HPC and HPC II Features


Внизу таблицы есть примечания:

(2) HPC II only supports memory burst length of 4 in full-rate mode.
(3) HPC II only supports memory burst length of 8 in half-rate mode.


Это означает, что при full-rate mode максимально допустимое значение local_size = 2.
То есть будут переданы два двойных слова что составит burst length = 4
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 23 2011, 13:57
Сообщение #17


Местный
***

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



Цитата(warrior-2001 @ Mar 21 2011, 16:53) *
Конкретные глюки описаны в err data на ddr/dd2/dd3 контроллеры. Устраняет разработчик - Altera.
Проверил свои проекты - local_size меняется от 1 до 32. 64 пока не использовал.
Если при отключении чего-то появляются ошибки - я бы копал в эту сторону. Повторюсь, при генерации оставляю precharge на откуп Altera.

Спасибо за дельный совет. Перерыл имеющиеся errata на сайте альтеры и из полезного нарыл:
1. увеличить параметр tRP
2. Вместо настроек CHIP-ROW-BANK-COL использовать CHIP-BANK-ROW-COL (это у меня было с самого начала проекта)
3. Пересобрать проект в Q 10.0

из этого всего я сделал п.1, и это помогло - я отключил опции манипулирования вручную сигналами precharge и refresh, и данные перестали биться.

но вот с п.3 проблема, моя контора итак потратилась на Q 9.1.
А может можно только ядро контроллера заменить как-нить? rolleyes.gif
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Mar 23 2011, 14:55
Сообщение #18


Местный
***

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



Цитата(billidean @ Mar 23 2011, 16:57) *
...
но вот с п.3 проблема, моя контора итак потратилась на Q 9.1.
...

У меня ddr/ddr2 стабильно работает с версией Quartus 9.1 SP2.

Цитата(nmurzin @ Mar 23 2011, 12:28) *
В DataSheet на HPC2 на странице 12 есть таблица

Table 1–3. DDR and DDR2 SDRAM HPC and HPC II Features

Значения, указанные в этой таблице и параметр local_size, о котором я говорил выше, это не одно и то же.
External Memory Interface Handbook Chapter 7: Functional Description—High-Performance Controller II Table 7–1. Burst Length Support и
External Memory Interface Handbook Chapter 7: Functional Description—High-Performance Controller II Top-level Signals Description Table 7–6. Local Interface Signals (Part 2 of 4)
Вам в помощь.

local_size[]- Input - Controls the number of beats in the requested read or write access to
memory, encoded as a binary number. The range of supported Avalon burst
lengths is 1 to 64. The width of this signal is derived based on the burst count
specified in the Local Maximum Burst Count option. With the derived width,
choose a value ranging from 1 to the local maximum burst count specified.


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post
Sergeyrtf
сообщение Apr 1 2011, 08:16
Сообщение #19





Группа: Участник
Сообщений: 13
Регистрация: 30-01-06
Из: Томск
Пользователь №: 13 754



У меня с DDR2 тоже подобные проблемы - в тестовом примере от отладочной платы(циклон 4) использовался HPCI - данные писались/читались практически нормально(очень редко были глюки), поменял на HPCII - начался полный П... - при записи по адресу косячуться данные по соседним адресам. Сам не так давно начал работать с DDR2, посоветовать пока ничего не могу, но всем спасибо за информацию, может что поможет :-)
Go to the top of the page
 
+Quote Post

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

 


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


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