RTL Patch完全遵循Verilog语法,模块名字与被ECO的模块相同,只是用GOF关键字把端口连接指导写在注释中。
在综合时通常会保留寄存器的名字,例如,状态机“current_state”的寄存器名字是 current_state_reg_*_或\current_state_reg[*]。在ECO时,这些名字用于RTL Patch的端口连接中。
端口连接的定义规则
下面是几种类型的端口连接的定义:
不需要GOF关键字指导。输入端口应该直接写成被ECO模块的输入端口。例如,“input clock;”
不需要GOF关键字指导,输出端口应该直接写成被ECO模块的输出端口。例如,“output proc_active;”
当输入由触发器的Q端或层次化实例的输出引脚驱动的,需要GOF关键字来指导连接。
例如,“input [1:0] current_state_Q;//GOF current_state_reg_*_/Q”表示RTLPatch的输入端口current_state_Q[0]需要接到current_state_reg_0_/Q, current_state_Q[1]需要接到current_state_reg_1_/Q。
当实例名称中有反斜线符号时,删除反斜线符号和空格。例如,“\current_state_reg[0]/Q”应该写成“current_state_reg[0]/Q”。
在语句“input pll_stable;//GOF u_pll/pll_stable”中,输入pll_stable由u_pll的输出引脚pll_stable驱动。
输入端口由内部逻辑的输入引脚驱动。因为内部逻辑的输入引脚在被ECO模块里是存在的,所以RTL Patch的输入端口就直接接到内部逻辑的输入引脚的前级驱动的输出引脚上。
在语句“input current_state_D;//GOF current_state_reg/D”中,假设内部逻辑 current_state_reg/D在ECO之前由U456/Z驱动,那么GOFECO时就把current_state_D连接到U456/Z。
输入端口由ECO之前的输出端口的前级驱动来驱动。输出端口在被ECO设计里是存在的,输入端口就连接到原来驱动的输出端。
在语句“input state_valid_ORI;//GOF state_valid”中,假设ECO之前输出端口state_valid由U123/Z驱动,那么GOF ECO时就把state_valid_ORI连接到U123/Z。
输出端口驱动触发器的D端或层次化实例的输入引脚,触发器和层次化实例在被ECO设计里存在。
在语句“output [1:0] current_state_D;//GOF current_state_reg_*_/D”中,ECO后,current_state_D[0]将驱动current_state_reg_0_/D,current_state_D[1]将驱动current_state_reg_1_/D。
在语句“output pll_start;//GOF u_pll/pll_start”中,ECO后,pll_start将驱动u_pll的输入引脚pll_start。
如果用户准确知道内部逻辑ECO的位置,也可以直接将输出端口连到这个单元的输入引脚。
例如,“output eco_net_valid;//GOF U567/A”是直接用eco_net_valid来驱动U567/A引脚。
指导ECO,生成新的输入端口。
在语句“input new_enable;//GOF_NEW”中,将生成新的输入端口new_enable。
指导ECO,生成新的输出端口。
在语句“output new_enable;//GOF_NEW”中,将生成新的输出端口new_enable。