如何將RTL產生netlist後讓其他人作synthesis? (SOC) (ISE)http://www.cnblogs.com/oomusou/archive/2011/02/12/ise_ngc

保护RTL代码的方法
本文介绍了一种在与其他团队合作时保护RTL代码的方法,通过仅提供综合后的netlist文件而非原始RTL代码来确保代码的安全性。

(原創) 如何將RTL產生netlist後讓其他人作synthesis? (SOC) (ISE)

Abstract
有時我們與其他人一起合作,又想保護自己的RTL code,但又希望別人可以作synthesis、simulation與implementation,此時我們希望只給對方synthesis後的netfile file,而不要給對方RTL code,我們該怎麼做呢?

Introduction
使用環境:Xilinx ISE 12.3

將自己的RTL合成出netlist file

假設以下是我們想合成的RTL code

counter.v / Verilog

复制代码
     
1 /*
2 (C) OOMusou 2011 http://oomusou.cnblogs.com
3
4 Filename : counter.v
5 Synthesizer : Xilinx ISE 12.3
6 Description : generate netlist file (*.ngc)
7 Release : 02/12/2011 1.0
8   */
9
10   module counter (
11 clk,
12 rst_n,
13 cnt_o
14 );
15
16   input clk;
17   input rst_n;
18   output [ 1 : 0 ] cnt_o;
19
20 reg [ 1 : 0 ] cnt_o;
21
22 always @( posedge clk or negedge rst_n)
23 if ( ~ rst_n)
24 cnt_o <= 2 ' h0;
25 else
26 cnt_o <= cnt_o + 1 ' b1;
27
28 endmodule
复制代码

Step 1:

New Project

ngc001

指定project名稱與路徑

Step 2:

設定FPGA型號,並使用Xilinx XST作為synthesizer

ngc002

Step 3:
Project Summary

ngc003

Step 4:

Add Source

 ngc004

Step 5:

更改XST設定

ngc005

ngc006

選擇Category選項,並將Property display level選擇Advanced;

1.不要選擇Add I/O Buffers:一般來說,XST會為Top Module加上I/O Buffer,但因為目前我們的RTL算是IP,只是其中的一小部份,所以不需加上I/O Buffer。

2.設定Number of Clock Buffers為0:一般來說,XST會為clk信號與很多fanout的信號加上Clock Buffer,由於我們只是IP,算是其中的一小部份,所以不用加上Clock Buffers。

Step 6:

使用Xilinx XST進行Synthesize,產生netlist file:counter.ngc

 

將netlist file讓其他人作Synthesis

Step 1:

將counter.ngc與counter.v複製到對方project的目錄下

由於我們netlist只是其中一小部份,只要將counter.ngc給對方,並將counter.v的外殼給對方就好,內部的code不需給,如此就可以保護我們的RTL code。

counter.v / Verilog

复制代码
     
1 /*
2 (C) OOMusou 2011 http://oomusou.cnblogs.com
3
4 Filename : counter.v
5 Synthesizer : Xilinx ISE 12.3
6 Description : generate netlist file (*.ngc)
7 Release : 02/12/2011 1.0
8 */
9
10 module counter (
11 clk,
12 rst_n,
13 cnt_o
14 );
15
16 input clk;
17 input rst_n;
18 output [ 1 : 0 ] cnt_o;
19
20
21 endmodule
复制代码

Step 2:

對方的Top Module

counter_top.v / Verilog

复制代码
     
1 /*
2 (C) OOMusou 2011 http://oomusou.cnblogs.com
3
4 Filename : counter_top.v
5 Synthesizer : Xilinx ISE 12.3
6 Description : top module for counter_top
7 Release : 02/12/2011 1.0
8 */
9
10 module counter_top (
11 clk,
12 rst_n,
13 cnt_o
14 );
15
16 input clk;
17 input rst_n;
18 output [ 1 : 0 ] cnt_o;
19
20 counter u_counter (
21 .clk(clk),
22 .rst_n(rst_n),
23 .cnt_o(cnt_o)
24 );
25
26 endmodule
复制代码

