• 怎么知道RTL Schematic中的instance与哪段代码对应呢


    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 = 8;  //FIFO中数据宽度
    16 parameter ADDRSIZE = 4;     //FIFO地址宽度                
    17 
    18 input wrst_n;
    19 input wclk;
    20 input winc;
    21 input [DATASIZE-1 : 0] wdata;
    22 output wfull;
    23 
    24 input rrst_n;
    25 input rclk;
    26 input rinc;
    27 output [DATASIZE-1 : 0] rdata;
    28 output rempty;
    29 
    30 
    31 wire [ADDRSIZE-1 : 0] waddr;
    32 wire [ADDRSIZE : 0] wptr;
    33 wire [ADDRSIZE : 0] rq2_wptr;
    34 
    35 wire [ADDRSIZE-1 : 0] raddr;
    36 wire [ADDRSIZE : 0] rptr;
    37 wire [ADDRSIZE : 0] wq2_rptr;
    38 
    39 wire wea;
    40 
    41 //向RAM中写数据或从中读数据
    42 assign wea = winc & (!wfull);
    43 
    44 fifo_mem fifo_mem_u (
    45   .clka(wclk), // input clka
    46   .wea(wea), // input [0 : 0] wea
    47   .addra(waddr), // input [3 : 0] addra
    48   .dina(wdata), // input [7 : 0] dina
    49   .clkb(rclk), // input clkb
    50   .addrb(raddr), // input [3 : 0] addrb
    51   .doutb(rdata) // output [7 : 0] doutb
    52 );
    53 
    54 //产生写地址waddr、写指针wptr、满信号full
    55 wptr_full #(ADDRSIZE) wptr_full_u (
    56     .wrst_n(wrst_n), 
    57     .wclk(wclk), 
    58     .winc(winc), 
    59     .wq2_rptr(wq2_rptr), 
    60     .wfull(wfull), 
    61     .waddr(waddr), 
    62     .wptr(wptr)
    63     );
    64      
    65 //产生读地址raddr、读指针rptr、空信号empty     
    66 rptr_empty #(ADDRSIZE) rptr_empty_u (
    67     .rrst_n(rrst_n), 
    68     .rclk(rclk), 
    69     .rinc(rinc), 
    70     .rq2_wptr(rq2_wptr), 
    71     .rempty(rempty), 
    72     .raddr(raddr), 
    73     .rptr(rptr)
    74     );
    75      
    76 //两个时钟域时间的接口,将读时钟域下的rptr同步到写时钟域,得到wq2_rptr
    77 sync_r2w #(ADDRSIZE) sync_r2w_u (
    78     .wrst_n(wrst_n), 
    79     .wclk(wclk), 
    80     .rptr(rptr), 
    81     .wq2_rptr(wq2_rptr)
    82     );
    83      
    84 //两个时钟域时间的接口,将写时钟域下的wptr同步到读时钟域,得到rq2_wptr     
    85 sync_w2r #(ADDRSIZE) sync_w2r_u (
    86     .rrst_n(rrst_n), 
    87     .rclk(rclk), 
    88     .wptr(wptr), 
    89     .rq2_wptr(rq2_wptr)
    90     );
    91      
    92 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
  • 相关阅读:
    【MySQL案件】mysql登录-S失败
    python3使用smtplib发电子邮件
    oracle创建user具体指示
    设计模式的饕餮盛宴
    iOS使用UIScrollView实现左右滑动UITableView和UICollectionView
    MIFARE系列6《射频卡与读写器的通信》
    hdu1286 寻找新朋友 (欧拉功能)
    Python开发环境的搭建(win7)
    2014年度辛星完全解读html部分
    S2SH新手框架建立具体过程
  • 原文地址:https://www.cnblogs.com/youngforever/p/3151540.html
Copyright © 2020-2023  润新知