с портами
Код
port (
-- Avalon Slave
clk : in std_logic := '0'; -- clock.clk
reset_n : in std_logic := '0'; -- .reset_n
avs_s0_address : in std_logic_vector(1 downto 0) := (others => '0'); -- s0.address
avs_s0_read_n : in std_logic := '0'; -- .read_n
avs_s0_write_n : in std_logic := '0'; -- .write_n
avs_s0_writedata : in std_logic_vector(15 downto 0) := (others => '0'); -- .writedata
avs_s0_byteenable : in std_logic_vector(1 downto 0) := (others => '0');
avs_s0_readdata : out std_logic_vector(15 downto 0); -- .readdata
ins_irq0_irq : out std_logic;
-- Avalon Source
aso_out0_ready : in std_logic := '0'; -- .ready
aso_out0_data : out std_logic_vector(15 downto 0); -- out0.data
aso_out0_valid : out std_logic; -- .valid
......................................................и т. д.
В пользовательской логике имеется такая конструкция (VHDL) -- Avalon Slave
clk : in std_logic := '0'; -- clock.clk
reset_n : in std_logic := '0'; -- .reset_n
avs_s0_address : in std_logic_vector(1 downto 0) := (others => '0'); -- s0.address
avs_s0_read_n : in std_logic := '0'; -- .read_n
avs_s0_write_n : in std_logic := '0'; -- .write_n
avs_s0_writedata : in std_logic_vector(15 downto 0) := (others => '0'); -- .writedata
avs_s0_byteenable : in std_logic_vector(1 downto 0) := (others => '0');
avs_s0_readdata : out std_logic_vector(15 downto 0); -- .readdata
ins_irq0_irq : out std_logic;
-- Avalon Source
aso_out0_ready : in std_logic := '0'; -- .ready
aso_out0_data : out std_logic_vector(15 downto 0); -- out0.data
aso_out0_valid : out std_logic; -- .valid
......................................................и т. д.
Код
process(clk)
begin
if (falling_edge(clk)) then
if(avs_s0_address = "00" and avs_s0_write_n = '0') then
if(avs_s0_writedata = "0000000000000001") then
s_aso_out0_ready <= '1';
elsif (avs_s0_writedata = "0000000000000000") then
s_aso_out0_ready <= '0';
end if;
end if;
end if;
end process;
begin
if (falling_edge(clk)) then
if(avs_s0_address = "00" and avs_s0_write_n = '0') then
if(avs_s0_writedata = "0000000000000001") then
s_aso_out0_ready <= '1';
elsif (avs_s0_writedata = "0000000000000000") then
s_aso_out0_ready <= '0';
end if;
end if;
end if;
end process;
В программе Nios запись для установки s_aso_out0_ready в 1 делаю так
Код
#define IOWR_ALTERA_AVALON_PUSK(base) IOWR_32DIRECT(base, 0, 0x0001);
#define IOWR_ALTERA_AVALON_STOP(base) IOWR_32DIRECT(base, 0, 0x0000);
IOWR_ALTERA_AVALON_PUSK(0x00000010);
Delay(0x0002);
IOWR_ALTERA_AVALON_STOP(0x00000010);
Delay(0x000f);
#define IOWR_ALTERA_AVALON_STOP(base) IOWR_32DIRECT(base, 0, 0x0000);
IOWR_ALTERA_AVALON_PUSK(0x00000010);
Delay(0x0002);
IOWR_ALTERA_AVALON_STOP(0x00000010);
Delay(0x000f);
Все работает.
Но как теперь сделать то же только по адресу avs_s0_address = "01" ?
Не врубаюсь, что теперь нужно менять в IOWR_ALTERA_AVALON_PUSK(base) IOWR_32DIRECT(base, 0, 0x0001);
смещение или базовый адрес...или еще как-то