zoukankan      html  css  js  c++  java
  • lattice 黑盒子的生成和使用(Creating Your Own Black Box Modules)

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

  • 相关阅读:
    Linux基础命令---arch
    JSON漫谈
    django中外键关联表的查询随笔
    <django中render_to_response的可选参数和使用方法>
    有趣的Redis:缓存被我写满了,该怎么办?
    2020全球C++及系统软件技术大会成功落下帷幕
    AWS 宣布创建 Elasticsearch 和 Kibana 分支
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    自定义注解!绝对是程序员装逼的利器!!
    Java8 Stream
  • 原文地址:https://www.cnblogs.com/xiaozhuge/p/6634579.html
Copyright © 2011-2022 走看看