2013-06-23 20:15:47

ISE综合后可以看到RTL Schematic,但我们知道在RTL编码时,要经常问自己一个问题“我写的这段代码会综合成什么样的电路呢”。对于一个简单的设计,比如一个触发器,综合后的RTL电路可能只有一个instance,就是触发器,很直观。但对于一个比较大的设计,RTL Schematic就比较复杂,包含了很多instance,怎么知道RTL Schematic中的instance与哪段代码对应呢,也就是如何找到感兴趣的instance在RTL代码中的definition?

这个问题一直困扰了我很久,最近发现在ISE的RTL Schematic以及planahead的RTL Schematic都可以解决这个问题。

下面以一个异步FIFO为例,说明如何找到RTL Schematic中的instance对应的代码。

在ISE下:

代码:

  1. module asynchronous_fifo1(
  2. wrst_n,
  3. wclk,
  4. winc,
  5. wdata,
  6. wfull,
  7.  
  8. rrst_n,
  9. rclk,
  10. rinc,
  11. rdata,
  12. rempty
  13. );
  14.  
  15. parameter DATASIZE = ; //FIFO中数据宽度
  16. parameter ADDRSIZE = ; //FIFO地址宽度
  17.  
  18. input wrst_n;
  19. input wclk;
  20. input winc;
  21. input [DATASIZE- : ] wdata;
  22. output wfull;
  23.  
  24. input rrst_n;
  25. input rclk;
  26. input rinc;
  27. output [DATASIZE- : ] rdata;
  28. output rempty;
  29.  
  30. wire [ADDRSIZE- : ] waddr;
  31. wire [ADDRSIZE : ] wptr;
  32. wire [ADDRSIZE : ] rq2_wptr;
  33.  
  34. wire [ADDRSIZE- : ] raddr;
  35. wire [ADDRSIZE : ] rptr;
  36. wire [ADDRSIZE : ] wq2_rptr;
  37.  
  38. wire wea;
  39.  
  40. //向RAM中写数据或从中读数据
  41. assign wea = winc & (!wfull);
  42.  
  43. fifo_mem fifo_mem_u (
  44. .clka(wclk), // input clka
  45. .wea(wea), // input [0 : 0] wea
  46. .addra(waddr), // input [3 : 0] addra
  47. .dina(wdata), // input [7 : 0] dina
  48. .clkb(rclk), // input clkb
  49. .addrb(raddr), // input [3 : 0] addrb
  50. .doutb(rdata) // output [7 : 0] doutb
  51. );
  52.  
  53. //产生写地址waddr、写指针wptr、满信号full
  54. wptr_full #(ADDRSIZE) wptr_full_u (
  55. .wrst_n(wrst_n),
  56. .wclk(wclk),
  57. .winc(winc),
  58. .wq2_rptr(wq2_rptr),
  59. .wfull(wfull),
  60. .waddr(waddr),
  61. .wptr(wptr)
  62. );
  63.  
  64. //产生读地址raddr、读指针rptr、空信号empty
  65. rptr_empty #(ADDRSIZE) rptr_empty_u (
  66. .rrst_n(rrst_n),
  67. .rclk(rclk),
  68. .rinc(rinc),
  69. .rq2_wptr(rq2_wptr),
  70. .rempty(rempty),
  71. .raddr(raddr),
  72. .rptr(rptr)
  73. );
  74.  
  75. //两个时钟域时间的接口,将读时钟域下的rptr同步到写时钟域,得到wq2_rptr
  76. sync_r2w #(ADDRSIZE) sync_r2w_u (
  77. .wrst_n(wrst_n),
  78. .wclk(wclk),
  79. .rptr(rptr),
  80. .wq2_rptr(wq2_rptr)
  81. );
  82.  
  83. //两个时钟域时间的接口,将写时钟域下的wptr同步到读时钟域,得到rq2_wptr
  84. sync_w2r #(ADDRSIZE) sync_w2r_u (
  85. .rrst_n(rrst_n),
  86. .rclk(rclk),
  87. .wptr(wptr),
  88. .rq2_wptr(rq2_wptr)
  89. );
  90.  
  91. endmodule

关于FIFO的全部代码,上传到了pudn:http://www.pudn.com/downloads546/sourcecode/embedded/detail2254196.html
综合得到的RTL Schematic顶层模块如下:

假设我们要找rptr_empty_u对应的代码,先选中该模块,右键单击在弹出的菜单中选择open sorce of selected inatance即可跳转到定义该instance对应的RTL代码处。并用黄色的三角指针指出来,如下:

但有的较为底层的in,tance,只能跳转到包含该instance的module的开始或结尾。假设我们要找图中与门对应的代码,就只能跳转到包含该instance的module的开始,没有黄色指针,只是有光标,如下:

这可能是ISE的一个bug吧,但好在通过planahead可以解决。

下面是planahead下的操作。

在planahead下的综合后,打开RTL Schematic,如下所示:

同样地,要找rptr_empty_u对应的代码,先选中该模块,右键单击在弹出的菜单中选择 Go to Instantiation即可跳转到定义该instance对应的RTL代码处。并将光标指向所在的位置,如下:

要找出与门对应的代码,用同样的方法,就可以找到对应的RTL代码,如下:

非门同样也可跳转到正确的位置,这在ISE中是做不到的。

