FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码

catlog

  • 需求
  • 具体步骤
    • 工程描述
    • 去掉相关调试文件
    • 切换顶层模块并导出相应模块为网表文件
    • 切换回原顶层模块并添加相应保护模块的qxp文件
    • 再次编译工程
  • 注意事项
    • parameter参数
  • 参考:

需求

  • 有时需要将源码交付给第三方,但是源码中部分模块涉及到的核心代码无法暴漏给第三方。因此,我们需要一种能够让第三方拿到源码对部分参数进行修改、但同时又无法触及到核心代码的代码保护方法。
  • 本文结合部分资料,给出了如何将quartus工程中核心moduleverilog文件导出为网表文件的具体步骤

具体步骤

工程描述

原始工程如下:共包含TestSpi.vW5500_DEF.vW5500HAL.vTimer.vSpiTransmit.vVLC_OOK.v共6个文件。

  • 其中TestSpi.v是工程的顶层文件。
  • VLC_OOK.vTimer.v是要完全暴漏给第三方的功能模块。
  • W5500HAL.v则是不需要暴漏给第三方但同时不希望泄露核心功能的代码,在W5500HAL.v中调用了SpiTransmit.vW5500_DEF.v

因此本项目对W5500HAL.vSpiTransmit.vW5500_DEF.v这三个文件进行加密。

FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第1张图片

去掉相关调试文件

  • 在上图中的工程文件中,TestW5500HAL.stp是用于工程调试的signal tap工程文件,我们直接将其删除,并在工程中取消掉signal tap选项。如下:
  • 找到setting选项:
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第2张图片
  • 取消勾选signal tap:
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第3张图片
  • 我们对比去掉signal tap前后编译生成的工程占用资源大小:第一张图片是带signal tap的,第二张是不带signal tap的,可以发现signal tap差不多消耗了13%的资源。
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第4张图片FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第5张图片

切换顶层模块并导出相应模块为网表文件

  • 现在我们工程的顶层模块是TestSpi.v模块,其结构如下:顶层模块为TestSpi.v,其中包含3个子模块。
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第6张图片
  • 我们要保护的模块是MyW5500HAL模块,因此我们在Settings选项中切换顶层模块为MyW5500HAL,如下:
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第7张图片
  • 然后对工程进行编译,看到W5500HAL模块占用资源如下:
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第8张图片
  • 此时FPGA工程架构如下:顶层模块为W5500HAL.v,其中包含4个子模块。
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第9张图片
  • 将模块W5500HAL.v导出为.QXP(QuartusII Exported Partition)网表文件:
  • 步骤1:
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第10张图片
  • 步骤2:
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第11张图片

切换回原顶层模块并添加相应保护模块的qxp文件

  • 首先,我们切换回顶层模块为TestSpi.v,并删除W5500HAL模块中相应的源码文件:W5500HAL.vW5500_DEF.vSpiTransmit.v,然后添加导出的W5500HAL.qxp文件到工程,最终文件列表如下:
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第12张图片

再次编译工程

  • 此时我们的工程中已经不包含W5500HAL模块的源码了,我们再次编译工程,编译成功,说明设置生效,此时我们再将工程打包发送给客户即可:
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第13张图片

注意事项

parameter参数

  • 如果module中含有parameter参数,则在生成qxp文件后,顶层模块调用该模块时,不可以对parameter参数进行修改,否则会报如下错误:
    Error (12236): QXP instance has incompatible value for parameter "W5500_S0_DPort_1"
    FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码_第14张图片

参考:

(原创)详解Quartus导出网表文件:.qxp和.vqm

你可能感兴趣的:(FPGA,fpga开发)