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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Непонятные глюки в проекте
seldim
сообщение Sep 9 2012, 14:20
Сообщение #16


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



Контроллер работает под управление хоста (в моем случае ПЛИС). Паралельная двунаправленная шина 16 разрядов, входные (для контроллера) сигналы записи и чтения их несколько. Сигнал записи в регист конфигурации контроллера, он в ПЛИС формируется после ресета и только 1 раз, сигнал записи первого слова, второго слова, и сигналы чтения тоже 2 + сигнал выбора приемного ФИФО. Сигналы записи и чтения формируются по прерываниям от контроллера:
Код
/*
Данный модуль обеспечивает формирование сигналов записи и чтения для контроллера HI-3584 при наличии
сигнала готовности, а также внутренных сигналов чтения с мньшей длительностью для достоверного чтения
данных из контроллера HI-3584. Также данный модуль осуществляет контроль исправности входных линий БК
по наличию прерываний от каждого приемника раз в 1 мс.
*/
LIBRARY ieee;    
    use IEEE.Std_logic_1164.all;
    use IEEE.Std_logic_unsigned.all;
    use IEEE.std_logic_arith.all;
    use IEEE.numeric_std.all;


ENTITY int_drv IS        
    
    PORT
        (
            holt_redy        : IN    STD_LOGIC;        -- Входной сигнал готовности HI-3584 к работе
            clk_5_MHz        : IN    STD_LOGIC;    -- Вход частоты 5 МГц            ----|______|------|______|-
            clk_5_MHz_mod    : IN    STD_LOGIC;        -- Вход измененной частоты 5 МГц        ------|___|---------|___|--
            clk_25_MHz        : IN    STD_LOGIC;    -- Вход частоты 25 МГц
            int_tx            : IN    STD_LOGIC;    -- Вход прерывания от передатчика БК
            int_pr1            : IN    STD_LOGIC;    -- Вход прерывания от приемника 1 БК
            int_pr2            : IN    STD_LOGIC;    -- Вход прерывания от приемника 2 БК
            clk_62_5_KHz    : IN    STD_LOGIC;        -- Вход частоты 62.5 КГц
            pl1                : out    std_logic;    -- Выход сигнала записи младшего слова в HI-3584
            pl2                : out    std_logic;    -- Выход сигнала записи старшего слова в HI-3584
            sel                : out    std_logic;    -- Выход сигнала выбора слов при чтении данных из HI-3584
            en1_holt            : out    std_logic;        -- Выход сигнала чтения первого приемника БК
            en2_holt            : out    std_logic;        -- Выход сигнала чтения второго приемника БК
            en1                : out    std_logic;    -- Выход сигнала чтения первого приемника БК (внутренний)
            en2                : out    std_logic;    -- Выход сигнала чтения второго приемника БК (внутренний)
            Line1_ispr        : out    std_logic;        -- Выход исправности первой линии БК
            Line2_ispr        : out    std_logic        -- Выход исправности второй линии БК
        );
    END int_drv;

ARCHITECTURE arhitektura OF int_drv IS

signal         Transmit                : std_logic := '0';    -- признак процеса обслуживания преравания от передатчика
signal         WR_RD_word_count                  : std_LOGIC := '0';    -- счетчик записей и чтений
signal         pl1_in                : std_logic := '1';    
signal         pl2_in                : std_logic := '1';
signal         pr1_read                : std_logic := '0';    -- признак процеса обслуживания преравания от приемника 1
signal         pr2_read                : std_logic := '0';    -- признак процеса обслуживания преравания от приемника 2
signal         int                : std_logic := '0';    -- признак наличия прерываний
signal         sel1                : std_logic := '0';
signal         sel2                : std_logic := '0';                                        
signal         en1_in                : std_logic := '1';
signal         en2_in                : std_logic := '1';
signal         en1_holt_in            : std_logic := '1';
signal         en2_holt_in            : std_logic := '1';
signal         count_pausa_line1    : integer range 0 to 63;
signal         count_pausa_line2    : integer range 0 to 63;

    BEGIN

pl1 <= pl1_in;
pl2 <= pl2_in;

sel <= sel1 or sel2;
en1_holt <= en1_holt_in;
en2_holt <= en2_holt_in;
en1 <= en1_in;
en2 <= en2_in;

-------------------------------------------------------------
-- Контроль исправности линии 1 БК
        PROCESS (clk_62_5_KHz, int_pr1, count_pausa_line1)
            BEGIN
                if int_pr1 = '0' then count_pausa_line1 <= 0;
                    elsif clk_62_5_KHz'EVENT and clk_62_5_KHz = '1' and count_pausa_line1 < 63 THEN
                    count_pausa_line1 <= count_pausa_line1 + 1;
                end if;
            END PROCESS;
Line1_ispr <= '0' when count_pausa_line1 = 63 else '1';

-- Контроль исправности линии 1 БК
        PROCESS (clk_62_5_KHz, int_pr2, count_pausa_line2)
            BEGIN
                if int_pr2 = '0' then count_pausa_line2 <= 0;
                    elsif clk_62_5_KHz'EVENT and clk_62_5_KHz = '1' and count_pausa_line2 < 63 THEN
                    count_pausa_line2 <= count_pausa_line2 + 1;
                end if;
            END PROCESS;
Line2_ispr <= '0' when count_pausa_line2 = 63 else '1';

-------------------------------- Обрабатываем прерывания от Хольта ------------------------------
int <= ( int_tx or not int_pr1 or not int_pr2) and holt_redy; --         

-- Последовательная обработка прерываний передатчик -> приемник 1 -> приемник 2 - > передатчик
        PROCESS (Int, int_tx, int_pr1, int_pr2, clk_5_MHz)
            BEGIN
                if int = '0' then Transmit <= '0'; pr1_read <= '0'; pr2_read <= '0';
                    elsif clk_5_MHz'EVENT and clk_5_MHz = '0' THEN
                        if int_tx = '1' and pr1_read = '0' and pr2_read = '0' then Transmit <= '1';
                                                                                     pr1_read <= '0';
                                                                                     pr2_read <= '0';
                            else if int_pr1 = '0' and pr2_read = '0' then pr1_read <= '1';
                                                                           Transmit <= '0';
                                                                           pr2_read <= '0';
                                else if int_pr2 = '0' then pr2_read <= '1';
                                                                pr1_read <= '0';
                                                                                                                                                Transmit <= '0';
                                                                                                                     else  pr1_read <= '0';
                                            pr2_read <= '0';
                                                                                                                            Тransmit <= '0';
                                end if;
                        end if;
                    end if;
                end if;
            END PROCESS;
-- счетчик записей и чтений        
        PROCESS (int, Transmit, pr1_read, pr2_read, clk_5_MHz)
            BEGIN
                if int = '0' then WR_RD_word_count <= '0';
                    elsif clk_5_MHz'EVENT and clk_5_MHz = '1' and (Transmit = '1' or pr1_read = '1' or pr2_read = '1') THEN
                    WR_RD_word_count <= not WR_RD_word_count;
                end if;
            END PROCESS;

------------------------------- Формируем сигналы записи слов в Хольт ----------------------------------
----- Формируем Pl1, Pl2 ---------------------------------------------------------------------------------
                
        pl1_in <= (WR_RD_word_count or clk_5_MHz or not Transmit or not holt_redy);
        pl2_in <= (not WR_RD_word_count or clk_5_MHz or not Transmit or not holt_redy);

------------------------------ Формируем сигналы чтения из Хольта------------------------------------

        en1_in <= (clk_5_MHz or not pr1_read or not holt_redy);
        en1_holt_in <= (clk_5_MHz_mod or not pr1_read or not holt_redy);
        
        en2_in <= (clk_5_MHz or not pr2_read or not holt_redy);
        en2_holt_in <= (clk_5_MHz_mod or not pr2_read or not holt_redy);
            
        PROCESS (int_pr1, en1_holt_in) -- Второе чтение должно сопровождаться высоким уровнем сигнала sel
            BEGIN
                if int_pr1 = '1' then sel1 <= '0';-- Использовать Int
                    elsif en1_holt_in'EVENT and en1_holt_in = '1' THEN
                    sel1 <= '1';
                end if;
            END PROCESS;

        PROCESS (int_pr2, en2_holt_in) -- Второе чтение должно сопровождаться высоким уровнем сигнала se2
            BEGIN
                if int_pr2 = '1' then sel2 <= '0'; -- Использовать Int
                    elsif en2_holt_in'EVENT and en2_holt_in = '1' THEN
                    sel2 <= '1';
                end if;
            END PROCESS;        
    END arhitektura;


