软件环境:vivado 2017.4 硬件平台:XC7Z020
如题目,今天主要是记录下用户自定义IP核的使用方式,以自建IP核的方式,控制4个LED的闪烁。
vivado 2017.4 -------->Add design sources 代码如下。
module USER_IP_TEST(
input CLK_i,//100MHZ
input RSTn_i,
output reg [3:0]LED_o
);
reg [31:0]C0;
always @(posedge CLK_i)
if(!RSTn_i)
begin
LED_o <= 4'b0001;
C0 <= 32'h0;
end
else
begin
if(C0 == 32'd49_999_999)//1s
begin
C0 <= 32'h0;
if(LED_o == 4'b1000)
LED_o <= 4'b0001;
else LED_o <= LED_o << 1;
end
else
begin
C0 <= C0 + 1'b1;
LED_o <= LED_o;
end
end
endmodule
然后把代码封成IP核,Tools --------> Create and Package New IP,NEXT
设置USER_IP的保存路径。
NEXT --------> OK --------> Finish。完成后的界面如下,选择Review --------> Package IP即完成自建IP核。
下面是如何使用自建的IP核。在需要用自定义的VIVADO工程里,Project manager-------->IP-------->Repositories,单击然后单击红框处的加号,定位到刚才自建IP核保存的目录,它会自动识别可以加载的IP核,弹出如下对话框。
疯狂OK以后,去IP Catalog下直接搜索或者diagram下点加号搜索就能调用到啦。
别忘了添加IO管脚约束文件。
set_property PACKAGE_PIN J16 [get_ports {LED_o[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED_o[0]}]
set_property PACKAGE_PIN K16 [get_ports {LED_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED_o[1]}]
set_property PACKAGE_PIN G15 [get_ports {LED_o[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED_o[2]}]
set_property PACKAGE_PIN H15 [get_ports {LED_o[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED_o[3]}]
联接好模块之后,最后依旧是老操作,Generate the output products,Create a HDL wrapper,Generate Bitstream,Export Hardware(注意勾选include biestream),最后launch SDK进行测试。
因为我自己在前面建立的自定义IP核中对IO口的操作是在PL端直接完成的,只需要有时钟就行,所以进SDK以后,建一个空应用,直接DEBUG,有时钟产生就能看到LED闪烁了。