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