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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
很多客户,特别是外包项目,需要做黑盒子,防止他人看到源码,那么这就需要对相关的源码打包加封了。diamond help 说的也是模糊模糊的,这次给出实际验证过的流程。
+ R. g! B6 K/ A* ?( ^8 D
7 {( Q. o8 a  d5 `( [

# |% v1 S* i- X* y5 J$ a, Y1.先将要加封的模块间一个工程,建好工程,写好代码之后,模块名字叫做crosslink(这个使用黑盒子的时候要用),代码如下:
; G+ [4 x8 @) F* ?7 Z* C9 h( A. e4 _* ^

0 M8 k8 g7 K) F! O
  • 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
    - N( P; \' ]( F+ D9 r

1 c3 G$ l: H7 {4 S' q+ U# O/ ?5 ?/ l) }1 n/ j6 [
7 R. j, i* }5 `' a- g

, G9 v+ r& ^: m5 D

" X/ e. `# \$ D0 g2 V5 j然后做把disable io insertion设置成true,如下截图8 J& c0 Y' [/ ~' l+ |# O* y! n$ O
( z. @  D0 `2 k/ g1 ?
) A: c/ C$ b4 ]8 J0 z* @' c

$ Q4 V& d" H* A9 F
5 |! W# R) ?- I- R" z
$ m% |. H) I+ w$ G
再然后,进可以点击综合translate design按钮生成黑子盒子了,如下截图) O8 r! w# r" h) ]1 Y

* R7 g9 X4 J& N! L( c8 b+ Q8 y
$ b' j2 d$ E0 I8 J- x

' r* H2 M" e, P% L
4 r; C+ J2 S: X# T0 ]/ X5 J

5 P2 g. f3 u7 e9 P2 g3 d0 z黑盒子的名字叫做bb_impl1.ngo(前缀视你自己的命名而定,后缀不变),为了使用它,我们先去把他找出来0 }% m) w' Z6 y, u8 k
% O& Q5 [) s0 F! U2 \

: `' X% Y6 s! W7 l; C
) W+ h& r/ Y+ M5 w+ N9 |5 r7 F0 E( c- A' x# f, Z' f
1 m( b; c: j1 P: k; y, P/ e
接下来就是如何使用的问题了' `1 }% Z  w- E; o9 ~9 P
6 P! ]+ p, ~7 a  {9 H

* \% Y+ z! d0 f+ B8 w" ]3 V) T" j( ]一样先建立工程,但是需要注意,选的器件型号一定要和黑盒子的选的型号一致,不然跑不起来。工程建好之后先建一个顶层去包我们的黑盒子,代码如下' G" B, W: y3 s% w( ]' c

& k" o+ F5 b4 W% V
) G: l5 ^* C/ a' r& y1 r
  • 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' A& U: V6 _  m4 _4 s
, o! |! m+ c, \4 F
- K4 i. x: u' m
$ d+ c  N9 l+ e9 @
+ m4 v* h( G3 y1 i% n

, U# B& h1 f9 [9 l" u& y8 b那么我现在的工程怎么去识别我的黑盒子呢?接下来要做的事情需要特别注意,说起来也挺搞笑的,尼玛,我是试出来的。
+ T  z9 a" G  Y* D( X  O# i5 T
7 o7 e8 e( \9 \: S- L$ Q
6 T8 J9 ^2 z7 X
把之前生成的bb_impl1.ngo,改成黑盒子的源码的模块名,即crosslink.ngo(因为软件是按名字去识别模块的,不然会跑不起来或者编译报错)  }9 S. c$ l) U1 ^
  ?. C5 w$ W1 f. d% ?  Q

9 k7 G! S# r6 i8 K" t6 r然后放到你想放到的地方,然后指定你放到的地方的路径(这个是为了让软件能找到你的黑盒子.ngo),如下图
1 b" Y  x0 w9 e  y+ v& Z
! x- C# Z6 M( o5 x& O- h0 k7 [

: t1 f2 r' f0 p3 W1 Z0 u8 `6 E ) P5 Z" N3 y- R4 _9 X
0 r; K9 F9 u& ~+ j3 A1 ]+ C

  ]& R/ C# q$ R! H; W# j! ]9 g1 a
# `4 {! ?2 e! D. M& H* I! |* m+ e& q0 H! Z$ z4 J2 b9 M4 Y+ [4 w

% Y& d% e  v; o0 Z3 |# R然后愉快的生成下载文件,下载到板子去测试吧
8 c* F$ ~/ h' ]# T6 t8 ~0 q. G8 \1 L' v2 V$ Q
3 }/ G  y& n) n3 [* o

5 u$ J7 A1 g% R1 ^# h' }  W9 M5 f. V' o
5 K9 |, W% a9 @/ m0 X- \1 Z/ d
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-11 22:19 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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