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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
很多客户,特别是外包项目,需要做黑盒子,防止他人看到源码,那么这就需要对相关的源码打包加封了。diamond help 说的也是模糊模糊的,这次给出实际验证过的流程。2 _$ }# u- v$ Z' a( A; t
+ C! t6 Y% D" I/ Z* K' C& C
+ T' _" j1 N7 Z! F: e6 K/ g
1.先将要加封的模块间一个工程,建好工程,写好代码之后,模块名字叫做crosslink(这个使用黑盒子的时候要用),代码如下:- V3 U  A! h" M. Y5 h

: h+ k0 V8 A5 Y! t

4 |* R$ ^; L# h( S9 L  R
  • 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/ o1 V& g) L0 R2 I2 v  H# a3 F
6 [  u' o# [0 E9 W1 l
6 W; U7 [* M, X& O2 P
' k( p+ `/ q6 K5 S( G+ O( B6 m3 L
9 c- ~. d/ w7 t. r- m- O* T4 s

5 ]0 l  Z8 ^, Q; O5 p然后做把disable io insertion设置成true,如下截图8 y. V8 A0 k5 ?" G, g: N

- i3 k; P" W& c8 Z) o( G4 H
; e0 [; o, o( |" @, f' j: R7 P
9 @; l* l) w: U- H% `

% H5 [/ ^9 D; q5 _/ d

2 M5 H) ]" b" g1 `/ M, M再然后,进可以点击综合translate design按钮生成黑子盒子了,如下截图
( X0 Q' o+ [! w8 M; S) R, Q
2 C1 w7 {' ^& o4 o# z9 I

# }/ [! P0 O) R
9 |' I4 y7 \3 h, B) P6 q: ?8 n# i0 J, B. C2 s
4 E4 O( w6 [. \" i' h
黑盒子的名字叫做bb_impl1.ngo(前缀视你自己的命名而定,后缀不变),为了使用它,我们先去把他找出来5 V2 [! Z5 m; e: G6 X

0 O2 e5 o. T% o: k# H6 m# G
) L. Z6 t( ], V5 x5 ?; a

7 w0 Y* M. _& U: ^, f8 Y% i1 o9 k+ ~% l* ]: H. \1 K5 S6 g0 }& x

2 I# }) C! C1 F接下来就是如何使用的问题了- K" h& K8 t+ a- u
  R( m6 w$ B  ~: `  ]' u

) D0 \# [) O/ `一样先建立工程,但是需要注意,选的器件型号一定要和黑盒子的选的型号一致,不然跑不起来。工程建好之后先建一个顶层去包我们的黑盒子,代码如下: |6 d5 P5 V5 N" q
2 i- z( s. J6 {. V* g+ H% p) c  v9 n% U

/ K: N) }7 q7 c3 k1 ?$ Y
  • 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
    5 W# d6 |1 n. q8 t

5 f" O% o- S7 F- M: n. }. G
: r& U8 x3 y% N, h. I
  d3 Q+ v# A7 R- |) v" T, \
# T+ ]; H: f5 j* f3 T0 E
- ?, n2 G# `. l- N/ k& `
那么我现在的工程怎么去识别我的黑盒子呢?接下来要做的事情需要特别注意,说起来也挺搞笑的,尼玛,我是试出来的。3 p# U, `0 Z- H4 j5 u- W
; w' z  }+ L7 I, k& B
+ d' @5 X  D  P, p& o% W
把之前生成的bb_impl1.ngo,改成黑盒子的源码的模块名,即crosslink.ngo(因为软件是按名字去识别模块的,不然会跑不起来或者编译报错)
9 }+ v0 x8 X8 Y" ?2 N7 e% J" O
/ ?1 J5 z+ D' n: u( L9 c- q
# h4 w; b% E, |7 z# I
然后放到你想放到的地方,然后指定你放到的地方的路径(这个是为了让软件能找到你的黑盒子.ngo),如下图5 w. o' m) n# y

, |! Q: D7 o% V
" r3 @. K6 p% e& U3 e

- Y! G& n* z# u+ D/ ?4 z7 ?2 c; C0 N) Y1 E1 h+ V$ l; G! Q) |
+ r' r' n% C9 y

6 S) V3 Z3 D2 u! i* K
' O8 H6 X3 c0 K. g4 _& W) m

" q  c) `  l  J7 O" n2 C然后愉快的生成下载文件,下载到板子去测试吧6 O4 g  ]6 K' S. y' B) Q; t
6 r8 ]  d8 N/ K
0 E0 k4 l( N( k  t

$ K  T, r) i4 n/ {# E! @( a: Z5 L5 ?: s, `2 ^/ P

' d/ R8 a( W  B/ z) l3 ^- w
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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