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

 
 
> Простой шаблон AXI4-lite master, буду весьма признателен за оный
count_enable
сообщение Jan 21 2014, 13:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Сейчас перекраиваю пример код от Xilinx под себя, и идёт мне... ну в общем медленно дело движется. Нужен простой мастер, который по получении внешнего прерывания читает данные из внешней памяти. Т.е. алгоритм такой.
0-Резет
1-Код, исполняемый на процессоре записывает в мастер адрес, откуда мастер будет брать данные и адрес, куда мастер будет писать флаг конца чтения.
2-Мастер заполняет флаг паттерном типа АВАВАВАВ
3-Мастер ждёт прерывания на внешнем порту.
4-После прерывания мастер читает слово из адреса в DDR3 и записывает флаг другим паттерном - 0С0С0С0С
5-GOTO 3.

Буду весьма признателен за простой код мастера на AXI4, потому что в примере от Хилинха и слейв, и locallink, и фифо, и куча внутренних флагов, и всё в одном файле.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
count_enable
сообщение Jan 24 2014, 18:44
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Конечно поделюсь, только закончу еще слейв-часть. Пока что виснет, паскуда и не могу понять почему. В Isim все работает, но не использую Xilinxoвую модель, а дергаю шину вручную.

Слейв Акси-лайт, т.е одно слово. Два регистра. В симуляторе норм, вживую не поднимается в 1 S_AXI_AWREADY. Таймаут по шине не приходит, система тупо висит.

Код
---------------------------------------------------------
WRITE_PROC: process(M_AXI_ACLK) is
begin
if M_AXI_ARESETN='0' then
        conf_reg<=(others=>'0');
        addr_reg<=(others=>'0');
else
    if M_AXI_ACLK'event and M_AXI_ACLK='1' then
        case W_state is
            when ST_IDLE=>
                    if    S_AXI_AWVALID='1' then
                        S_AXI_AWREADY<='1';
                        W_state<=ST_WRITE;
                    end if;
            when ST_WRITE=>
                    S_AXI_AWREADY<='0';
                    S_AXI_WREADY<='1';
                    if S_AXI_WVALID='1' then
                        if S_AXI_AWADDR(0)='0' then
                            conf_reg<=S_AXI_WDATA;
                        else
                            addr_reg<=S_AXI_WDATA;
                        end if;
                        W_state<=ST_CONFIRM;
                    end if;
                when ST_CONFIRM=>
                    S_AXI_BRESP<="00";
                    S_AXI_WREADY<='0';
                    S_AXI_BVALID<='1';
                    if S_AXI_BREADY='1' then
                        S_AXI_BVALID<='0';
                        W_state<=ST_IDLE;
                    end if;            
        end case;
    end if;
end if;
end process;





ДОБАВЛЕНО:
Ёрш твою медь, есть ли где-то вменяемая времянка записи в Axi-lite? У меня проц почему-то первым делом BREADY поднимает.

Сообщение отредактировал count_enable - Jan 24 2014, 18:45
Go to the top of the page
 
+Quote Post



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

 


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


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