Сброс на контроллер асинхронный. Заложеный в ПЛИС сброс больше требуемого. Дополнительной тактовой частоты на контроллере нет. Для работы используются только сигналы записи и чтения. В общем по прерыванию от передатчика контроллера производятся две записи. Данные это 8 разрядный адрес слова (адрес задан константами), данные с обработки кнопок. Тоесть меняя фильтры в обработчике кнопок могут максимум испортиться данные, а у меня перестает работать все. К сожалению пока не могу полазить сигнал тапом и локализовать место отказа. Собственно поэтому пока и приходится анализировать код.

Сообщение отредактировал seldim - Sep 9 2012, 14:22
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 9 2012, 18:05
Сообщение #17


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(seldim @ Sep 9 2012, 17:20) *
Контроллер работает под управление хоста (в моем случае ПЛИС). Паралельная двунаправленная шина 16 разрядов, входные (для контроллера) сигналы записи и чтения их несколько. Сигнал записи в регист конфигурации контроллера, он в ПЛИС формируется после ресета и только 1 раз, сигнал записи первого слова, второго слова, и сигналы чтения тоже 2 + сигнал выбора приемного ФИФО. Сигналы записи и чтения формируются по прерываниям от контроллера:
Код
/*
Данный модуль обеспечивает формирование сигналов записи и чтения для контроллера HI-3584 при наличии
сигнала готовности, а также внутренных сигналов чтения с мньшей длительностью для достоверного чтения
данных из контроллера HI-3584. Также данный модуль осуществляет контроль исправности входных линий БК
по наличию прерываний от каждого приемника раз в 1 мс.
*/
LIBRARY ieee;    
    use IEEE.Std_logic_1164.all;
    use IEEE.Std_logic_unsigned.all;
    use IEEE.std_logic_arith.all;
    use IEEE.numeric_std.all;


ENTITY int_drv IS        
    
    PORT
        (
            holt_redy        : IN    STD_LOGIC;        -- Входной сигнал готовности HI-3584 к работе
            clk_5_MHz        : IN    STD_LOGIC;    -- Вход частоты 5 МГц            ----|______|------|______|-
            clk_5_MHz_mod    : IN    STD_LOGIC;        -- Вход измененной частоты 5 МГц        ------|___|---------|___|--
            clk_25_MHz        : IN    STD_LOGIC;    -- Вход частоты 25 МГц
            int_tx            : IN    STD_LOGIC;    -- Вход прерывания от передатчика БК
            int_pr1            : IN    STD_LOGIC;    -- Вход прерывания от приемника 1 БК
            int_pr2            : IN    STD_LOGIC;    -- Вход прерывания от приемника 2 БК
            clk_62_5_KHz    : IN    STD_LOGIC;        -- Вход частоты 62.5 КГц
            pl1                : out    std_logic;    -- Выход сигнала записи младшего слова в HI-3584
            pl2                : out    std_logic;    -- Выход сигнала записи старшего слова в HI-3584
            sel                : out    std_logic;    -- Выход сигнала выбора слов при чтении данных из HI-3584
            en1_holt            : out    std_logic;        -- Выход сигнала чтения первого приемника БК
            en2_holt            : out    std_logic;        -- Выход сигнала чтения второго приемника БК
            en1                : out    std_logic;    -- Выход сигнала чтения первого приемника БК (внутренний)
            en2                : out    std_logic;    -- Выход сигнала чтения второго приемника БК (внутренний)
            Line1_ispr        : out    std_logic;        -- Выход исправности первой линии БК
            Line2_ispr        : out    std_logic        -- Выход исправности второй линии БК
        );
    END int_drv;

ARCHITECTURE arhitektura OF int_drv IS

signal         Transmit                : std_logic := '0';    -- признак процеса обслуживания преравания от передатчика
signal         WR_RD_word_count                  : std_LOGIC := '0';    -- счетчик записей и чтений
signal         pl1_in                : std_logic := '1';    
signal         pl2_in                : std_logic := '1';
signal         pr1_read                : std_logic := '0';    -- признак процеса обслуживания преравания от приемника 1
signal         pr2_read                : std_logic := '0';    -- признак процеса обслуживания преравания от приемника 2
signal         int                : std_logic := '0';    -- признак наличия прерываний
signal         sel1                : std_logic := '0';
signal         sel2                : std_logic := '0';                                        
signal         en1_in                : std_logic := '1';
signal         en2_in                : std_logic := '1';
signal         en1_holt_in            : std_logic := '1';
signal         en2_holt_in            : std_logic := '1';
signal         count_pausa_line1    : integer range 0 to 63;
signal         count_pausa_line2    : integer range 0 to 63;

    BEGIN

