Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Qsys - вопрос по распределению адресного пространства
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
sv_brothers
Добрый день всем. Вот решил немного "поковырять" Qsys, чтобы посмотреть что за зверь такой. Решил идти от простого - создание своих простеньких пользовательских компонентов (Master и Slave), дабы разобраться в спецификации интерфейса Avalon. Так вот создал я два компонента:
1. Slave - представляет собой память с интерфейсом:

Код
entity ram is
    port
    (
            clk              : in std_logic;
                reset           : in std_logic;
            rd               : in std_logic;
            wr               : in std_logic;
            address       : in std_logic_vector(7 downto 0);
            wrdata        : in std_logic_vector(31 downto 0);
            rddata         : out std_logic_vector(31 downto 0);
            waitrequest  : out std_logic
    );
end entity;


2. Master - представляет собой FSM, который будет записывать/вычитывать данные из подчиненного устройства по некоторому (неважно какому алгоритму). Интерфес Master`а:

Код
entity master is     
    port
    (
        clk               : in std_logic;
        reset            : in std_logic;
        waitrequest  : in    std_logic;
        rddata          : in std_logic_vector(31 downto 0);
        rd                : out std_logic;
        wr                : out std_logic;
        address        : out std_logic_vector(7 downto 0);
        wrdata         : out std_logic_vector(31 downto 0);
                q_out           : out std_logic_vector(31 downto 0)   -- будет Conduit
    );    
end entity master;


Так вот вопрос самый первый. Почему при добавлении RAM (slave) Qsys определяет для него адресное пространство в пределах от 0x00000000 - 0x000003FF? Вроде как разрядность адреса (8 бит) не позволяет адресоваться в пределах заданного адресного пространства. Понимаю, что, возможно, ответ на вопрос лежит где-то в этом куске спецификации для сигнала address, но пока не могу понять:

Цитата
For masters, the address signal represents a byte address. The
value of the address must be aligned to the data width. To write to
specific bytes within a data word, the master must use the
byteenable signal.
For slaves, the interconnect translates the byte address into a
word address in the slave’s address space so that each slave
access is for a word of data from the perspective of the slave. For
example, address= 0 selects the first word of the slave and
address 1 selects the second word of the slave.


Необходимо ли в моем проекте сигнал byteenable (вернее так: является ли он обязательным?).
Пока это первые вопросы. Хотелось бы получить на них ответ, а потом идти уже дальше.
vadimuzzz
Цитата(sv_brothers @ Sep 26 2011, 18:29) *
Так вот вопрос самый первый. Почему при добавлении RAM (slave) Qsys определяет для него адресное пространство в пределах от 0x00000000 - 0x000003FF? Вроде как разрядность адреса (8 бит) не позволяет адресоваться в пределах заданного адресного пространства.

у вас 256 32-битных слов, как раз 1024 байта
Цитата
Необходимо ли в моем проекте сигнал byteenable (вернее так: является ли он обязательным?).

нет, не обязательно.

а изучение шины лучше начинать со спецификаций, там про все сигналы и их (не)нужность сказано
sv_brothers
Цитата(vadimuzzz @ Sep 27 2011, 05:10) *
у вас 256 32-битных слов, как раз 1024 байта


Да, спасибо, тут я немножко сам "протупил", запутался в разрядности шины адреса и забыл про разрядность хранимых данных.

Цитата(vadimuzzz @ Sep 27 2011, 05:10) *
нет, не обязательно.

а изучение шины лучше начинать со спецификаций, там про все сигналы и их (не)нужность сказано


Вроде как со спецификации и начал.

Столкнулся еще с одной проблемой - при задании разрядности шины данных и шины адреса (writedata, readdata, address) через параметры (в секции GENERIC) для пользовательского компонента. Например так:

Код
entity ram is
    generic
    (
        DATA_WIDTH : natural := 32;
        ADDR_WIDTH : natural := 8
    );
    port
    (
                ................................................................
        address    : in std_logic_vector(ADDR_WIDTH-1 downto 0);
        wrdata    : in std_logic_vector(DATA_WIDTH-1 downto 0);
        rddata    : out std_logic_vector(DATA_WIDTH-1 downto 0);
        .................................................................
    );
end entity;


Получаю в QSys ошибку:

Error: avalon_slave_0: Signal rddata[-1] must be a multiple of the symbol width 8
Error: avalon_slave_0: Signal wrdata[-1] must be a multiple of the symbol width 8

Хотя на вкладке HDL-parametres параметры отображаются корректно...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.