catlog
- 需求
- 具体步骤
- 工程描述
- 去掉相关调试文件
- 切换顶层模块并导出相应模块为网表文件
- 切换回原顶层模块并添加相应保护模块的qxp文件
- 再次编译工程
- 参考:
需求
- 有时需要将源码交付给第三方,但是源码中部分模块涉及到的核心代码无法暴漏给第三方。因此,我们需要一种能够让第三方拿到源码对部分参数进行修改、但同时又无法触及到核心代码的代码保护方法。
- 本文结合部分资料,给出了如何将
quartus工程中核心module的verilog文件导出为网表文件的具体步骤
具体步骤
工程描述
原始工程如下:共包含TestSpi.v、W5500_DEF.v、W5500HAL.v、Timer.v、SpiTransmit.v、VLC_OOK.v共6个文件。
- 其中
TestSpi.v是工程的顶层文件。 VLC_OOK.v、Timer.v是要完全暴漏给第三方的功能模块。- 而
W5500HAL.v则是不需要暴漏给第三方但同时不希望泄露核心功能的代码,在W5500HAL.v中调用了SpiTransmit.v和W5500_DEF.v。
因此本项目对W5500HAL.v、SpiTransmit.v、W5500_DEF.v这三个文件进行加密。

去掉相关调试文件
- 在上图中的工程文件中,
TestW5500HAL.stp是用于工程调试的signal tap工程文件,我们直接将其删除,并在工程中取消掉signal tap选项。如下: - 找到setting选项:

- 取消勾选signal tap:

- 我们对比去掉signal tap前后编译生成的工程占用资源大小:第一张图片是带signal tap的,第二张是不带signal tap的,可以发现signal tap差不多消耗了13%的资源。


切换顶层模块并导出相应模块为网表文件
- 现在我们工程的顶层模块是
TestSpi.v模块,其结构如下:顶层模块为TestSpi.v,其中包含3个子模块。

- 我们要保护的模块是
MyW5500HAL模块,因此我们在Settings选项中切换顶层模块为MyW5500HAL,如下:

- 然后对工程进行编译,看到
W5500HAL模块占用资源如下:

- 此时FPGA工程架构如下:顶层模块为
W5500HAL.v,其中包含4个子模块。

- 将模块
W5500HAL.v导出为.QXP(QuartusII Exported Partition)网表文件: - 步骤1:

- 步骤2:

切换回原顶层模块并添加相应保护模块的qxp文件
- 首先,我们切换回顶层模块为
TestSpi.v,并删除W5500HAL模块中相应的源码文件:W5500HAL.v、W5500_DEF.v、SpiTransmit.v,然后添加导出的W5500HAL.qxp文件到工程,最终文件列表如下:

再次编译工程
- 此时我们的工程中已经不包含
W5500HAL模块的源码了,我们再次编译工程,编译成功,说明设置生效,此时我们再将工程打包发送给客户即可:

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