1

供应商正在使用将一些代码编译成原始 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 加密密钥?

4

2 回答 2

1

如果 EDIF 是加密的,write_vhdl 几乎肯定会产生另一个加密的网表。该 VHDL 网表可能会在 Modelsim 中进行模拟,但我猜不会。

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

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

于 2017-03-31T17:06:40.910 回答
1

Modelsim 无法模拟 EDIF。您需要将 EDIF 转换为可以模拟的格式。您提到 Vivado,因此您将使用write_verilogwrite_vhdl转换这些。

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

write_vhdl -mode funcsim -cell test_ila/U0 ila_funcsim.vhd

现在,test_ila是我在顶层创建的实例,并且U0是里面的加密实例。生成的 VHDL 只是 UNISIM 原语的网表。它在 Modelsim 下愉快地编译。网表中没有加密的 IP。

所以,我想你有这样的事情:

component encrypted_ip is
...
end component encrypted_ip;

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

于 2016-05-12T15:25:35.073 回答