注意:

  1. 对于ISE Navigator,只有在RTL schematic中才能追踪某个instance的代码来源,在technology schematic中是不能追踪的;
  2. 相应的,在planahead中,没有 RTL Schematic 与Technology Schematic的概念,而是在不同的设计步骤有不同的schematic。在RTL Design后,看到的schematic对应ISE中的RTL Schematic,RTL Design是综合之前的步骤;在该步骤中的schematic可以追踪某个instance的代码来源。在Netlist Design后,看到的schematic对应ISE中的Technology Schematic,Netlist Design是综合之后的步骤。在该步骤中的schematic不可以追踪某个instance的代码来源。
  3. 另外在planahead中还可以通过右键的菜单找到某个instance的defination,这在ISE中也是没有的;
  4. 关于RTL schematic与technology schematic的区别,详见:http://www.cnblogs.com/youngforever/p/3155045.html

怎么知道RTL Schematic中的instance与哪段代码对应呢的更多相关文章

  1. 如何保存ISE综合后的RTL schematic为pdf

    如何保存ISE综合后的RTL schematic为pdf 2013-06-23 20:50:10 代码进行综合后,可以得到一个ngr文件,在ISE中打开该文件可以打开RTL schematic,这样每 ...

  2. C#获取数据库中的Instance

    如果我现在要写个代码生成器,连接数据库,那你得知道有哪些Database存在吧,不然咋整? 在VS中我们添加一个ADO.NET的实体模型 在选择数据库名称的时候就是获取了数据库中Database In ...

  3. java中 synchronized 的使用,确保异步执行某一段代码。

    最近看了个有关访问网络url和下载的例子,里面有几个synchronized的地方,系统学习下,以下内容很重要,记下来. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一 ...

  4. 机器学习:eclipse中调用weka的Classifier分类器代码Demo

    weka中实现了很多机器学习算法,不管实验室研究或者公司研发,都会或多或少的要使用weka,我的理解是weka是在本地的SparkML,SparkML是分布式的大数据处理机器学习算法,数据量不是很大的 ...

  5. 使用Auto Layout中的VFL(Visual format language)--代码实现自动布局【转】

    本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:API介绍 NSLayoutConstraint API 1 2 3 ...

  6. 转载自@机智的新手:使用Auto Layout中的VFL(Visual format language)--代码实现自动布局

    本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:API介绍 NSLayoutConstraint API 1 2 3 ...

  7. C#开发中使用Npoi操作excel实例代码

    C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...

  8. 2.C#中通过委托Func消除重复代码

    阅读目录   一:重复的代码 二:C#中通过委托Func消除重复代码 一:重复代码    public class Persion { public string Name { get; set; } ...

  9. .NET(C#)中不同级别的安全透明代码对类型的影响

    测试代码将测试一个方法和类默认在全部信任权限下和部分信任权限下的代码类型. 上面说的默认就是指未加入其他安全透明类型的特性. 代码类型可以是: 透明代码(Transparent Code) 关键代码( ...

随机推荐

  1. tomcat6.0添加ssi(*.shtml)配置

    1.去掉tomcat6中conf/web.xml关于ssi的注释 <servlet> <servlet-name>ssi</servlet-name> <se ...

  2. C#语言的Image和byte数组的互相转换

    /// <summary> /// 字节数组转换为图片 /// </summary> /// <param name="buffer">字节数组 ...

  3. double array trie 插入结点总结

    双数组Trie树索引的可操作性研究.pdf 提示:任一状态点的移动,会影响其Trie树中父节点的base值的选择以及兄弟结点位置的变动,而兄弟结点的移动又须变更相应的子节点的check值. 设待插入的 ...

  4. php获取客户端ip地址

    本文介绍一个,php获取客户端的IP地址的实例代码,有需要的朋友参考下吧. 获取客户端IP地址的代码,如下: 复制代码代码示例: <?php//取得客户端IP的函数function get_cl ...

  5. 学习VirtualEnv和Nginx+uwsgi用于django项目部署

    以下叙述中用到的操作系统:Linux CentOS 6.X. 最近几天了解一下VirtualEnv,Apache+Daemon mode,Nginx+uwsgi的概念,并且在项目中实验性部署了一下(目 ...

  6. 关于Segmentation fault (core dumped)几个简单问题的整理

    有的程序可以通过编译,但在运行时会出现Segment fault(段错误).这通常都是指针错误引起的.但这不像编译错误一样会提示到文件一行,而是没有任何信息.一种办法是用gdb的step, 一步一步寻 ...

  7. Linux进程间通信IPC学习笔记之有名管道

    基础知识: 有名管道,FIFO先进先出,它是一个单向(半双工)的数据流,不同于管道的是:是最初的Unix IPC形式,可追溯到1973年的Unix第3版.使用其应注意两点: 1)有一个与路径名关联的名 ...

  8. WPF中让TextBlock每一个字符显示不同的颜色

    XAML代码: <TextBlock x:Name="tb"> <Run Foreground="Red">R</Run> ...

  9. ENVI/IDL中.sav和.pro文件用法的不同

    软件envi5.0 sp3 .sav是IDL binaryfile。 安装方法:把ENVIProgramGenerator.sav文件拷贝到…\Exelis\ENVI50\extensions\文件夹 ...

  10. 深度:ARC会导致的内存泄露

    iOS提供了ARC功能,很大程度上简化了内存管理的代码. 但使用ARC并不代表了不会发生内存泄露,使用不当照样会发生内存泄露. 下面列举两种内存泄露的情况. 1,循环参照 A有个属性参照B,B有个属性 ...