ZedBoard上的点灯签名实验(二):创建自定义IP
如果想使用Xilinx组件从头开始创建嵌入式工程,一般是从PlanAhead开始,然后启动XPS。Digilent已经为ZedBoard建立好了一个嵌入式工程,我们可以直接下载后,按照我们的自己的想法作修改。下载链接 ?NavPath=2,400,1028&Prod=Z...
下载到的文件名为ZedBoard_Linux_Design.zip, 解压缩
(命令 unzip ZedBoard_Linux_Design.zip)后有6个文件夹。工程文件位于 /hw/xps_proj/system.xmp ,启动XPS, 打开system.xmp. 这时看到的系统就是ZedBoard了。首先,把GPIO中的8个禁用,方法是单击Zynq选项卡上的I/O Peripherals, 在打开的窗口左侧找到GPIO,点一下左边的 + 号,把EMIO中的60改为52,这样做是为了把8个LED从GPIO上剥离。
接着创建IP,单击Hardware->Create and Import Peripherial Wizard->next->next->next, 输入IP的名称"myled",注意此处只能小写,其他默认即可,然后next,总线接口(Bus Interface)默认AXI4-Lite-->next, 取消 Include data phase TImer选项,-->寄存器默认1个32位寄存器。-->next, -->next, -->next, 习惯Verilog的朋友注意选择, "......in Verilog instead of VHDL". -->next, 最后Finish。IP创建完成后会在左侧的"IP Catalog-->Project local PCore-->USER" 中看到刚刚创建的IP "MYLED" .
点右键-->Add IP-->yes-->ok,-->ok |把创建好的"MYLED"加入ZedBoard的系统。在Bus Interfaces选项卡中找到myled_0, 点右键-->Browse HDL Sources 找到VHDL代码所在的文件,myled.vhd 和 user_logic.vhd, 改动这2个文件,把我们的IP,一头和LED 连接,当然,它的另一头是AXI-Lite。打开user_logic.vhd, 添加一个Port (LED : out std_logic_vector(7 downto 0), 然后把寄存器 slv_reg0 接到这个Port上( LED <= slv_reg0(7 downto 0);). 接着再打开myled.vhd, 找到USER_LOGIC_I, 和刚才的Port对应,添上Port LED,并且对应到myled 的LED(LED => LED ), 然后给myled 加上Port LED,保存 。
然后,回到选项卡BUS Interfaces, 找到myled_0, 单击右键-->View MPD, 在myled_v2_1_0.mpd中找到## Ports,回车,输入 PORT LED = "", DIR = O, VEC = [7 : 0] , 保存。然后-->project-->Rescan User Repositories,在选项卡Ports 中, -->myled_0-->LED, 连接LED到External Ports 中的myled_0_LED_pin, 在 Graphical Design View 中找到myled_0, 看到接口LED 已经连接到对外的接口myled_0_LED_pin上了.
接下来就是要通过改动ucf文件把myled_0_LED_pin链接到芯片的针脚上, -->View-->Tabs-->project-->UCF File, 双击 UCF File,我们看到 On-board LED's 和 GPIO相连,我们已经取消了这个连接,所以在这儿,要把连着 LED's的GPIO换成myled_0_LED_pin<0> ---<7>, 并且把GPIO重新排序,因为GPIO<59>---<52> 是不存在的。修改完成,保存后先点击一下Run DRCs, 检查一下有没有错误,确认无误后点Generate BitStream, 创建比特流文件,这一步比较费时间,在我的机器上大概2.5个小时,需要耐心等待。完成后,点击Export Design for SDK。进入软件部分。