找回密码
 注册
关于网站域名变更的通知
查看: 635|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-7-12 09:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
很多客户,特别是外包项目,需要做黑盒子,防止他人看到源码,那么这就需要对相关的源码打包加封了。diamond help 说的也是模糊模糊的,这次给出实际验证过的流程。
4 w8 ?: g1 c, n" D; W1 c* S8 P# h+ ^* s

9 Q3 f* n6 o6 V4 f! P$ X1.先将要加封的模块间一个工程,建好工程,写好代码之后,模块名字叫做crosslink(这个使用黑盒子的时候要用),代码如下:" e4 t% c0 P4 l, F( \
5 p. K. G; e. f7 J
4 v% ~& o& w- T. {' _6 J
  • 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
    9 l" ^$ E/ J: P0 P

: }+ {- }6 v6 }2 K" P* Q9 _% U4 a% N  j5 S% f" X+ N: F1 S, i3 @' F

- \8 w& R6 M. M  ]; c6 L
. p7 f) X5 l; c  _
( Z$ R# K% S7 T/ u& Q; L8 Q  C
然后做把disable io insertion设置成true,如下截图- K2 f" `- f) p0 o
6 e2 T6 q0 `5 k, h5 l

8 V) f! x4 P  ^ 2 M+ s5 `4 S5 F+ s. W

4 s# s! q9 |. i( m! a

) k3 X  }6 P4 Y; T4 \再然后,进可以点击综合translate design按钮生成黑子盒子了,如下截图
0 X* b# l" m# L- Z$ V& B6 {+ `8 p5 T- F8 l! o: a/ A0 m! Q
+ k% ^% p$ ^- h1 i

* j  Y1 S* T: n7 P9 J* I- ~
: {# _7 [- _: h2 A" c, P
- v: A3 S! I: \; K
黑盒子的名字叫做bb_impl1.ngo(前缀视你自己的命名而定,后缀不变),为了使用它,我们先去把他找出来% \" Z0 ]7 E% H. c) X
, c* h" ]+ }0 [, W# k  w3 r6 h

% m5 S. [" c+ m1 G, G8 C
6 s/ _" N9 [( Z* i5 T2 r! @8 ~2 Z
# f' A+ t% E3 M5 B9 ~1 w7 c

1 J. m% X$ g8 s' n4 x接下来就是如何使用的问题了
, @. ?& T& L+ ?. E: N/ W7 s( ^  `7 f

* ^* k' m, o# q0 S一样先建立工程,但是需要注意,选的器件型号一定要和黑盒子的选的型号一致,不然跑不起来。工程建好之后先建一个顶层去包我们的黑盒子,代码如下& c2 y2 n3 u* |/ @3 T

$ R7 v4 u/ D2 n$ M! N! x
3 o5 L% v0 u; {
  • 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
  • );
  • endmodule4 M* y) @- J/ H

! s" S$ v) f% B9 a9 ~, z# X
' ^' ^  {! B  ]  R

4 E; x6 U* O. D8 K. E- A4 a7 y; ^
! ?" E& U/ A# D. q  h( `

0 _( C# d, ~/ G  R那么我现在的工程怎么去识别我的黑盒子呢?接下来要做的事情需要特别注意,说起来也挺搞笑的,尼玛,我是试出来的。& Q9 |) u  x* ~8 I
5 M: K' i8 ]* {, F

6 d& Y1 M2 r/ X把之前生成的bb_impl1.ngo,改成黑盒子的源码的模块名,即crosslink.ngo(因为软件是按名字去识别模块的,不然会跑不起来或者编译报错)
6 d# J4 u* b% z- }7 P4 w9 D. n8 r
4 T% C( P  a9 @$ E: a' Y; E- s

+ X7 K9 `1 y0 Z- j$ h/ E# s3 \2 r然后放到你想放到的地方,然后指定你放到的地方的路径(这个是为了让软件能找到你的黑盒子.ngo),如下图
3 X* a! z( t. d# g' @: S9 p) ?/ y
7 x; |$ n: K/ a/ m2 Q& f
5 s  `7 d3 [% W" h& v" W
/ {2 y5 \* N3 M" J7 H; L

. h/ {+ s  ]4 [$ j5 W" K8 D, R! D% j  b. g
2 m  n9 P6 i5 T& T; M
( k2 a. Y: a& x* I9 `4 i

$ Y. J6 b( N3 y9 V然后愉快的生成下载文件,下载到板子去测试吧
: T# m6 w' Z6 \4 w2 v5 ^+ `! B" W% ?
, y0 G* j" g6 c- ]0 _6 k- [9 p

' h* w9 w8 R; V/ k
: e. f) g. u% R6 f1 O7 {$ `
" @# X4 {" G- W- l0 l; q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-15 08:06 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表