GOF9.0发布,终于不用重新综合网表了
RTL Patch ECO流程
独立的RTL Patch是一种带有特殊注释的Verilog文件。我们定义了一套特殊语法,写在模块端口定义语句后面的注释里,用于指导GOF自动ECO时如何连接端口。这种方法的优势是,RTL Patch里只需要描述改动过的逻辑。因为大多数连线名字在综合时被优化掉了,所以RTL Patch里应该把扇入和扇出扩展到已知的边界。已知边界就是等价的连线、输入端口、输出端口、触发器的引脚、层次化实例的引脚等。
RTL Patch的语法
RTL Patch完全遵循Verilog语法,模块名字与被ECO的模块相同,只是用GOF关键字把端口连接指导写在注释中。
在综合时通常会保留寄存器的名字,例如,状态机“current_state”的寄存器名字是 current_state_reg_*_或current_state_reg[*]。在ECO时,这些名字用于RTL Patch的端口连接中。
端口连接的定义规则
下面是几种类型的端口连接的定义:
类型1:输入直接连接
不需要GOF关键字指导。输入端口应该直接写成被ECO模块的输入端口。例如,“input clock;”
类型2:输出驱动被ECO模块的端口
不需要GOF关键字指导,输出端口应该直接写成被ECO模块的输出端口。例如,“output proc_active;”
类型3:输入由内部逻辑输出驱动
当输入由触发器的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驱动。
类型4:输入由内部逻辑的输入引脚驱动
输入端口由内部逻辑的输入引脚驱动。因为内部逻辑的输入引脚在被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。
类型5:输入由输出端口的前级驱动来驱动
输入端口由ECO之前的输出端口的前级驱动来驱动。输出端口在被ECO设计里是存在的,输入端口就连接到原来驱动的输出端。
在语句“input state_valid_ORI;//GOF state_valid”中,假设ECO之前输出端口state_valid由U123/Z驱动,那么GOF ECO时就把state_valid_ORI连接到U123/Z。
类型6:输出端口驱动内部单元的输入引脚
输出端口驱动触发器的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引脚。
类型7:新加输入端口
指导ECO,生成新的输入端口。
在语句“input new_enable;//GOF_NEW”中,将生成新的输入端口new_enable。
类型8:新加输出端口
指导ECO,生成新的输出端口。
在语句“output new_enable;//GOF_NEW”中,将生成新的输出端口new_enable。