pl1 <= pl1_in;
pl2 <= pl2_in;

sel <= sel1 or sel2;
en1_holt <= en1_holt_in;
en2_holt <= en2_holt_in;
en1 <= en1_in;
en2 <= en2_in;

-------------------------------------------------------------
-- Контроль исправности линии 1 БК
        PROCESS (clk_62_5_KHz, int_pr1, count_pausa_line1)
            BEGIN
                if int_pr1 = '0' then count_pausa_line1 <= 0;
                    elsif clk_62_5_KHz'EVENT and clk_62_5_KHz = '1' and count_pausa_line1 < 63 THEN
                    count_pausa_line1 <= count_pausa_line1 + 1;
                end if;
            END PROCESS;
Line1_ispr <= '0' when count_pausa_line1 = 63 else '1';

-- Контроль исправности линии 1 БК
        PROCESS (clk_62_5_KHz, int_pr2, count_pausa_line2)
            BEGIN
                if int_pr2 = '0' then count_pausa_line2 <= 0;
                    elsif clk_62_5_KHz'EVENT and clk_62_5_KHz = '1' and count_pausa_line2 < 63 THEN
                    count_pausa_line2 <= count_pausa_line2 + 1;
                end if;
            END PROCESS;
Line2_ispr <= '0' when count_pausa_line2 = 63 else '1';

-------------------------------- Обрабатываем прерывания от Хольта ------------------------------
int <= ( int_tx or not int_pr1 or not int_pr2) and holt_redy; --         

-- Последовательная обработка прерываний передатчик -> приемник 1 -> приемник 2 - > передатчик
        PROCESS (Int, int_tx, int_pr1, int_pr2, clk_5_MHz)
            BEGIN
                if int = '0' then Transmit <= '0'; pr1_read <= '0'; pr2_read <= '0';
                    elsif clk_5_MHz'EVENT and clk_5_MHz = '0' THEN
                        if int_tx = '1' and pr1_read = '0' and pr2_read = '0' then Transmit <= '1';
                                                                                     pr1_read <= '0';
                                                                                     pr2_read <= '0';
                            else if int_pr1 = '0' and pr2_read = '0' then pr1_read <= '1';
                                                                           Transmit <= '0';
                                                                           pr2_read <= '0';
                                else if int_pr2 = '0' then pr2_read <= '1';
                                                                pr1_read <= '0';
                                                                                                                                                Transmit <= '0';
                                                                                                                     else  pr1_read <= '0';
                                            pr2_read <= '0';
                                                                                                                            Тransmit <= '0';
                                end if;
                        end if;
                    end if;
                end if;
            END PROCESS;
-- счетчик записей и чтений        
        PROCESS (int, Transmit, pr1_read, pr2_read, clk_5_MHz)
            BEGIN
                if int = '0' then WR_RD_word_count <= '0';
                    elsif clk_5_MHz'EVENT and clk_5_MHz = '1' and (Transmit = '1' or pr1_read = '1' or pr2_read = '1') THEN
                    WR_RD_word_count <= not WR_RD_word_count;
                end if;
            END PROCESS;

------------------------------- Формируем сигналы записи слов в Хольт ----------------------------------
----- Формируем Pl1, Pl2 ---------------------------------------------------------------------------------
                
        pl1_in <= (WR_RD_word_count or clk_5_MHz or not Transmit or not holt_redy);
        pl2_in <= (not WR_RD_word_count or clk_5_MHz or not Transmit or not holt_redy);

