博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lattice 黑盒子的生成和使用(Creating Your Own Black Box Modules)
阅读量:4348 次
发布时间:2019-06-07

本文共 1699 字,大约阅读时间需要 5 分钟。

很多客户,特别是外包项目,需要做黑盒子,防止他人看到源码,那么这就需要对相关的源码打包加封了。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,如下截图

再然后,进可以点击综合translate design按钮生成黑子盒子了,如下截图

黑盒子的名字叫做bb_impl1.ngo(前缀视你自己的命名而定,后缀不变),为了使用它,我们先去把他找出来

接下来就是如何使用的问题了

 

一样先建立工程,但是需要注意,选的器件型号一定要和黑盒子的选的型号一致,不然跑不起来。工程建好之后先建一个顶层去包我们的黑盒子,代码如下

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),如下图

 

 

然后愉快的生成下载文件,下载到板子去测试吧

 

不能拍视频,你们看不到流水,只能看到一个灯亮(其中较暗的那个灯是坏的)

 

如有疑问请联系QQ:825972925

 

转载于:https://www.cnblogs.com/xiaozhuge/p/6634579.html

你可能感兴趣的文章
Day4-文件,json字典文件互转,函数
查看>>
vector引用参数
查看>>
NTC温度采集之数据拟合——freemat软件实现
查看>>
maven私服nexus3.9安装配置
查看>>
U盘出现大量乱码文件,并且不能彻底删除
查看>>
UEditor添加一个普通按钮及其他使用注意事项
查看>>
C语言的第一次实验报告
查看>>
spring JDBC 批量插入数据
查看>>
状态压缩题目小结
查看>>
Android WebView 开发具体解释(三)
查看>>
2016-2017-2 20155325实验二《Java面向对象程序设计》实验报告
查看>>
POJ.3145.Common Substrings(后缀数组 倍增 单调栈)
查看>>
BZOJ.1935.[SHOI2007]Tree园丁的烦恼(CDQ分治 三维偏序)
查看>>
c++可变参数(示例)
查看>>
4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap
查看>>
第522篇--DataTable to Excel C#
查看>>
C++\virtual 虚函数、纯虚函数
查看>>
asp.net mvc 4多级area实现技巧
查看>>
Solr
查看>>
MySQL binlog数据库同步技术总结
查看>>