玩转赛灵思Zedboard开发板(5):基于AXI Lite总线的从设备IP设计
-------------
10
11 -- DO NOT EDIT BELOW THIS LINE ---------------------
12 -- Bus protocol parameters, do not add to or delete
13 C_NUM_REG : integer := 1;
14 C_SLV_DWIDTH : integer := 32
15 -- DO NOT EDIT ABOVE THIS LINE ---------------------
16 );
17 port
18 (
19 -- ADD USER PORTS BELOW THIS LINE ------------------
20 LED : out std_logic_vector(7 downto 0);
21 -- ADD USER PORTS ABOVE THIS LINE ------------------
22
23 -- DO NOT EDIT BELOW THIS LINE ---------------------
24 -- Bus protocol ports, do not add to or delete
25 Bus2IP_Clk : in std_logic;
26 Bus2IP_Resetn : in std_logic;
27 Bus2IP_Data : in std_logic_vector(C_SLV_DWIDTH-1 downto 0);
28 Bus2IP_BE : in std_logic_vector(C_SLV_DWIDTH/8-1 downto 0);
29 Bus2IP_RdCE : in std_logic_vector(C_NUM_REG-1 downto 0);
30 Bus2IP_WrCE : in std_logic_vector(C_NUM_REG-1 downto 0);
31 IP2Bus_Data : out std_logic_vector(C_SLV_DWIDTH-1 downto 0);
32 IP2Bus_RdAck : out std_logic;
33 IP2Bus_WrAck : out std_logic;
34 IP2Bus_Error : out std_logic
35 -- DO NOT EDIT ABOVE THIS LINE ---------------------
36 );
37 end component user_logic;
323-352行为user_logic元件例化。VHDL是不区分大小写的。
1 ------------------------------------------
2 -- instantiate User Logic
3 ------------------------------------------
4 USER_LOGIC_I : component user_logic
5 generic map
6 (
7 -- MAP USER GENERICS BELOW THIS LINE ---------------
8 --USER generics mapped here
9 -- MAP USER GENERICS ABOVE THIS LINE ---------------
10
11 C_NUM_REG => USER_NUM_REG,
12 C_SLV_DWIDTH => USER_SLV_DWIDTH
13 )
14 port map
15 (
16 -- MAP USER PORTS BELOW THIS LINE ------------------
17 LED => LED,
18 -- MAP USER PORTS ABOVE THIS LINE ------------------
19
20 Bus2IP_Clk => ipif_Bus2IP_Clk,
21 Bus2IP_Resetn => ipif_Bus2IP_Resetn,
22 Bus2IP_Data => ipif_Bus2IP_Data,
23 Bus2IP_BE => ipif_Bus2IP_BE,
24 Bus2IP_RdCE => user_Bus2IP_RdCE,
25 Bus2IP_WrCE => user_Bus2IP_WrCE,
26 IP2Bus_Data => user_IP2Bus_Data,
27 IP2Bus_RdAck => user_IP2Bus_RdAck,
28 IP2Bus_WrAck => user_IP2Bus_WrAck,
29 IP2Bus_Error => user_IP2Bus_Error
30 );
这几个文件修改后保存。
Project->Rescan User Repositories(更新用户仓库?),让XPS识别到对IP所做的修改
三、将自定义IP核添加到PS系统
同第三篇一样,需要将IP添加到PS系统中。
在Ports标签中,需要将我们定义的LED端口设置为外部端口,外部引脚名按照Zedboard的习惯,定义为LD
在Address标签中,设定IP的地址。XPS支持自定义定制范围、空间大小等。可以使用默认设置,也可以手动设置。这里我设置基地址为 0x40000000,其实也就是我们设定的数据寄存器的地址为0x40000000。如果有更多的寄存器,会以4字节offset 地址的方式访问即可。
最后一样修改ucf文件,完成约束。
1 NET LD[0] LOC = T22 | IOSTANDARD=LVCMOS33; # "LD0"
2 NET LD[1] LOC = T21 | IOSTANDARD=LVCMOS33; # "LD1"
3 NET LD[2] LOC = U22 | IOSTANDARD=LVCMOS33; # "LD2"
4 NET LD[3] LOC = U21 | IOSTANDARD=LVCMOS33; # "LD3"
5 NET LD[4] LOC = V22 | IOSTANDARD=LVCMOS33; # "LD4"
6 NET LD[5] LOC = W22 | IOSTANDARD=LVCMOS33; # "LD5"
7 NET LD[6] LOC = U19 | IOSTANDARD=LVCMOS33; # "LD6"
8 NET LD[7] LOC = U14 | IOSTANDARD=LVCMOS33; # "LD7"
最后对这个系统编译,生成bitstream文件,并将硬件配置导入到SDK,并启动SDK。
四、使用SDK编写IP核驱动程序和应用程序
打开SDK,可以从系统信息system.xml中看到我们的系统信息。可以看到我们实例化连接到系统的ip是my_axi_ip_0,基地址是0x4000000。
建立软件工程后,修改main代码,如下
//@超群天晴 http://www.cnblo