我们完成Vivado的工程后,大部分情况不能把整个工程的源代码都直接给客户或者其他工程师,需要我们先进行一些封装后再给他们,就像软件代码中会编译成dll后再Release给别人。
在Vivado中,常用的三种封装形式有三种:
这三种封装形式在使用上都是相似的,都是我们只提供模块的接口让用户去调用。
这篇文章我们讲一下封装成edif和dcp的步骤、区别、注意事项。
封装成edif
More Options
一栏写入-no_iobuf
;write_edif path/xx.edif
封装成dcp
More Options
一栏写入-mode out_of_context
;write_checkpoint -noxdef path/test.dcp
dcp模块的接口如下:
module dcp_demo #(
paramter paramt1 = 1,
paramter paramt1 = 2
)(
input in1,
output o1
)
则例化方式如下,不能有包含parameter,否则会报错
dcp_demo (
.in1 (in1),
.o1 (o1)
);
封装成edif和dcp的区别
封装dcp文件时的注意事项
assign scl_in = i2c_scl;
assign i2c_scl = i2c_scl_oe ? i2c_scl_o : 1'bz
但这么写的话,生成的dcp在Implementation时会报error,我们要使用Xilinx的IOBUF的原语来处理,改成下面的写法:
IOBUF #( .DRIVE(12), .IBUF_LOW_PWR("TRUE"), .SLEW("SLOW") ) SCL_inst (.O(scl_in),.IO(i2c_scl), .I(i2c_scl_o),.T(~(enable & ~scl_out)));