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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
很多客户,特别是外包项目,需要做黑盒子,防止他人看到源码,那么这就需要对相关的源码打包加封了。diamond help 说的也是模糊模糊的,这次给出实际验证过的流程。
5 C8 x% N3 \) _7 ]/ C( o6 Y# }. u9 Y
* j8 x3 y% t* b$ u+ |

$ w7 \+ k0 `( @5 n) k7 {1.先将要加封的模块间一个工程,建好工程,写好代码之后,模块名字叫做crosslink(这个使用黑盒子的时候要用),代码如下:' E& y. ]" x; c
) {% C& g& }$ F8 O5 A
8 ~& D  v3 v. K. a
  • 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' ~  k# ~( L- u; e- c7 g% G
" \: X; x8 ~" D" h
/ f$ f% k3 ?) C. B, P& W1 b. E

4 z" m/ [8 ^5 _5 d3 f' u6 i
- J; h* u. E! ~

3 r4 b) i8 f/ H* [然后做把disable io insertion设置成true,如下截图$ J1 H' ]( Z/ O, Q8 w, t/ p* x/ d# p

' @0 U2 B* V- V. ~- @

* M# k* V. q3 `) u & B/ o$ \0 i  o1 f7 K
; E2 K' Z6 {4 M# ^0 L/ v+ F

# r; J( l/ x0 [) e再然后,进可以点击综合translate design按钮生成黑子盒子了,如下截图
4 @1 x  t: w6 r  V
( L8 ^) M! S7 a1 ^: L3 [
0 P; [, M- S& l( o+ j
* K; q4 O/ R8 ^- j9 m5 C
% j" t: ?4 n* J2 K! M! h+ @
+ \8 X. }/ I! v8 a/ E0 }( X2 `; j
黑盒子的名字叫做bb_impl1.ngo(前缀视你自己的命名而定,后缀不变),为了使用它,我们先去把他找出来
& t6 C5 q9 `( O5 h  b4 Y
9 M# j9 F/ a2 c: p8 [  ?
& n5 G7 o6 n# ^; C0 u6 v- H, q
6 r1 S# r; R9 G0 w9 p! R0 L" z1 m
, F5 A+ G$ @# i5 f, s/ v

% l: Y0 ?" ]8 A7 [/ _6 H- l- K接下来就是如何使用的问题了
, t' T) \( R$ R" B+ O. C  e7 H0 l$ B# H; r5 o
( ^( ?+ ]1 I+ P7 [) k) M
一样先建立工程,但是需要注意,选的器件型号一定要和黑盒子的选的型号一致,不然跑不起来。工程建好之后先建一个顶层去包我们的黑盒子,代码如下
7 c, @* J: \: ~; ~  V( y$ n; u( ?9 P
1 Q) r5 O8 n# X- q; Y

4 \" m/ [+ Z  Y% T% \, H0 `" o
  • 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: O: ~* Z6 s% _+ Y  E1 E" c# [
- ~& a! x  ~, ?1 k; |) E- b( w
) F7 Z6 v  d, E' ?# C; ^) C9 x
. T+ [8 t* B% F3 p6 D& m

% e, {+ W8 k* X$ d; m1 E8 }
7 Z0 _5 P2 ^2 b! _* u" q
那么我现在的工程怎么去识别我的黑盒子呢?接下来要做的事情需要特别注意,说起来也挺搞笑的,尼玛,我是试出来的。! B- V1 Z& J, }4 m
6 \. c- L" _: `9 c6 Y
1 x% W5 ]6 @. c( W$ p  [, Q: @8 f
把之前生成的bb_impl1.ngo,改成黑盒子的源码的模块名,即crosslink.ngo(因为软件是按名字去识别模块的,不然会跑不起来或者编译报错)
+ J9 ~+ b* R) B5 M  Z5 R$ ?7 f) W$ h% r& z: ~  m

) }0 h; {. z, d4 h4 y然后放到你想放到的地方,然后指定你放到的地方的路径(这个是为了让软件能找到你的黑盒子.ngo),如下图4 ]  K) G. b) N( R7 R& ~

2 k0 a3 {4 Q8 \. M  C$ l
! n' Y" Z5 H1 a

  n6 {) L/ L8 Z6 u8 i% A
& y- Y0 c5 |* z6 ?4 K$ X, s# ~# F1 ]+ Y2 s0 e( H6 j
4 k. A: A+ p3 F, ?: r6 Y1 r
9 v, s) }$ V! ^7 Y
) V3 B8 s  [- M5 L
然后愉快的生成下载文件,下载到板子去测试吧2 D. W8 [& ^3 }/ U
1 ^7 K. F, A2 q2 O  E0 ?

4 b* k! v5 m1 u( F2 y7 L' M * o) P/ S% X* E  U) ?$ X, ?

9 ^7 l( Q, q: h3 ]5 |
0 ^4 P" y) L5 U1 H3 Q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-11 18:59 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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