Encryption 如何使用Vivado为Modelsim加密文件

Encryption 如何使用Vivado为Modelsim加密文件,encryption,vhdl,vivado,Encryption,Vhdl,Vivado,一家供应商正在使用一种工具,将一些代码编译成原始VHDL。他们不希望我看到原始代码,而是希望加密输出文件。目前,他们使用Vivado将其加密到EDIF网络列表中 这在实施设计时是很好的;我将其视为一个黑盒,使用I/o包装器并编写位流。他们向我保证他们的黑盒设计工作。我确实看到我的资源使用率达到了我预期的水平,但是我想模拟和验证它们的结果 当试图用modelsim模拟它时,它当然不知道如何解密这些文件。如果将网络列表写入VHDL,则会出现以下错误: # ** Error: Formatter.vh

一家供应商正在使用一种工具,将一些代码编译成原始VHDL。他们不希望我看到原始代码,而是希望加密输出文件。目前,他们使用Vivado将其加密到EDIF网络列表中

这在实施设计时是很好的;我将其视为一个黑盒,使用I/o包装器并编写位流。他们向我保证他们的黑盒设计工作。我确实看到我的资源使用率达到了我预期的水平,但是我想模拟和验证它们的结果

当试图用modelsim模拟它时,它当然不知道如何解密这些文件。如果将网络列表写入VHDL,则会出现以下错误:

# ** Error: Formatter.vhd(58329): near "AES128-CBC": Unknown session key in protected region
我要求他们在加密这些文件时包含modelsim的加密密钥,但他们不知道如何使用

我了解他们的粗略工作流程。tcl是:

synth_design -top Formatter
write_edif -force ./Formatteredf

因此,我的问题是,当他们使用Vivado生成EDIF文件时,如何包含modelsim加密密钥?

modelsim无法模拟EDIF。您需要将EDIF转换为可以模拟的格式。你提到Vivado,所以你会使用
write\u verilog
write\u vhdl
来转换这些

我无法访问任何加密的第三方网络列表,但我确实使用了一些加密的Xilinx IP(特别是ila_v6)。合成后,我打开合成结果并执行以下操作:

write_vhdl -mode funcsim -cell test_ila/U0 ila_funcsim.vhd
现在,
test\u ila
是我在顶层创建的实例,
U0
是内部加密的实例。生成的VHDL只是UNISIM原语的网络列表。它在Modelsim下愉快地编译。网络列表中没有加密的IP

所以,我想你有这样的想法:

component encrypted_ip is
...
end component encrypted_ip;

然后添加加密的EDIF,它被视为黑盒,但最终被拉入合成/实现。因此,打开合成或实现的设计,并使用
write\u vhdl
将组件转储到网络列表。

如果EDIF加密,write\u vhdl几乎肯定会生成另一个加密的网络列表。VHDL网络列表可能会在Modelsim中模拟,但我猜不会

Modelsim附带了一个工具“vhencrypt.exe”,它将使用IEEE 1735对源代码进行加密。Modelsim可以模拟生成的文件,但必须从源代码开始,而不是从EDIF开始。现在,在Vivado中使用EDIF和在Modelsim中使用vhencrypt输出都会有问题,但这是朝着正确方向迈出的一步


IEEE 1735可以生成Vivado和Modelsim都可以使用的单个输出,但您需要提供来自Xilinx的公钥。据我所知,Xilinx没有发布1735的公钥,但他们可能会与IP合作伙伴共享该公钥。

是的,但这仍然不能回答问题。Writeu vhdl仍然保存vivado的加密,而不是modelsim。如何包含modelsim的加密密钥?@fiz我用一些Vivado加密IP进行了一些测试,更新了答案。