我正在创建一些IP,而不是运行算法的模板。基本上我已经设计了它,以便VHDL可用于GENERICS
,D_WIDTH
和FRAC
的任何定点数据表示。
我正在使用Xilinx IP内核进行算术运算,因此在使用IP时,我需要将这些参数保留为D_WIDTH
中的更改。我想将它们留作黑盒子,然后将它们外部定义。但是在属性定义中,宽度可以是变量,例如
ATTRIBUTE BLACK_BOX_PAD_PIN OF sub_dsp : COMPONENT IS "A[31:0],B[31:0],CLK,CE,SCLR,S[31:0]";
数据宽度固定为32,如上所述,我需要这些变量如下:
ATTRIBUTE BLACK_BOX_PAD_PIN OF sub_dsp : COMPONENT IS "A[D_WIDTH-1:0],B[D_WIDTH-1:0],CLK,CE,SCLR,S[D_WIDTH-1:0]";
这会有用吗?或者是否有另一种方法可以将参数化的IP集成到我自己的IP中??
由于 萨姆
答案 0 :(得分:2)
我认为这样可行:
ATTRIBUTE BLACK_BOX_PAD_PIN OF sub_dsp : COMPONENT IS "A[" & integer'image(D_WIDTH-1) & ":0],B[" & integer'image(D_WIDTH-1) & ":0],CLK,CE,SCLR,S[" & integer'image(D_WIDTH-1) & ":0]";
可能还有其他方法可以解决这个问题。一些Xilinx IP内核是" clear-source",因此您可以将源添加到项目中,并将它们实例化为您的代码。您放松了GUI参数化和更新工具管理。
根据您的算法,您可以使用Xilinx IP内核的最大宽度,并将较小的D_WIDTH
映射到IP的lsb。如果Xilinx的优化机制将未使用的位从设计中删除,这很有效,这在很大程度上取决于您执行的操作。
你也可以在你的代码中使用泛型用于所有D_WIDTH
,但这真的很难实现。