請問lattice-fpga軟年diamond怎麼把自己寫的code封裝成類似ip的文件

向博主本人提問FPGA相關問題

 

【轉載】lattice 黑盒子的生成和使用(Creating Your Own Black Box Modules)

很多客戶,特別是外包項目,需要做黑盒子,防止他人看到源碼,那麼這就需要對相關的源碼打包加封了。diamond help 說的也是模糊模糊的,這次給出實際驗證過的流程。

1.先將要加封的模塊間一個工程,建好工程,寫好代碼之後,模塊名字叫做crosslink(這個使用黑盒子的時候要用),代碼如下:

module crosslink( 
output wire[3:0] led,
input wire clk,
input wire reset
);


reg [29:0] cnt;
reg [3:0] led1;

assign led=led1;

always @ (posedge clk)
begin
if(reset==0)
cnt<=1'b0;    
else if(cnt==30'd5000000)
cnt<=1'b0;    
else    
cnt<=cnt+1'b1;
end    

always @ (posedge clk)
begin
if(reset==0)
led1<=4'b0001;    
else if(cnt==30'd5000000 )
led1<={led1[0],led1[3:1]};    
end
endmodule

然後做把disable io insertion設置成true,如下截圖
1.png

再然後,進可以點擊綜合translate design按鈕生成黑子盒子了,如下截圖
2.png

黑盒子的名字叫做bb_impl1.ngo(前綴視你自己的命名而定,後綴不變),爲了使用它,我們先去把他找出來
3.png

接下來就是如何使用的問題了

一樣先建立工程,但是需要注意,選的器件型號一定要和黑盒子的選的型號一致,不然跑不起來。工程建好之後先建一個頂層去包我們的黑盒子,代碼如下

module top( 
output wire[3:0] led,
input wire reset
);




/*****************************************************
               調用內部晶振
*****************************************************/
wire clk_osc;
defparam I1.HFCLKDIV = 1; // 1,2,4,8
OSCI I1 (
.HFOUTEN(1'd1),
.HFCLKOUT(clk_osc),
.LFCLKOUT(LFCLKOUT)
);
/*****************************************************
             調用黑盒子
*****************************************************/

crosslink inst( //需要主要一定要和之前自己生成黑盒子的源碼的模塊名字一樣,這個和其他調用方式是一樣的道理
.led    (led),
.clk (clk_osc),
.reset    (reset)
);

endmodule

這之後就要建一個.V,去聲明黑盒子的端口,代碼如下

module crosslink( //直接拷貝黑盒子源碼的端口定義就好
output wire[3:0] led,
input wire clk,
input wire reset
);

endmodule

那麼我現在的工程怎麼去識別我的黑盒子呢?接下來要做的事情需要特別注意,說起來也挺搞笑的,尼瑪,我是試出來的。

把之前生成的bb_impl1.ngo,改成黑盒子的源碼的模塊名,即crosslink.ngo(因爲軟件是按名字去識別模塊的,不然會跑不起來或者編譯報錯)

然後放到你想放到的地方,然後指定你放到的地方的路徑(這個是爲了讓軟件能找到你的黑盒子.ngo),如下圖
774389-20170328141415279-221297380.png
774389-20170328141454233-867560143.png

然後愉快的生成下載文件,下載到板子去測試吧
774389-20170328141547311-1102991623.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章