------------------------------ Формируем сигналы чтения из Хольта------------------------------------

        en1_in <= (clk_5_MHz or not pr1_read or not holt_redy);
        en1_holt_in <= (clk_5_MHz_mod or not pr1_read or not holt_redy);
        
        en2_in <= (clk_5_MHz or not pr2_read or not holt_redy);
        en2_holt_in <= (clk_5_MHz_mod or not pr2_read or not holt_redy);
            
        PROCESS (int_pr1, en1_holt_in) -- Второе чтение должно сопровождаться высоким уровнем сигнала sel
            BEGIN
                if int_pr1 = '1' then sel1 <= '0';-- Использовать Int
                    elsif en1_holt_in'EVENT and en1_holt_in = '1' THEN
                    sel1 <= '1';
                end if;
            END PROCESS;

        PROCESS (int_pr2, en2_holt_in) -- Второе чтение должно сопровождаться высоким уровнем сигнала se2
            BEGIN
                if int_pr2 = '1' then sel2 <= '0'; -- Использовать Int
                    elsif en2_holt_in'EVENT and en2_holt_in = '1' THEN
                    sel2 <= '1';
                end if;
            END PROCESS;        
    END arhitektura;


Сброс на контроллер асинхронный. Заложеный в ПЛИС сброс больше требуемого. Дополнительной тактовой частоты на контроллере нет. Для работы используются только сигналы записи и чтения. В общем по прерыванию от передатчика контроллера производятся две записи. Данные это 8 разрядный адрес слова (адрес задан константами), данные с обработки кнопок. Тоесть меняя фильтры в обработчике кнопок могут максимум испортиться данные, а у меня перестает работать все. К сожалению пока не могу полазить сигнал тапом и локализовать место отказа. Собственно поэтому пока и приходится анализировать код.

на какой частоте работает ПЛИС и контроллер HI-3584? Где данные частоты в процессах? Вы асинхронную логику пытаетесь описать? Если да то плохая идея....
Какие сигналы приходят в ПЛИС?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 10 2012, 05:48
Сообщение #18


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



Вроде уже писал. Запись данных в контроллер синхронизируется сигналами записи, Чтение синхронизируется сигналами чтения. Дополнительных частот синхронизации у контроллера не предусмотренно. Временные характеристики сигналов чтения и записи, которые формируются в ПЛИС соответствуют требованиям на контроллер. Сигналы записив контроллер : PL1 - для младших 16 бит, Pl2- для старших 16 бит. Сигналы чтения : En1 - сигнал чтения первого буфера, En2 - сигнал чтения второго буфера (вроде в коде все они описаны). Сигналы должны идти низким уровнем. Данные получаю так :
Код
/*
Данный модуль обеспечивает управление шиной данных между контроллером HI-3584 и ПЛИС
*/
LIBRARY ieee;    
    use IEEE.Std_logic_1164.all;
    use IEEE.Std_logic_unsigned.all;
    use IEEE.std_logic_arith.all;
    use IEEE.numeric_std.all;


ENTITY bus_drv IS        
    
    PORT    
        (
            clk_25_MHz        : in    std_logic;        -- входная частота 25 МГц
            cwstr                : in    std_logic;        -- сигнал записи в конфигурационный регистр HI-3584
            pl1                : in    std_logic;        -- сигнал записи младшего слова в HI-3584
            pl2                : in    std_logic;        -- сигнал записи старшего слова в HI-3584
            en1                : in    std_logic;        -- сигнал чтения слова из первого приемника БК HI-3584
            en2                : in    std_logic;        -- сигнал чтения слова из второго приемника БК HI-3584
            sel                : in    std_logic;        -- сигнал выбора старшего / младшего слова при чтении из приемников
            word1                : in    std_logic_vector (31 downto 0);    -- первое слово для передатчика
            word2                : in    std_logic_vector (31 downto 0);    -- второе слово для передатчика
            word3                : in    std_logic_vector (31 downto 0);    -- третье слово для передатчика
            word4                : in    std_logic_vector (31 downto 0);    -- четвертое слово для передатчика
            Data_in_out        : inout    std_logic_vector (15 downto 0);     -- шина данных
            Data_pr1            : out    std_logic_vector (31 downto 0);         -- данные принятые от первого приемника
            Data_pr2            : out    std_logic_vector (31 downto 0)        -- данные принятые от второго приемника
        );
    END bus_drv;

ARCHITECTURE arhitektura OF bus_drv IS
signal         holt_wr                : std_logic;             -- признак любой записи в контроллер HI-3584
signal         Buf_out                : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер для записи в HI-3584
signal         Buf_pr1_1            : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер младшего слова Пр 1
signal         Buf_pr1_2            : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер старшего слова Пр 1
signal         Buf_pr2_1            : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер младшего слова Пр 2
signal         Buf_pr2_2            : std_logic_vector (15 downto 0):= (Others => '0'); -- буфер старшего слова Пр 2
signal         pl_count            : integer range 0 to 3; -- счетчик слов записаных в HI-3584
    BEGIN

