ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

HDL Compiler:工具简介

HDL Compiler:工具简介 相关阅读HDL Compilerhttps://blog.csdn.net/weixin_45791458/category_12893238.html?spm1001.2014.3001.5482HDL Compiler是一个内置于Design Compiler的工具它用于将HDL描述转换为GTECH格式或者说Generic Technology格式的网表该网表随后由Synopsys综合工具用于创建优化并映射到具体工艺的网表。简单理解对于例1所示的RTL代码当使用analyze/elaborate命令或read_file命令读取设计文件后它将会被转化为GTECH网表如图1所示。// 例1 module and_or_gate( input a, input b, input c, output and_out, output or_out ); assign and_out a b; assign or_out a | c; endmodule图1 GTECH网表使用report_cell命令可以清晰地看出C8和C9是来自gtech库的实例它们的单元名分别为GTECH_AND2和GTECH_OR2以GTECH开头并所有字母大写是gtech库单元的特点。**************************************** Report : cell Design : and_or_gate Version: U-2022.12-SP1 Date : Wed Feb 12 00:16:03 2025 **************************************** Attributes: b - black box (unknown) h - hierarchical n - noncombinational r - removable u - contains unmapped logic Cell Reference Library Area Attributes -------------------------------------------------------------------------------- C8 GTECH_AND2 gtech 0.000000 u C9 GTECH_OR2 gtech 0.000000 u -------------------------------------------------------------------------------- Total 2 cells 0.000000使用list_libs命令可以查看加载到内存的逻辑库可以看出其中gtech库存在于Design Compiler的安装路径/home/summer/Synopsys/syn/U-2022.12-SP1/libraries/syn之中。Logical Libraries: ------------------------------------------------------------------------- Library File Path ------- ---- ---- gtech gtech.db /home/summer/Synopsys/syn/U-2022.12-SP1/libraries/syn standard.sldb standard.sldb /home/summer/Synopsys/syn/U-2022.12-SP1/libraries/syn saed32hvt_ss0p75vn40c saed32hvt_ss0p75vn40c.db /home/summer/Desktop/testgtech库无需显式读取在使用analyze/elaborate命令或read_file命令读取设计文件时它就自动读取了。使用report_lib命令需要安装Library Compiler可以显示逻辑库中的所有单元在路径/home/summer/Synopsys/syn/U-2022.12-SP1/dw/doc下可以找到gtech库的手册dw_gtech_databook.pdf里面详细描述了所有GTECH单元的信息如图2所示。图2 GTECH_AND2单元的详细信息进阶理解在“简单理解”一章中我们学习了HDL Compiler是如何处理简单的组合逻辑的而对于时序逻例如触发器或锁存器HDL Compiler会将其用通用时序单元SEQGEN或者称为Generic/UnmappedSequential Cell表示SEQGEN的框图如图3所示。图3 SEQGEN及其引脚表示SEQGEN单元的引脚连接是由具体的RTL代码决定的例2展示了一个异步复位D触发器的RTL代码和其对应的SEQGEN连接如图4所示。// 例2 module D_FF ( input wire clk, input wire rst_n, input wire d, output reg q ); always (posedge clk or negedge rst_n) begin if (!rst_n) q 1b0; else q d; end endmodule图4 DFF的SEQGEN实现值得注意的是图4中还包括一个GTECH反相器这是为了建模低电平异步复位。读取命令的结果如下所示显示HDL Compiler根据RTL代码推断出了一个名为q_reg的触发器。Inferred memory devices in process in routine D_FF line 8 in file /home/summer/Desktop/test/example.v. | Register Name | Type | Width | Bus | MB | AR | AS | SR | SS | ST | | q_reg | Flip-flop | 1 | N | N | Y | N | N | N | N | 可综合操作符对于一些复杂的逻辑HDL Compiler会将其表示为可综合操作符而对于部分可综合操作符Design Compiler将使用DesignWare组件实现。表1列出了部分RTL中的操作符以及对应的可综合操作符。表1 部分RTL操作符与其对应的可综合操作符RTL操作符可综合操作符加法ADD_UNS_OP、ADD_UNS_CI_OP、ADD_TC_OP、ADD_TC_CI_OP-减法SUB_UNS_OP、SUB_UNS_CI_OP、SUB_TC_OP、SUB_TC_CI_OP*乘法MULT_UNS_OP、MULT_TC_OP/除法DIV_UNS_OP、MOD_UNS_OP、REM_UNS_OP、DIVMOD_UNS_OP、DIVREM_UNS_OP、DIV_TC_OP、MOD_TC_OP、REM_TC_OP、DIVMOD_TC_OP、DIVREM_TC_OP小于LT_UNS_OP、LT_TC_OP大于GT_UNS_OP、GT_TC_OP小于等于LEQ_UNS_OP、LEQ_TC_OP大于等于GEQ_UNS_OP、GEQ_TC_OP等于EQ_UNS_OP、EQ_TC_OP!不等于NE_UNS_OP、NE_TC_OP?:三目运算符、if语句、case语句、向量位选、数组读取SELECT_OP、MUX_OP逻辑左移ASH_UNS_TC_OP、ASH_UNS_UNS_OP逻辑右移ASHR_UNS_TC_OP、ASHR_UNS_UNS_OP算数左移ASH_TC_TC_OP、ASH_TC_UNS_OP算数右移ASH_UNS_TC_OP、ASH_UNS_UNS_OP从上表中可以看出一个RTL操作符会根据具体情况映射到不同的可综合操作符。以加法操作符为例例3展示了加数为无符号数的情况图5为HDL Compiler的转换结果例4展示了加数为有符号数的情况图6为HDL Compiler的转换结果。// 例3 module three_bit_adder( input [2:0] a, input [2:0] b, output [2:0] sum, output carry ); assign {carry, sum} a b; endmodule图5 映射后的加法操作符无符号// 例4 module three_bit_adder( input signed [2:0] a, input signed [2:0] b, output signed [2:0] sum, output carry ); assign {carry, sum} a b; endmodule图6 映射后的加法操作符有符号部分可综合操作符将被Design Compiler最终根据综合库或者称为DesignWare库实现综合库是一个可重用电路设计的集合与Synopsys的综合环境紧密集成。在综合过程中Design Compiler会从综合库中选择速度和面积优化最优的组件。综合库分为标准综合库standard.sldb或者称为Basic DW以及进阶综合库dw_foundation.sldb或者称为Licensed DW一般来说compile命令默认使用标准综合库除非将进阶综合库添加到synthetic_library中compile_ultra命令可以使用标准综合库和进阶综合库自动添加。下面详细分析RTL操作符是如何实现的首先按照之前的介绍RTL操作符经过HDL Compiler会转换为可综合操作符根据综合库信息可综合操作符会绑定到DesignWare组件或者说Synthetic modules而DesignWare组件有多种实现方式如图7所示。图6 RTL操作符的映射过程以上的方法称为操作符推断还可以直接显式例化DesignWare组件但需要提供相关参数如在例5中显式例化了一个乘法器DW02_mult提供了输入位宽参数。// 例5 module top(input [9:0]A, B, output [19:0]PRODUCT); DW02_mult #(.A_width(10), .B_width(10)) (.A(A), .B(B), .PRODUCT(PRODUCT)); endmodule有些DesignWare组件只能显式例化而无法操作符推断比如RAM如下所示。DW_ram_r_w_s_lat #(WIDTH,DEPTH) memory(.clk(push_clk), .cs_n(1b0), .wr_n(~push), .rd_addr(rd_address), .wr_addr(wr_address), .data_in(data_in), .data_out(dataout));顺带一提如果想强制指定DesignWare组件最终的实现方式可以显式例化DesignWare组件并在Design Compiler中使用set_implementation命令如果使用compile_ultra命令Design Compiler可能拒绝用户设置的实现方式。与gtech库的手册dw_gtech_databook.pdf类似DesignWare组件的手册也在路径/home/summer/Synopsys/syn/U-2022.12-SP1/dw/doc下名为dwbb_userguide.pdf。注意事项如果设计中存在大概率除GTECH单元外的未映射单元如SEQGEN单元、可综合操作符且此时用户想将设计保存如读取RTL代码后保存展开后的设计则需要将其保存为ddc格式而不能是verilog格式否则在后续读取文件时会把除GTECH单元外的未映射单元识别为未解析的设计即黑盒如以下警告所示。Warning: Design *** contains unmapped components. The description might not simulate and might not be read back into Design Compiler. (UID-175)顺带一提PrimeTime甚至无法识别保存为ddc格式的除GTECH单元外的未映射单元而Formality虽然可以识别保存为verilog格式和ddc格式的SEQGEN单元但无法识别verilog格式和ddc格式的可综合操作符。
返回列表