Vivado使用误区与进阶——在Vivado中实现ECO功能
时间:02-17
来源:互联网
点击:
Tcl操作命令
在UG835中把Vivado支持的Tcl命令按照Category分类,这些列于Netlist目录下的命令就是实现ECO需要用到的那些。
通常涉及到增减cells的ECO基本分为三步实现:首先用create_cell / create_net 等创建相关cell和/或net,然后用disconnect_net / connect_net 等命令修正因为cell和net的改动而影响到的连接关系,最后用route_design加选项完成局部布线。
不同的Vivado版本对此类ECO修改有稍许不同的限制,例如在2014.1之后的版本上,需要在改变cell的连接关系前先用unplace_cell将cell从当前的布局位置上释放,在完成新的连接关系后,再用place_cell放到新的布局位置上。
具体操作上可以根据Vivado的提示或报错信息来改动具体的Tcl命令,但操作思路和可用的命令相差无几。
这是一个在Vivaod上实现probe功能的Tcl脚本,已经写成了proc子程序,简单易懂。可以直接调用,也可以做成Vivado的嵌入式扩展命令。调用其生成probe只需先source这个脚本,然后按照如下所示在Tcl Console中输入命令即可。
Vivado% addProbe inst_1/tmp_q[3] D9 LVCMOS18 my_probe_1
该脚本已经在Vivado2014.3和2014.4上测试过,一次只能完成一个probe的添加,而且必须按照上述顺序输入信号名,管脚位置,电平标准和probe名。因为不具备预检功能,可能会碰到一些报错信息而导致无法继续。例如选择的信号是只存在于SLICE内部的INTRASITE时,则无法拉出到管脚。再比如输入命令时拼错了电平标准等,也会造成Tcl已经部分修改Vivado数据库而无法继续的问题。此时只能关闭已经打开的DCP并选择不保存而重新来过。
用户可以根据自己的需要扩展这个Tcl脚本,也可以仿照这个Tcl的写法来实现其它的ECO需求。例如文章开始举例时提到过一个将RAMB输出一级的FF拉出到Fabric上实现的场景,基本的实现方法和思路也类似:先将RAMB的输出口REG的属性改为0,然后创建一个新的FF,将其输入与RAMB的输出连接,再将FF的输出与原本RAMB输出驱动的cell连接,并完成FF的时钟和复位端的正确连接,然后选择合适的位置放置这个新的FF,最后针对新增加的nets局部布线。
由此可见,用Tcl来实现的ECO虽然不及图形化界面来的简便直观,但是带给用户的却是最大化的自由。完全由用户来决定如何修改设计,那怕是在最后已经完成布局布线时序收敛的结果上,也能直接改变那些底层单元的连接关系,甚至是增减设计。
ECO在Vivado上的发展
经过了两年多的发展,在Vivado上实现ECO已经有了多种方式,除了前面提到的图形化上那些可用的技巧,还有用户自定义的Tcl命令和脚本等。随着Xilinx Tcl Store的推出,用户可以像在App Store中下载使用app一样下载使用Tcl脚本,简化了Tcl在Vivado上应用的同时,进一步扩展了Tcl的深入、精细化使用,其中就包括Tcl在ECO上的应用。
目前Vivado 2014.4版本上新增了很多有用的脚本。安装好Vivado后,只需打开Tcl Store,找到Debug Utilities,点击Install,稍等片刻,即可看到一个add_probe的Tcl proc被安装到了你的Vivado中。
这个add_probe是在上述addProbe例子的基础上扩展而来,不仅可以新增probe,而且可以改变现有probe连接的信号。此外,这个脚本采用了argument写法,点击程序可以看help,所以不一定要按照顺序输入信号、电平标准等选项,输错也没有问题。另外增加了预检和纠错功能,碰到问题会报错退出而不会改变Vivado数据库,效率更高。
此外,Tcl Store上还有很多其它好用的脚本,欢迎大家试用并反馈给我们宝贵意见。虽然里面关于ECO的脚本还很少,但我们一直在补充。此外Tcl Store是一个基于GitHub的完全开源的环境,当然也欢迎大家上传自己手中有用的Tcl脚本,对其进行补充。
总体来说,ECO是一个比较大的命题,因为牵扯到的改动需求太多,其实也很难限制在一个GUI界面中实现。这篇文章的目的就是为了让大家对在FPGA上实现ECO有个基本的认识,梳理看似复杂无序的流程,所谓观一叶而知秋,窥一斑而见全豹,希望能带给更多用户信心,用好Vivado其实一点都不难。
在UG835中把Vivado支持的Tcl命令按照Category分类,这些列于Netlist目录下的命令就是实现ECO需要用到的那些。
通常涉及到增减cells的ECO基本分为三步实现:首先用create_cell / create_net 等创建相关cell和/或net,然后用disconnect_net / connect_net 等命令修正因为cell和net的改动而影响到的连接关系,最后用route_design加选项完成局部布线。
不同的Vivado版本对此类ECO修改有稍许不同的限制,例如在2014.1之后的版本上,需要在改变cell的连接关系前先用unplace_cell将cell从当前的布局位置上释放,在完成新的连接关系后,再用place_cell放到新的布局位置上。
具体操作上可以根据Vivado的提示或报错信息来改动具体的Tcl命令,但操作思路和可用的命令相差无几。
这是一个在Vivaod上实现probe功能的Tcl脚本,已经写成了proc子程序,简单易懂。可以直接调用,也可以做成Vivado的嵌入式扩展命令。调用其生成probe只需先source这个脚本,然后按照如下所示在Tcl Console中输入命令即可。
Vivado% addProbe inst_1/tmp_q[3] D9 LVCMOS18 my_probe_1
该脚本已经在Vivado2014.3和2014.4上测试过,一次只能完成一个probe的添加,而且必须按照上述顺序输入信号名,管脚位置,电平标准和probe名。因为不具备预检功能,可能会碰到一些报错信息而导致无法继续。例如选择的信号是只存在于SLICE内部的INTRASITE时,则无法拉出到管脚。再比如输入命令时拼错了电平标准等,也会造成Tcl已经部分修改Vivado数据库而无法继续的问题。此时只能关闭已经打开的DCP并选择不保存而重新来过。
用户可以根据自己的需要扩展这个Tcl脚本,也可以仿照这个Tcl的写法来实现其它的ECO需求。例如文章开始举例时提到过一个将RAMB输出一级的FF拉出到Fabric上实现的场景,基本的实现方法和思路也类似:先将RAMB的输出口REG的属性改为0,然后创建一个新的FF,将其输入与RAMB的输出连接,再将FF的输出与原本RAMB输出驱动的cell连接,并完成FF的时钟和复位端的正确连接,然后选择合适的位置放置这个新的FF,最后针对新增加的nets局部布线。
由此可见,用Tcl来实现的ECO虽然不及图形化界面来的简便直观,但是带给用户的却是最大化的自由。完全由用户来决定如何修改设计,那怕是在最后已经完成布局布线时序收敛的结果上,也能直接改变那些底层单元的连接关系,甚至是增减设计。
ECO在Vivado上的发展
经过了两年多的发展,在Vivado上实现ECO已经有了多种方式,除了前面提到的图形化上那些可用的技巧,还有用户自定义的Tcl命令和脚本等。随着Xilinx Tcl Store的推出,用户可以像在App Store中下载使用app一样下载使用Tcl脚本,简化了Tcl在Vivado上应用的同时,进一步扩展了Tcl的深入、精细化使用,其中就包括Tcl在ECO上的应用。
目前Vivado 2014.4版本上新增了很多有用的脚本。安装好Vivado后,只需打开Tcl Store,找到Debug Utilities,点击Install,稍等片刻,即可看到一个add_probe的Tcl proc被安装到了你的Vivado中。
这个add_probe是在上述addProbe例子的基础上扩展而来,不仅可以新增probe,而且可以改变现有probe连接的信号。此外,这个脚本采用了argument写法,点击程序可以看help,所以不一定要按照顺序输入信号、电平标准等选项,输错也没有问题。另外增加了预检和纠错功能,碰到问题会报错退出而不会改变Vivado数据库,效率更高。
此外,Tcl Store上还有很多其它好用的脚本,欢迎大家试用并反馈给我们宝贵意见。虽然里面关于ECO的脚本还很少,但我们一直在补充。此外Tcl Store是一个基于GitHub的完全开源的环境,当然也欢迎大家上传自己手中有用的Tcl脚本,对其进行补充。
总体来说,ECO是一个比较大的命题,因为牵扯到的改动需求太多,其实也很难限制在一个GUI界面中实现。这篇文章的目的就是为了让大家对在FPGA上实现ECO有个基本的认识,梳理看似复杂无序的流程,所谓观一叶而知秋,窥一斑而见全豹,希望能带给更多用户信心,用好Vivado其实一点都不难。
Xilinx FPGA DSP 嵌入式 CMOS 相关文章:
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 基于PLB总线的H.264整数变换量化软核的设计(03-20)
- 迄今为止最牛的ASIC验证平台(05-22)
- 验证FPGA设计:模拟,仿真,还是碰运气?(08-04)