data_in_out <= buf_out when holt_wr = '0' else "ZZZZZZZZZZZZZZZZ";
Data_pr1(15 downto 0) <= Buf_pr1_1(15 downto 0);
Data_pr1(31 downto 16) <= Buf_pr1_2(15 downto 0);
Data_pr2(15 downto 0) <= Buf_pr2_1(15 downto 0);
Data_pr2(31 downto 16) <= Buf_pr2_2(15 downto 0);

------ Любая запись в HI-3584 формирует сигнал holt_wr имеющий сдвинутый нарастающий фронт-----
        PROCESS (clk_25_MHz, cwstr, pl1, pl2 )
            BEGIN
                if cwstr = '0' or pl1 = '0' or pl2 = '0' then holt_wr <= '0';
                elsif clk_25_MHz'EVENT and clk_25_MHz = '0' THEN
                    holt_wr <= '1';
                end if;
            END PROCESS;        
    
-- Процес подсчета выдаваемых слов
        PROCESS (cwstr, pl2)
            BEGIN
                if cwstr = '0' then pl_count <= 0;    
                    elsif pl2'EVENT and pl2 = '1' THEN
                      if pl_count = 3 then pl_count <= 0;
                      else pl_count <= pl_count + 1;
                      end if;
                end if;
            END PROCESS;

------------------------------- формирование буфера для записи в HI-3584 --------------------------------------------         
        PROCESS (Holt_wr,  cwstr, pl1, pl2)
            BEGIN
                if Holt_wr'EVENT and Holt_wr = '0' THEN
                    if cwstr = '0' then Buf_out <= X"8030";
                        else if pl_count = 0 and pl1 = '0' then Buf_out(15 downto 0) <= word1(15 downto 0);
                            else if pl_count = 0 and pl2 = '0' then Buf_out(15 downto 0) <= word1(31 downto 16);
                                else if pl_count = 1 and pl1 = '0' then Buf_out(15 downto 0) <= word2(15 downto 0);
                                    else if pl_count = 1 and pl2 = '0' then Buf_out(15 downto 0) <= word2(31 downto 16);
                                        else if pl_count = 2 and pl1 = '0' then Buf_out(15 downto 0) <= word3(15 downto 0);
                                            else if pl_count = 2 and pl2 = '0' then Buf_out(15 downto 0) <= word3(31 downto 16);
                                                else if pl_count = 3 and pl1 = '0' then Buf_out(15 downto 0) <= word4(15 downto 0);
                                                    else if pl_count = 3 and pl2 = '0'  then Buf_out(15 downto 0) <= word4(31 downto 16);
                                                    end if;
                                                end if;
                                            end if;
                                        end if;
                                    end if;
                                end if;
                            end if;
                        end if;
                    end if;
                end if;
            END PROCESS;
            
------------------------------ Чтение данных из HI-3584 ------------------------------------------------
        PROCESS (en1, sel)
            BEGIN
                if en1'EVENT and en1 = '1' and sel = '0' THEN
                    Buf_pr1_1 <= Data_in_out;
                end if;
            END PROCESS;
        PROCESS (en1, sel)
            BEGIN
                if en1'EVENT and en1 = '1' and sel = '1' THEN
                    Buf_pr1_2 <= Data_in_out;
                end if;
            END PROCESS;
        
        
        PROCESS (en2, sel)
            BEGIN
                if en2'EVENT and en2 = '1' and sel = '0' THEN
                    Buf_pr2_1 <= Data_in_out;
                end if;
            END PROCESS;
        PROCESS (en2, sel)
            BEGIN
                if en2'EVENT and en2 = '1' and sel = '1' THEN
                    Buf_pr2_2 <= Data_in_out;
                end if;
            END PROCESS;    
    
    
    END arhitektura;


Сообщение отредактировал seldim - Sep 10 2012, 05:52
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 10 2012, 07:13
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



У вас получилась асинхронная схема (или синхронная с множеством клоковых доменов и без каких либо CDC цепей). Работать не будет sad.gif
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 10 2012, 07:35
Сообщение #20


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



Для исключения метастабильности используются разные сигналы чтения для контроллера и для ПЛИС. Сигналы которые идут на контроллер дольше стоят в низком уровне. Для этого использую две частоты 5 МГц. Частоты 5 МГц и 5Мгц с измененной скважностью делаю на PLL. В коде обработчика прерываний в коментариях они условно прорисованы только сдвинулись при вставке. При записи в контроллер делаю задержку данных на шине с помощью частоты 25 МГц. картинки хорошие.

Думаю что пока не пройдусь сигнал тапом гадать бесполезно

Сообщение отредактировал seldim - Sep 10 2012, 07:33
Go to the top of the page
 
+Quote Post
sazh
сообщение Sep 10 2012, 07:58
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(seldim @ Sep 10 2012, 10:35) *
Для исключения метастабильности используются разные сигналы чтения для контроллера и для ПЛИС. Сигналы которые идут на контроллер дольше стоят в низком уровне. Для этого использую две частоты 5 МГц. Частоты 5 МГц и 5Мгц с измененной скважностью делаю на PLL. В коде обработчика прерываний в коментариях они условно прорисованы только сдвинулись при вставке. При записи в контроллер делаю задержку данных на шине с помощью частоты 25 МГц. картинки хорошие.

Думаю что пока не пройдусь сигнал тапом гадать бесполезно

Здесь никто Вам не поможет. Меняйте стиль проектитрования (налепить 5 тактовых клока в одном проекте). Весь этот arinc-429 делается параметризированным на любой системной частоте Вашего процессора.
Все эти контроллеры делаются только для навесна прямо на шину процессора или микроконтроллера.
Приемники передатчики на плис arinc 429 на делать самому и вешать на драйвера hi8588, hi8585
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Sep 10 2012, 12:35
Сообщение #22


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

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



to seldim. Сброс на логику блока управления записью/чтения - их много и они по описанию синхронные
Код
PROCESS (clk_62_5_KHz, int_pr2, count_pausa_line2)
            BEGIN
                if int_pr2 = '0' then count_pausa_line2 <= 0;
                    elsif clk_62_5_KHz'EVENT


Но не это главное. Тут сплошная аснихронщина.Сигнал pr1_read формируется на частоте clk_5_MHz. Сигнал en1_holt_in таким образом получается совместным от clk_5_MHz, clk_5_MHz_mod и holt_redy, а далее используется в качестве тактовой для sel1 (и опять же сброс там int_pr1). Она же дальше сама будет использоваться тактовой. Тут суммарно не 5 частот (в моем понимании), а 20 будет. И они не описаны в TQ, сам квартус их не пустит по линиям чатот, а логику распихает как фишка ляжет. И, возможно, это и будет работать как-то, вследсвие малых частот, но работать будет нестабильно.
Советую избавляться от асинхронщины и перейти к меньшему кол-ву частот. Почитать для начала статьи Каршенбойма "краткий курс hdl" http://www.kit-e.ru/articles/circuit/2009_02_102.php
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 10 2012, 17:46
Сообщение #23


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



Насчет контроллера внутри ПЛИС с объвязкой из драйверов думал, но когда разводил плату боялся, что не успею реализовать, и заложил их в обычном макете, а результат макет работает а это изделие окозалось проблемным.А с асинхронщиной буду думать, что делать.
Go to the top of the page
 
+Quote Post
sazh
сообщение Sep 11 2012, 07:11
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(seldim @ Sep 10 2012, 20:46) *
А с асинхронщиной буду думать, что делать.


Открываете handbook и в разделе Recommended Design Practices получаете рабочие рекомендации.
По сути все Ваши вторичные клоки надо преобразовать в ena для основного клока.
Для примера

Прикрепленные файлы
Прикрепленный файл  mail_out.rar ( 307.79 килобайт ) Кол-во скачиваний: 17
 
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 12 2012, 05:15
Сообщение #25


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



Спасибо посмотрю.

Реализацию контроллеров аринга в ПЛИС я уже сделал, но старую реализацию надо довести до конца.
Go to the top of the page
 
+Quote Post
seldim
сообщение Sep 17 2012, 04:56
Сообщение #26


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

Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142



Всем откликнувшимся хочу сказать огромное спасибо, особенно sazh за ссылочку Recommended Design Practices. Переделал полностью управление контроллером на чатоту 5 МГц. Остальные схемы перевел на одну чатоту и сделал переходы между доменами. Результат - все заработало с первого включения.
Вроде переосмыслил свое понимание синхронных схем.
Go to the top of the page
 
+Quote Post

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

 


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


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