backdoor_64 0 18 мая, 2016 Опубликовано 18 мая, 2016 · Жалоба Здравствуйте, я новичек, прошу вашей помощи. На Spartan6 создал ядро MicroBlaze и контроллер памяти BRAM, один порт которого смотрит в MicroBlaze, второй доступен в ПЛИС. Из софт ядра я пишу данные в BRAM, а в ПЛИС соответственно мне представлен интерфейс для работы с памятью: component microblaze is port ( fpga_0_clk_1_sys_clk_pin : in std_logic; fpga_0_rst_1_sys_rst_pin : in std_logic; custom_bram_block_0_BRAM_Rst_B_pin : in std_logic; custom_bram_block_0_BRAM_Clk_B_pin : in std_logic; custom_bram_block_0_BRAM_EN_B_pin : in std_logic; custom_bram_block_0_BRAM_WEN_B_pin : in std_logic_vector(3 downto 0); custom_bram_block_0_BRAM_Addr_B_pin : in std_logic_vector(31 downto 0); custom_bram_block_0_BRAM_Din_B_pin : out std_logic_vector(31 downto 0); custom_bram_block_0_BRAM_Dout_B_pin : in std_logic_vector(31 downto 0) ); end component; Здесь шина адреса BRAM_Addr_B_pin является вектором и вопрос в том, как мне в этот вектор записывать различные адреса, ведь напрямую подставлять нельзя, возникает ошибка "Signal ... is connected to following multiple drivers" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kira66 0 18 мая, 2016 Опубликовано 18 мая, 2016 · Жалоба Здравствуйте, я новичек, прошу вашей помощи. На Spartan6 создал ядро MicroBlaze и контроллер памяти BRAM, один порт которого смотрит в MicroBlaze, второй доступен в ПЛИС. Из софт ядра я пишу данные в BRAM, а в ПЛИС соответственно мне представлен интерфейс для работы с памятью: component microblaze is port ( fpga_0_clk_1_sys_clk_pin : in std_logic; fpga_0_rst_1_sys_rst_pin : in std_logic; custom_bram_block_0_BRAM_Rst_B_pin : in std_logic; custom_bram_block_0_BRAM_Clk_B_pin : in std_logic; custom_bram_block_0_BRAM_EN_B_pin : in std_logic; custom_bram_block_0_BRAM_WEN_B_pin : in std_logic_vector(3 downto 0); custom_bram_block_0_BRAM_Addr_B_pin : in std_logic_vector(31 downto 0); custom_bram_block_0_BRAM_Din_B_pin : out std_logic_vector(31 downto 0); custom_bram_block_0_BRAM_Dout_B_pin : in std_logic_vector(31 downto 0) ); end component; Здесь шина адреса BRAM_Addr_B_pin является вектором и вопрос в том, как мне в этот вектор записывать различные адреса, ведь напрямую подставлять нельзя, возникает ошибка "Signal ... is connected to following multiple drivers" А какие following multiple drivers ? Могу только предположить, что система вывела адрес на внешний пин и вставила туда буфер ввода, который замыкается с вашим сигналом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
backdoor_64 0 18 мая, 2016 Опубликовано 18 мая, 2016 · Жалоба А какие following multiple drivers ? Могу только предположить, что система вывела адрес на внешний пин и вставила туда буфер ввода, который замыкается с вашим сигналом. ну вот я например хочу читать сперва по одному адресу BRAM_Addr <= x"81818010"; а потом по другому BRAM_Addr <= x"818180120"; вот и получается multiple drivers. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 18 мая, 2016 Опубликовано 18 мая, 2016 · Жалоба ну вот я например хочу читать сперва по одному адресу BRAM_Addr <= x"81818010"; а потом по другому BRAM_Addr <= x"818180120"; вот и получается multiple drivers. Покажите лучше код, так будет понятнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
backdoor_64 0 18 мая, 2016 Опубликовано 18 мая, 2016 · Жалоба Покажите лучше код, так будет понятнее. process (trigger) if trigger = '1' and trigger'event then BRAM_En <= '1'; BRAM_WEN <= b"0000"; BRAM_Addr <= x"81818010"; noise_mask (31 downto 0) <= BRAM_Dout; BRAM_Addr <= x"81818014"; noise_mask (63 downto 32) <= BRAM_Dout; BRAM_Addr <= x"81818018"; noise_mask (95 downto 64) <= BRAM_Dout; BRAM_Addr <= x"8181800С"; noise_mask (127 downto 96) <= BRAM_Dout; end if; end process; хочу по разным адресам из BRAM считать значения и записать их в вектор noise_mask, но вектору BRAM_Addr можно присваивать только один источник, о чем говорит синтезатор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 18 мая, 2016 Опубликовано 18 мая, 2016 · Жалоба process (trigger) if trigger = '1' and trigger'event then BRAM_En <= '1'; BRAM_WEN <= b"0000"; BRAM_Addr <= x"81818010"; noise_mask (31 downto 0) <= BRAM_Dout; BRAM_Addr <= x"81818014"; noise_mask (63 downto 32) <= BRAM_Dout; BRAM_Addr <= x"81818018"; noise_mask (95 downto 64) <= BRAM_Dout; BRAM_Addr <= x"8181800С"; noise_mask (127 downto 96) <= BRAM_Dout; end if; end process; хочу по разным адресам из BRAM считать значения и записать их в вектор noise_mask, но вектору BRAM_Addr можно присваивать только один источник, о чем говорит синтезатор. Код, мягко говоря, странный. Если одному и тому же сигналу в процессе присваиваются разные значения, то на выходе он будет иметь последнее из присвоенных, остальные проигнорируются, т.е то, что вы пытаетесь сделать таким образом не описывается. Но с другой стороны это не должно давать ошибку, возможно вы еще где-то используете этот сигнал? По поводу того, как сделать то, что вы пытаетесь, сделайте либо стейт-машину, либо заведите в процессе счетчик от нуля до 3 и свяжите его с выставляемым адресом. Кроме того, лучше все сделать на каком-нибудь клоке, а не как у вас. На клоке выделить нужный фронт, по нему запустить счетчик, последовательно опросить адреса, затем через ЗАДЕРЖКУ памяти записать значения, выдать флаг готовности. Ну или как-то так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 22 мая, 2016 Опубликовано 22 мая, 2016 · Жалоба Мне не понятна суть вопроса? Я создавал контроллер BRAM и двухпортовую память на BRAM. Один порт к Microblaze второй к ПЛИС. Eclips создает файл заголовков в котором есть базовый адрес BRAM. Создаете указатель на базовый адрес и обращаетесь по нему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться