怎么知道RTL Schematic中的instance与哪段代码对应呢
2013-06-23 20:49
218 查看
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下:
代码:
关于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中是做不到的。
注意:
对于ISE Navigator,只有在RTL schematic中才能追踪某个instance的代码来源,在technology schematic中是不能追踪的;
相应的,在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的代码来源。
另外在planahead中还可以通过右键的菜单找到某个instance的defination,这在ISE中也是没有的;
关于RTL schematic与technology schematic的区别,详见:/article/6550050.html
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下:
代码:
module asynchronous_fifo1( wrst_n, wclk, winc, wdata, wfull, rrst_n, rclk, rinc, rdata, rempty ); parameter DATASIZE = 8; //FIFO中数据宽度 parameter ADDRSIZE = 4; //FIFO地址宽度 input wrst_n; input wclk; input winc; input [DATASIZE-1 : 0] wdata; output wfull; input rrst_n; input rclk; input rinc; output [DATASIZE-1 : 0] rdata; output rempty; wire [ADDRSIZE-1 : 0] waddr; wire [ADDRSIZE : 0] wptr; wire [ADDRSIZE : 0] rq2_wptr; wire [ADDRSIZE-1 : 0] raddr; wire [ADDRSIZE : 0] rptr; wire [ADDRSIZE : 0] wq2_rptr; wire wea; //向RAM中写数据或从中读数据 assign wea = winc & (!wfull); fifo_mem fifo_mem_u ( .clka(wclk), // input clka .wea(wea), // input [0 : 0] wea .addra(waddr), // input [3 : 0] addra .dina(wdata), // input [7 : 0] dina .clkb(rclk), // input clkb .addrb(raddr), // input [3 : 0] addrb .doutb(rdata) // output [7 : 0] doutb ); //产生写地址waddr、写指针wptr、满信号full wptr_full #(ADDRSIZE) wptr_full_u ( .wrst_n(wrst_n), .wclk(wclk), .winc(winc), .wq2_rptr(wq2_rptr), .wfull(wfull), .waddr(waddr), .wptr(wptr) ); //产生读地址raddr、读指针rptr、空信号empty rptr_empty #(ADDRSIZE) rptr_empty_u ( .rrst_n(rrst_n), .rclk(rclk), .rinc(rinc), .rq2_wptr(rq2_wptr), .rempty(rempty), .raddr(raddr), .rptr(rptr) ); //两个时钟域时间的接口,将读时钟域下的rptr同步到写时钟域,得到wq2_rptr sync_r2w #(ADDRSIZE) sync_r2w_u ( .wrst_n(wrst_n), .wclk(wclk), .rptr(rptr), .wq2_rptr(wq2_rptr) ); //两个时钟域时间的接口,将写时钟域下的wptr同步到读时钟域,得到rq2_wptr sync_w2r #(ADDRSIZE) sync_w2r_u ( .rrst_n(rrst_n), .rclk(rclk), .wptr(wptr), .rq2_wptr(rq2_wptr) ); 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中是做不到的。
注意:
对于ISE Navigator,只有在RTL schematic中才能追踪某个instance的代码来源,在technology schematic中是不能追踪的;
相应的,在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的代码来源。
另外在planahead中还可以通过右键的菜单找到某个instance的defination,这在ISE中也是没有的;
关于RTL schematic与technology schematic的区别,详见:/article/6550050.html
相关文章推荐
- 今天才知道怎么插入代码!!!!!!!!!
- 怎么知道自己的代码或者循环执行时候,同时有几个功能单元在并行
- ISE综合后得到的RTL图如何与硬件对应起来,怎么知道每个element的功能
- 这么多人,AI怎么知道你说的是哪个? | 李飞飞团队CVPR论文+代码
- 安卓小记(一般用到的代码但不用记住 知道怎么用)
- 怎么知道鼠标是向前滚动还是向后滚的了js代码
- 怎么查看Java代码对应的汇编
- 怎么从Backtrace log,找到对应的代码行
- ISE综合后得到的RTL图如何与硬件对应起来,怎么知道每个element的功能
- 如果不用MFC,直接使用API写一个Windows程序,需哪些步骤?MFC是怎么做到菜单点击后,响应对应的代码的?
- 记住一句话,阅读优秀的代码可以知道怎么写,做项目,可以解决问题!
- git branch和git tag 请问怎么取得git 打好的tag所对应的代码呢?
- logback是怎么知道java代码的行数的?
- php 二维数组 知道keyvalue 怎么得到对应的value
- 怎么才能知道我点击了cell上的按钮所对应的是那一行的cell
- android 标签对应的代码怎么写alignParentRight、marginRight
- 怎么在网站中正确使用JQuery代码
- java怎么创建目录(删除/修改/复制目录及文件)代码实例
- 知道这20个正则表达式,能让你少写1,000行代码
- 利用libsvm测试小的数据集成功,知道怎么传参数了