电路设计中,我们有时会用到一些以前编写过的设计代码。通常这时比较好的做法是把这些类似的可以复用的模块,独立定做成一个IP块以备以后需求。这里面主要是用到了Black Box的设计FPGA设计过程,很多时候在使用公司的或者第三方公司的IP核,那如何自己把自己的HDL代码变成可使用的IP呢。同时这样做也有很多好处:将你的设计制作成BlackBox,也就是网表文件,这样别人看不到你的设计但是可以调用你的模块了。详细的参考信息如下:
1. 什么是BlackBox: 一个大的设计中可以用到一系列网表文件作为输入的一部分而并不全部使用HDL文件。当综合这个大设计时综合器不需要知道这个网表文件是怎样实现的,而只需要知道它的输入输出接口就可以了。这样的网表就称为黑盒子,因为我们不需要看到它的内部情况。 通常付费IP都会以BlackBox的形式
2. 如何使用BlackBox: BlackBox网表可以是EDIF或NGC文件。 每个BlackBox网表都需要有一个与之相对应的HDL文件来注明它的端口。这个HDL只说明BlackBox的端口信息,而不提供具体实现信息。这个只提供端口信息的HDL文件称为Wrapper。Wrapper的名字通常需要与BlackBox网表的名字相同。 在ISE工程中使用BlackBox时只需要将它的Wrapper添加到工程中。然后像普通的模块一样在其上层声明和例化就可以使用。BlackBox网表文件可以放在ISE工程目录中,也可以放在其他任意文件夹内。当不放在ISE工程目录时,需要在Translate属性中将Macro Search Path指向这个目录。多个目录使用"|"分割。
3. 如何制作BlackBox: BlackBox只是普通网表而已。XST的综合结果就可以直接作为BlackBox使用。 - 通常BlackBox外部还会连接其他逻辑,所以BlackBox中一般不插入IOBUF。在XST属性中去除Insert IO Buffer的选项 1). 一般收费的IP都是只提供网表供使用,自然对设计的保密是一大好处; 2). IP都是验证好的模块,提供给外界接口,自然使用方便也是一大特点; 3). 以网表形式提供可以保持IP的内部时序完整性(即保存设计),类似于partition和smartguide。
说明:上面这些都是从其他地方抄过来的,以前和其他单位合作的时候,别的单位给我们的都是Blackbox的形式,我们直接用Wrapper的形式调用。今天琢磨了一下整个操作过程,见下面实际过程:
在ISE中封装HDL,并使用IP,设计分三大步:
第一步:像通常建立工程设计一样,先编写一个模块,如下显示发光二极管灯亮程序:
module led(
clk,
rst,
led
);
input clk;
input rst;
output [3:0] led;
reg [23:0] count;
assign led=count[23:20];
always @ (posedge clk or negedge rst)
if(rst==1'b0)
count<=24'b0;
else
count<=count+1;
endmodule
设置综合选项,综合过程中不能加入IO buf和iob(考虑到跟外部模块接口问题): 在综合设置中,-iobuf不要勾选,-iob选 NO,综合,生成网表led.ngc;
第二步:制作一个blackbox模块(就是一个IP的wrapper封装设计),如下:
Wrapper程序如下:
module led(
clk,
rst,
led
);
input clk;
input rst;
output [3:0] led;
endmodule只申明端口。
第三步:使用此IP,需要先把第二步的blackbox以v文件形式加入到工程,再调用这个模块,再把led.ngc文件加入到工程文件夹下即可。
module top(
clk,
rst,
valid,
led
);
input clk;
input rst;
output [3:0] led;
output valid;
assign valid=(led!=4'b0000)?1'b1:1'b0;
led u1(
.clk(clk),
.rst(rst),
.led(led));
endmodule
仿真波形图如下:
说明:仿真的时候,不能选择行为模式,只能选择后面三种。见下图
用户593939 2014-11-10 16:00
hot.summer_2010_438634915 2014-9-22 21:02
用户1779611 2014-9-22 11:42
博主好厉害,硬件、PCB、FPGA什么都这么专业,膜拜!