您的位置:首页 > 编程语言

怎么知道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下:

代码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: