Eskobar 0 22 марта, 2020 Опубликовано 22 марта, 2020 · Жалоба Здравствуйте. Изучаю как создавать свои собственные компоненты в Qsys и немного недопонимаю как обращаться к своим компонентам по интерфейсу Avalon через Nios К примеру есть такой кусок кода описания компонента на Verilog module my_comp ( input wire clk, input wire reset, input wire avalon_slave_write, input wire [1 : 0] avalon_slave_address, output reg [31 : 0] avalon_slave_readdata ); reg a = 32'd10; reg b = 32'd20; reg c = 32'd30; reg d = 32'd40; always @(posedge clk) begin if (avalon_slave_write) begin case (avalon_slave_address) 2'b00: avalon_slave_readdata <= a; 2'b01: avalon_slave_readdata <= b; 2'b10: avalon_slave_readdata <= c; 2'b11: avalon_slave_readdata <= d; endcase end end endmodule Чтобы считать эти данные с моего компонента использую макрос IORD_32DIRECT(MY_COMP_0_BASE, 0) И тут я немного туплю, как правильно читать данные и задавать адрес (avalon_slave_address) к какому регистру я обращаюсь? И каким образом задавать строб avalon_slave_write? Читал спецификацию на этот авалон интерфейс так и не понял как он устанавливается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 2 22 марта, 2020 Опубликовано 22 марта, 2020 (изменено) · Жалоба так для чтения наверное avalon_slave_read нужен, адрес внутри устройства в IORD_32DIRECT вторым аргументом задаётся, то есть IORD_32DIRECT(MY_COMP_0_BASE, avalon_slave_address) Изменено 22 марта, 2020 пользователем gridinp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 41 23 марта, 2020 Опубликовано 23 марта, 2020 · Жалоба В 22.03.2020 в 10:24, Eskobar сказал: Чтобы считать эти данные с моего компонента использую макрос IORD_32DIRECT(MY_COMP_0_BASE, 0) И тут я немного туплю, как правильно читать данные и задавать адрес (avalon_slave_address) к какому регистру я обращаюсь? И каким образом задавать строб avalon_slave_write? Читал спецификацию на этот авалон интерфейс так и не понял как он устанавливается Распределение адресного пространства передается в NIOS II SBT через sopc-файл. Смотрите файл system.h - там должны быть указаны все адреса периферии. Если делать красиво, то для своего собственного периферийного устройства нужна написать HAL API (и забыть об обращениях по прямым адресам, сильно облегчив жизнь для написания приложения под ниос). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться