dc_shell的change_names命令,信号[]/_

1.为什么要change_names

在rtl代码中多bit寄存器A的每一bit A[0],A[1],A[2]这样表示,但是在综合过程中是什么时候换成

A_reg_0_,A_reg_1_,A_reg_2_的呢?

另外一种情况使用generater 生成的代码 A.gen_mux[0], A.gen_mux[1], A.gen_mux[2],又是什么时候变为A.gen_mux_0_, A.gen_mux_1_, A.gen_mux_2_的呢?

首先说明的是:综合步骤是先加载约束再compile,compile是一个不停迭代的过程

正常情况下为了减少‘[]’等这种容易引起不同工具解析错误和理解错误的特殊符号,一般的综合flow都会使用change_names命令将这些命名修改。但是有的是在约束之前,有的是在约束之后change_names,这样我们在下sdc约束的时候就不知道用[x]还是_x_来匹配,当然此时可以用通配符?x?

所以总结起来 如果在吃sdc之前就change_names,那么sdc就应该使用_x_

如果在吃sdc之后change_names,那么sdc就应该使用[x]

反之 如果给定的sdc用了_x_那么我们的flow就应该在吃sdc之前运行change_names

如果给定的sdc用了[x],那么我们的flow就应该在吃sdc之后运行chang_names

2.change_names怎么使用

以下部分摘自

DC学习(11)综合产生的文件 - huanm - 博客园

特别字符是指除数字,字母或下划线以外的任何字符。当DC写出网表时,如果遇到信号Bus[31],它会插入反斜线符号“\”,将其变为\BUS[31]。但是总线Bus[31:0」中的一个信号还用Bus[31],没有用反斜线符号,也就是说设计里面可能会遇到即使用到了Bus[31]又用到Bus[31:0]这种情况(比如一组总线网A方向走,而同时又有这组总线的最高位充当某个控制信号)。这时方括弧不是名字的一部分,它们是位分隔符。这时候,同一个信号用了两种符号串表示(也就是Bus[31]和Bus[31:0]中的第31位是同一个信号,但是却有不同的字符串表示,这是不好的,一些工具可能解读出错)。最好的办法是把设计中的反斜线符号去掉,用有效的字符代替非有效(特别)的字符。

  用change_names命令可将设计中的特别字符去掉。change_names命令的其中一选项是“-rules",后面可跟用自定义的命名规则或Verilog命名规则。在DC中用define_name_rules命令来规定自定义的命名规则。例如我们可以用该命令来指定可以使用哪些字符,禁止使用哪些字符,名字的长度等。一般来说,Verilog命名规则可以处理几乎所有的特殊字符。

  执行change_names命令后,它会把不允许使用的字符用允许使用的字符来代替。VHDL语言中,多维数组(multi-dimensionalarrays)使用方括弧作为字下标的分隔符(word subscript delimiters)。为了避免使用反斜线符号,先使用change_names命令把字下标的分隔符转换为下划线。如下所示:

                  

                       

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值