這是對方的top module,實務上當然不會這麼簡單,還不過由於我們只是IP,只是其中的一部份而已,所以在top module中使用我們的IP。

Step 3:

進行Synthesis與Implementation

或許你會問,我們給了一個沒有body的counter.v與counter.ngc,真的對方可以合成嗎?事實上,XST會為每一個.v檔synthesize相對應的netlist (*.ngc),當synthesize到counter.v時,發現已經存在counter.ngc,就是把它當成block box使用,以下是ISE所產生的warning:

     
WARNING:Xst: 2211 - " counter.v " line 20 : Instantiating black box module <counter>.

完整程式碼下載
counter.7z (自己IP的project)
counter_top.7z (對方的project)

Conclusion
一般人應該不會有這種需求,我是因為在工作上跟其他公司合作,當初簽約時我們只答應提供netlist給對方作simulation與verification,並不提供RTL,所以才會找出這種方式,因為頗為特殊,特別做下紀錄。

全文完。

分类: ISE, SOC
2
0
(请您对文章做出评价)
« 上一篇: (筆記) Delegate的再進化:Action Generic Delegate (.NET) (C#)
» 下一篇: (筆記) 如何使用Visual C++ 6.0開發Win32 DLL? (C/C++) (VC++)

posted on 2011-02-12 23:22 真 OO无双 阅读(4296) 评论(3) 编辑 收藏

评论

#1楼 2011-02-14 17:59Sivar  

1、modelsim中使用`protected 和 `endprotected 加密RTL代码,将产生的.vp文件给对方;
2、将modelsim编译后的目录和数据(.dat,.asm,.vhd等)做一个库给对方;
作simulation和verification的话,不知道这2种是否可行?加密之后合成(综合)工具还能合成(综合)么?
http://pic.cnitblog.com/face/u226864.gif   回复引用

#2楼[楼主] 2011-02-15 00:43真 OO无双  

@Sivar
謝謝你的建議,我來實驗一下再跟大家報告
https://i-blog.csdnimg.cn/blog_migrate/444cc3d68edd21a5ead4e47e14330f01.gif   回复引用

#3楼22915062012/1/11 13:10:55 2012-01-11 13:10sheldon_lk  

blackbox?
   回复引用

<think> 我们在处理Vivado中的文件路径错误时,需要根据引用信息和常见解决方法进行综合判断。 用户问题:查找在Vivado中出现'Can not find file: ../../../../../rtl/'错误的解决方案 分析: 错误信息提示找不到文件,路径为相对路径:../../../../../rtl/ (向上五级目录下的rtl文件夹) 可能原因: 1. 文件路径设置错误,实际文件不在该位置。 2. 工程移动导致相对路径失效。 3. 工程中引用的文件被删除或移动。 4. 引用[3]中提到路径过长也可能是问题(但此处是找不到文件,且路径中有多个“../”,可能已经超出了实际目录层级) 解决方案: 1. 检查文件是否存在:在文件系统中导航到工程目录,然后按照相对路径(向上五级)查看是否存在rtl文件夹以及所需文件。 注意:如果工程目录层级不够深,向上五级可能已经超出了工程目录,甚至到了根目录之外,这是无效的。 2. 修正文件路径: - 如果文件确实存在,但路径不对,可以重新添加文件(移除错误的路径引用,添加正确路径)。 - 在Vivado工程中,找到引用该文件的模块(可能是IP核、源文件等),修改路径为正确路径。 3. 使用相对路径时,确保路径相对于工程文件(.xpr)是正确的。如果工程被移动,建议使用相对于工程的路径(例如,将rtl文件夹放在工程目录下,然后使用相对路径如./rtl/xxx)。 4. 如果是因为路径过长导致的,考虑将工程移动到较短的路径下(引用[3]提到路径过长可能导致问题)。 5. 如果错误来自于IP核,检查IP核的路径设置。有时IP核生成时会使用绝对路径,当工程移动后就会出错。可以重新生成IP核或重置IP核路径。 步骤建议: a. 打开Vivado工程,在Sources面板中查看是否有文件带有“?”标记,表示文件丢失。右键单击该文件,选择“Remove Files from Project...”移除(如果确定路径错误),然后重新添加正确路径下的文件。 b. 如果是IP核错误,在IP Sources面板中找到对应IP,右键选择“Upgrade IP”或重新生成IP。 c. 检查工程设置中的IP库路径:在菜单栏中选择“Tools” -> “Project Settings” -> “IP” -> “IP Packager”,检查IP库路径是否正确。 注意:相对路径“../../../../../rtl/”表示从当前目录向上五级目录下的rtl文件夹,通常这不是一个好的做法,因为工程目录结构变化很容易导致路径失效。建议将所需文件放在工程目录内,使用更短的相对路径。 根据引用[3],如果是因为文件名过长或路径过长导致的问题,可以尝试将整个工程移动到更短的路径下,例如直接放在某个盘的根目录(如D:/project/)。 另外,引用[4]提到在查找字符串时要注意Radix设置,但此错误与查找无关,所以排除。 总结解决方案: 1. 验证文件是否存在。 2. 修正文件路径(重新添加文件或修改路径设置)。 3. 移动工程到较短路径(避免路径过长问题)。 4. 重新生成IP核(如果是IP核相关错误)。 如果用户无法确定文件位置,可以使用系统搜索功能查找缺失的文件名,然后将其复制到工程目录下的合适位置,再重新添加。 由于错误信息中路径为相对路径且层级很多,很可能是因为工程被移动后,原相对路径指向的位置不正确。因此,建议用户重新组织工程目录,将所需的源文件放在工程目录内部(或子目录),并使用相对路径(相对于工程文件)进行引用。 如果上述方法不能解决,可能需要检查工程中使用该路径的所有地方(如约束文件、脚本等)并修正。 </think> 根据您提供的错误信息`'Can not find file: ../../../../../rtl/'`和参考引用,以下是分步解决方案: ### 解决方案 1. **检查文件路径长度**(引用[3]): - 确保文件路径总长度不超过260字符(Windows限制)。 - 将工程移动到更短路径如`C:/Vivado_Projects/`,避免多层嵌套目录 - 重命名长文件夹名缩短路径 2. **验证文件存在性**: ```bash # 在终端执行(示例路径需替换实际位置) ls -la /your/project/path/../../../../../rtl/ ``` - 若文件不存在: - 重新添加文件:Vivado工程中右键点击Sources面板 → *Add Sources* → 指定正确文件位置 - 检查版本控制(如Git)是否遗漏文件 3. **修复相对路径错误**: - 在Vivado Tcl控制台执行(修复IP路径): ```tcl update_compile_order -fileset sources_1 generate_target all [get_files *.bd] # 更新Block Design路径 ``` - 修改.xci或.xdc文件中路径为**工程相对路径**(例:`./rtl/module.v`) 4. **重置IP缓存**(引用[3],[5]): - 删除工程中的`ip_cache/`和`.Xil/`文件夹 - 重新生成IP:Tools → *Report IP Status* → *Upgrade Selected IP* 5. **刷新文件依赖**: ```tcl reset_project # 重置工程配置 launch_runs synth_1 -jobs 8 # 重新综合 ``` ### 预防措施 - 创建工程时使用**绝对路径**或**顶层相对路径**(如`$PROJ_DIR/rtl`) - 定期执行`write_project_tcl -force`备份路径配置 - 复杂工程使用`archive_project`打包所有依赖文件 > **典型修复案例**:某项目因路径`D:/very/long/.../project/`超出长度限制,移动至`D:/FPGA/proj/`后错误消失(引用[3])。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值