基于yosys实现求和运算的FPGA逻辑综合方法及装置

文档序号:168387 发布日期:2021-10-29 浏览:22次 >En<

阅读说明:本技术 基于yosys实现求和运算的FPGA逻辑综合方法及装置 (Yosys-based FPGA logic synthesis method and device for realizing summation operation ) 是由 王鑫楠 赵美飞 刘洋 于 2021-09-26 设计创作,主要内容包括:本发明提供了一种基于yosys实现求和运算的FPGA逻辑综合方法及装置,使用yosys将求和运算的用户电路描述文件解析生成语法树;根据语法树中的节点类型提取出描述求和模块的RTL级数据对象,形成RTL级数据对象集合;将RTL级数据对象集合转化为逻辑门级对象集合,建立逻辑门级对象之间的进位链信号连接;打印提取逻辑网表文件。通过将RTL级Cell对象的多位宽操作数进行拆分,建立多个单位宽的逻辑门级Cell对象集合,在新建逻辑门级Cell对象的同时新建表示求和运算产生的Wire类型的进位信号,由于逻辑门级对象中增加了进位信号,并且将进位信号作为操作数,减少了求和运算中的逻辑单元块的使用数量。(The invention provides an FPGA logic synthesis method and device for realizing summation operation based on yosys, which is characterized in that the yosys is used for analyzing a user circuit description file of the summation operation to generate a syntax tree; extracting RTL-level data objects describing the summation module according to the node types in the syntax tree to form an RTL-level data object set; converting the RTL-level data object set into a logic gate-level object set, and establishing carry chain signal connection between logic gate-level objects; and printing and extracting the logic netlist file. The method comprises the steps of splitting a multi-bit wide operand of an RTL-level Cell object, establishing a plurality of single-bit wide logic gate-level Cell object sets, and establishing a Wire type carry signal generated by summation operation while establishing a new logic gate-level Cell object.)

基于yosys实现求和运算的FPGA逻辑综合方法及装置

技术领域

本发明属于FPGA领域,尤其是涉及一种基于yosys实现求和运算的FPGA逻辑综合方法及装置。

背景技术

FPGA(现场可编程门阵列)是数字电路设计领域中一种很常规的实现途径,相比于ASIC(专用集成电路),FPGA可以通过编程的方式控制内部可编程开关的连接,实现对电路功能的任意定制。并且FPGA的编程速度非常快,如果芯片在系统级测试时发现问题,可以通过重新编程快速解决,在生产周期方面有其压倒性优势,目前在全球范围已经具有相当规模的产业。

EDA(电子设计自动化)软件是FPGA芯片设计必备的开发辅助软件,负责将用户高层次的电路描述编译成用于配置FPGA芯片可编程开关的配置下载文件,而逻辑综合算法是其中操作流程中的重要一环,功能是将高层次、行为级的电路描述文件转化成由FPGA逻辑单元块组成的逻辑网表文件。

发明内容

本发明要解决的技术问题是怎样使用较少的逻辑单元块实现求和运算,提出了一种基于yosys实现求和运算的FPGA逻辑综合方法及装置。

为解决上述技术问题,本发明所采用的技术方案是:

一种基于yosys实现求和运算的FPGA逻辑综合方法,包括以下步骤:步骤1:使用yosys开源程序将求和运算的行为级用户电路描述文件解析生成语法树;

步骤2:对所述语法树中的全部节点进行遍历,根据所述语法树中的节点类型提取出描述求和功能模块的RTL级数据对象,形成RTL级数据对象集合;

步骤3:将所述RTL级数据对象集合中的每一个RTL级对象转化为具有进位链信号连接的逻辑门级对象集合;

步骤4:遍历所述RTL级数据对象集合,得到所有的逻辑门级对象集合,将所述逻辑门级对象集合映射为物理门级对象打印提取逻辑网表文件。

进一步地,步骤3还包括:对所述逻辑门级对象集合进行优化。

进一步地,步骤1中所述行为级用户电路描述文件为使用Verilog格式硬件描述语言的用户电路设计文件。

进一步地,步骤3中将所述RTL级数据对象集合中的每一个RTL级对象转化为具有进位链信号连接的逻辑门级对象集合的方法是:

步骤3.1:对RTL级数据对象的多位宽操作数进行拆分,建立与RTL级数据对象的两个操作数中具有较大位宽的操作数的位宽数量相对应的单位宽逻辑门级Cell对象;

步骤3.2:在新建单位宽逻辑门级Cell对象的同时新建表示求和运算产生的Wire类型的进位信号;

步骤3.3:依次将RTL级Cell对象的输入输出端口连接信息,逐位赋值给新建的各单位宽逻辑门级Cell对象的输入输出端口连接信息;

步骤3.4:所述逻辑门级Cell对象建立有进位输入端口和进位输出端口,所述进位信号连接当前新建的逻辑门级对象的进位输出端口以及下一个相邻的逻辑门级对象的进位输入端口;

步骤3.5:根据逻辑门级Cell对象的输入输出端口连接状态信息,得到所述逻辑门级Cell对象的端口连接参数FUN值,根据端口连接参数FUN值得到所述逻辑门级Cell对象的功能参数值LUT。

进一步地,步骤3.3中逐位赋值的具体方法是:

步骤3.3.1:分别获取当前RTL级cell对象的A、B输入端连接信号sig_a、sig_b和Y输出端信号sig_y,获取sig_a、sig_b信号位宽最小值记录为N;

步骤3.3.2:创建N个逻辑门级Cell对象,将RTL级cell对象的A、B输入端连接信号的第i位sig_a[i]、sig_b[i]分别赋值给第i个逻辑门级Cell对象的两个输入端,将RTL级cell对象的第i位Y输出端信号sig_y[i] 赋值给第i个逻辑门级Cell对象的输出端。

步骤3.3.3:判断sig_a和sig_b信号位宽是否一致,若一致则结束,否则获取sig_a和sig_b位宽较大者,位宽较大者的值赋值给临时对象extra_sig,计算位宽为M,i从N+1开始循环至M结束,继续创建M-N个单位宽逻辑门级Cell对象,为该M-N个逻辑门级Cell对象的其中一个输入端口赋值extra_sig[i],输出端口赋值sig_y[i]。

进一步地,步骤3中对所述逻辑门级对象集合进行优化的方法是:

当逻辑门级对象其中一个输入端口连接信号为固定0时,判断是否有进位信号:

若没有,将当前逻辑门级Cell对象进行删除,并将另一输入端口信号与输出端口信号进行连接;

若有,将进位信号连接到当前逻辑门级对象连接固定0信号的输入端口,清空进位信号;

当逻辑门级对象其中一个输入端口连接信号为固定1时,判断当前逻辑门级对象相邻下一位的逻辑门级对象的相同端口是否连接固定0信号,

若是,则将当前逻辑门级Cell对象进行删除,将另一端输入信号的原信号保存为进位信号待用,取反信号与输出端口信号进行连接;

若不是,则将当前逻辑门对象连接固定1的输入端口信号清空并将LUT参数进行对应的修改。

进一步地,步骤4的具体方法为:

步骤4.1:将逻辑门级对象到物理门级对象的映射关系描述在verilog格式的cells_map.v库文件中,

步骤4.2:解析所示库文件获取逻辑门级对象到物理门级对象的映射关系,包含逻辑门级模块内部调用物理门级实例个数及端口和参数的映射关系;

步骤4.3:获取到逻辑门级Cell对象集合后,依据映射关系完成逻辑门级Cell对象集合到物理门级对象集合的数据转换并和端口、参数的信息传递;

步骤4.4:按照规定的输出格式打印包含物理门级对象集合的逻辑网表文件。

本发明还提供了一种基于yosys实现求和运算的FPGA逻辑综合装置,包括以下模块:

语法树生成模块:用于使用yosys开源程序将求和运算的行为级用户电路描述文件解析生成语法树;

RTL级数据对象提取模块:用于对所述语法树生成模块生成的语法树中的全部节点进行遍历,根据所述语法树中的节点类型提取出描述求和功能模块的RTL级数据对象,形成RTL级数据对象集合;

逻辑门级对象生成模块:用于将所述RTL级数据对象集合中的每一个RTL级对象转化为具有进位链信号连接的转化为逻辑门级对象集合,建立逻辑门级对象之间的进位链信号连接并为其赋值相应属性信息;

逻辑网表文件输出模块:用于遍历所述RTL级数据对象集合,得到所有的逻辑门级对象集合,将所述逻辑门级对象集合映射为物理门级对象打印提取逻辑网表文件。

采用上述技术方案,本发明具有如下有益效果:

本发明提供的一种基于yosys实现求和运算的FPGA逻辑综合方法及装置,通过将RTL级Cell对象的多位宽操作数进行拆分,建立多个单位宽的逻辑门级Cell对象集合,在新建逻辑门级Cell对象的同时新建表示求和运算产生的Wire类型的进位信号,由于逻辑门级对象增加进位输入端口和进位输出端口,逻辑门级对象之间增加了进位信号,并且将进位信号作为操作数,节省了计算进位数据所需要的逻辑单元,使综合结果中的逻辑单元块数量更少,并进一步根据操作数是否为常数,以及进位信号是否为空等,对逻辑门级对象进一步优化, 进一步减少逻辑单元块的数量。

附图说明

图1为本发明系统流程图;

图2为本发明建立逻辑门级对象的进位链连接过程的算法流程图;

图3为基于图2所描述求和运算的电路依据图4所示的采用进位链方式生成的逻辑门级对象集合的结果对比图;

图4为本发明的一种对于求和运算中包含常数操作数优化方法的流程图;

图5为本发明针对求和运算中包含常数操作数优化后逻辑门级结果对比示意图。

具体实施方式

下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

一种基于yosys实现求和运算的FPGA逻辑综合方法,如图1所示,包括以下步骤:

步骤1:使用yosys开源程序将求和运算的行为级用户电路描述文件解析生成语法树。本实施例中所述行为级用户电路描述文件为使用Verilog格式硬件描述语言的用户电路设计文件。

下面给出一种基于verilog格式的一种求和运算的行为级用户电路描述文件:

module add(a,b,out);

input [3:0]a;

input [3:0]b;

output [4:0]out;

wire [4:0]out;

assign out=a+b;

endmodule 。

该电路描述文件的电路功能为实现包含“a”、“b”两个输入端口信号的求和运算并将结果赋值给输出端口“out”,其中,两个输入端口信号“a[3:0]”、“b[3:0]”作为加数操作数,信号位宽均为4;输出端口信号“out[4:0]”作为运算和操作数,信号位宽为5。

下面给出了使用yosys词法和语法解析对电路描述文件中描述的求和运算的电路描述提取的语法树结构文件如下所示:

AST_MODULE str=’\add’

AST_WIRE str=’\a’ input port=1

AST_RANGE

AST_CONSTANT bits=’000000000000000000000000000000011’(32) signedrange=[31:0] int=3

AST_CONSTANT bits=’000000000000000000000000000000000’(32) signedrange=[31:0]

AST_WIRE str=’\b’ input port=2

AST_RANGE

AST_CONSTANT bits=’000000000000000000000000000000011’(32) signedrange=[31:0] int=3

AST_CONSTANT bits=’000000000000000000000000000000000’(32) signedrange=[31:0]

AST_WIRE str=’\out’ output port=3

AST_RANGE

AST_CONSTANT bits=’000000000000000000000000000000100’(32) signedrange=[31:0] int=4

AST_CONSTANT

bits=’000000000000000000000000000000000’(32) signed range=[31:0]

AST_WIRE str=’\out’

AST_RANGE

AST_CONSTANT bits=’000000000000000000000000000000100’(32) signedrange=[31:0] int=4

AST_CONSTANT bits=’000000000000000000000000000000000’(32) signedrange=[31:0]

AST_ASSIGN

AST_IDENTIFIER str=’\out’

AST_ADD

AST_IDENTIFIER str=’\a’

AST_IDENTIFIER str=’\b’ 。

从电路描述文件可知语法树中根节点类型为AST_MODULE,对应verilog语法中“module”关键字,节点包含一个str属性“\add”,表示整个用户电路加法运算模块“add”。AST_MODULE包含四个AST_WIRE子节点,分别对应verilog语法中“input”、“output”和“wire”关键字,通过节点的str属性可知,分别对应输入输出端口和线网对象“a”、“b”、“out”。其中第一个AST_WIRE子节点包含一个AST_RANGE子节点,描述当前端口连接的信号位宽;AST_RANGE节点包含两个AST_CONSTANT子节点,分别表示位宽的上限和下限的常量值;AST_MODULE还包含一个AST_ASSIGN子节点,对应用户电路中的“assign out=a+b”赋值语句,AST_ASSIGN节点包含一个AST_IDENTIFIER子节点,表示赋值语句的左值信号“out”;AST_ASSIGN节点包含一个AST_ADD子节点,表示加法运算语句,AST_ADD节点包含两个AST_IDENTIFIER子节点,表示加法运算过程的两个加数操作数信号。

步骤2:对所述语法树中的全部节点进行遍历,根据所述语法树中的节点类型提取出描述求和功能模块的RTL级数据对象,形成RTL级数据对象集合。RTL级数据对象类型主要包括描述用户整个电路设计的Design类型;描述单个功能模块Module类型,对应verilog语法中的“module”关键字,一个Design可包含多个Module类型的对象;描述“module”内部的“input、output、reg”指定信号的Wire类型以及描述“module”内部调用实例的Cell类型等,一个Module类型对象可包含多个Wire实例和Cell实例。

遍历语法树,当遍历到AST_MODULE根节点时,创建Module类对象module;当遍历到AST_MODULE的AST_WIRE类型子节点时,创建Wire类型对象wire并通过AST_WIRE的子节点赋值wire对象的位宽属性,最后将wire对象存储到module对象的Wire wires属性;当遍历到AST_MODULE的AST_ASSIGN类型子节点时,创建RTL级Cell类型cell对象,通过AST_ADD子节点确定cell对象的type属性为“$add”,“$add”为程序内置类型,用于描述求和运算,端口定义包含输入端口A、B,输出端口Y。通过AST_IDENTIFIER子节点赋值cell对象的端口连接属性,如下:A端口连接“a”信号;B端口连接信号“b”;Y端口连接信号“out”。

步骤3:将所述RTL级数据对象集合中的每一个RTL级对象转化为具有进位链信号连接的逻辑门级对象集合;

本实施例中$_LCELL_COMB_类型逻辑门级对象端口及参数定义如下所示。

module \$_LCELL_COMB_(input A,B,C,D,CIN,output Y,COUT);

parameter LUT =0;

Parameter MODE =“normal”;

Parameter SUM_LUT_INPUT =0;

Parameter FUN =“NORMAL”。

本发明将求和运算对应的$add类型RTL级对象转化为$_LCELL_COMB_类型的逻辑门级对象,$_LCELL_COMB_单元类型包含输入端口A、B、C、D和CIN,其中A、B、C、D为数据输入端口,CIN为进位输入端口;包含组合输出端口Y和进位输出端口COUT。

本实施例中,如图2所示,步骤3中将RTL级对象转化为具有进位链信号连接的逻辑门级对象集合的具体方法为:

步骤3.1:对RTL级数据对象的多位宽操作数进行拆分,建立与RTL级数据对象的两个操作数中具有较大位宽的操作数的位宽数量相对应的单位宽逻辑门级Cell对象;

步骤3.2:在新建单位宽逻辑门级Cell对象的同时新建表示求和运算产生的Wire类型的进位信号;

步骤3.3:依次将RTL级Cell对象的输入输出端口连接信息,逐位赋值给新建的各单位宽逻辑门级Cell对象的输入输出端口连接信息;

步骤3.4:所述逻辑门级Cell对象建立有进位输入端口和进位输出端口,所述进位信号连接当前新建的逻辑门级对象的进位输出端口以及下一个相邻的逻辑门级对象的进位输入端口;本发明通过进位信号连接了两个逻辑门级对象的进位输出端口和进位输入端口,即进位链的连接,从而使得进位信号作为一个操作数通过进位输入端口连接至下一个逻辑门级对象,节省了计算进位数据所需要的逻辑单元,使综合结果中的逻辑单元块数量更少。

步骤3.5:根据逻辑门级Cell对象的输入输出端口连接状态信息,得到所述逻辑门级Cell对象的端口连接参数FUN值,根据端口连接参数FUN值得到所述逻辑门级Cell对象的功能参数值LUT。

如表1所示,根据端口的连接情况可知端口连接参数FUN值,根据端口连接参数FUN值得到逻辑门级Cell对象的功能参数值LUT值。

逻辑门级Cell对象的FUN参数为字符串类型,用于标识所属逻辑门级Cell对象的端口连接情况,端口连接情况取决于求和运算的操作数的个数,通常情况操作数的数量为3,称为全加器,包括两个加数操作数和一个进位操作数,对于求和运算的首位求和运算通常称为半加器,只包含两个加数操作数不含进位操作数。另一种情况,当两个加数位宽不一致时,就会产生求和运算只包含一个加数操作数和一个进位操作数的情况。LUT参数为16位二进制数组类型,存储所属逻辑门级Cell对象的功能真值表,真值结果同样受操作数的数量和位置的影响,其中高8位存储求和逻辑的真值,低8位存储求进位的真值。另一方面,操作数真值通常为0或1,但当用户电路的求和运算的操作数出现常数而非信号时,操作数真值也要对应调整为固定值0或者1,也会影响最后的求和或者求进位的真值结果。

图2为本发明建立逻辑门级对象的进位链连接过程的算法流程图。首先将表示求和运算对应的RTL级$add类型数据对象转化为$_LCELL_COMB_类型的逻辑门级对象集合。如图2所示,过程数据来源为描述当前电路设计的moudle对象的RTL级数据对象Cell类型对象集合Cell cells,遍历cells集合,选择$add类型cell对象进行处理,分别获取当前RTL级数据对象cell对象的A、B输入端连接信号sig_a、sig_b和Y输出端信号sig_y,获取sig_a、sig_b信号位宽最小值记录为N,i从0开始循环N次,创建N个type类型为LCELL_COMB_的Cell对象,输入输出端口分别赋值sig_a[i]、sig_b[i]和sig_y[i] 并对创建Cell对象数量进行计数存储在数据对象count中。创建Wire类型进位信号wire_cout,插入集合Wires类型集合wires_cout,并将wire_cout信号赋值逻辑门级Cell对象的COUT输出端口。通过count计数判断当前创建Cell对象是否对应求和运算的首位信号的计算,首位计算不存在上一位的进位信息,是,则判断功能为半加器,FUN参数赋值HALF_ADDER,LUT参数值为6688,否,则赋值当前Cell对象的CIN输入端口赋值上一Cell对象的wires_cout[i-1],表示上一个Cell对象产生的进位输出信号,FUN参数为NORMAL,LUT参数值赋值96E8。

上述过程创建LCELL_COMB_的Cell对象的数目为N,继续判断sig_a和sig_b信号位宽是否一致,若一致则结束,否则获取sig_a和sig_b位宽较大者,赋值给临时对象extra_sig,计算位宽为M,i从N+1开始循环至M结束,继续创建M-N个type类型为LCELL_COMB_的Cell对象,易知Cell对象仅包含一个代表输入操作数的信号来源extra_sig,将Cell对象的A输入端口赋值extra_sig[i],输出端口赋值sig_y[i],Cell对象的FUN参数赋值A_ADDEND,表示仅包含一个加数和进位信号。同理创建进位信号wire_cout信号连接逻辑门级Cell对象的COUT端并对该逻辑门级Cell对象的进位输入端CIN端上一个逻辑门级Cell对象的COUT输出端信号,依据FUN参数赋值LUT参数值赋值为5AA0,FUN参数与LUT参数值的对应关系见表1,本实施例中的逻辑门级对象的type类型为LCELL_COMB_。

表1逻辑门级对象的“FUN”参数含义及对应LUT参数值

表1为本发明LCELL_COMB类型逻辑门级对象的“FUN”参数含义及对应LUT参数值。依据LCELL_COMB对象的端口连接加法操作数信号的情况确定FUN参数值。FUN参数和LUT参数值为一一对应关系,LUT参数值同样取决于操作数的数量和位置。以FUN参数为NORMAL为例,表示当前包含A、B两端加数操作数以及进位操作数,LUT值的计算如表2所示。

表2 $_LCELL_COMB_类型逻辑门级对象的LUT参数值的计算过程

表2为本发明的$_LCELL_COMB_类型逻辑门级对象的LUT参数值的计算过程。以LCELL_COMB类型逻辑门级对象的FUN参数为NORMAL情况为例,从表1可知,当FUN参数为NORMAL时,表示全加器,操作数包含A端、B端加数及CIN进位,按照A、B、CIN的顺序作为真值计算的输入,$_LCELL_COMB_类型的Y和COUT输出端口作为真值计算的输出,其中Y端依据求和逻辑计算真值,COUT端依据求进位逻辑计算真值,将Y端求的真值结果作为LUT参数值的高8位,十六进制表示为“96”;COUT端求得真值结果作为LUT参数值的低8位,十六进制表示为“E8”,LUT参数最终结果的十六进制表示为“96E8”。

图3为基于电路描述文件所描述求和运算的电路依据图2所示的采用进位链连接方式实现求和运算的生成的逻辑门级对象集合的结果的对比图,对于一个RTL级数据对象来说,由图3右侧可知,通过采用进位链实现的方式电路所需的$_LCELL_COMB_类型的逻辑门级对象的数目为5,相比图3左侧的图不采用进位链方式节省了4个$_LCELL_COMB_类型的逻辑门级对象,由于逻辑门级对象增加进位输入端口和进位输出端口,逻辑门级对象之间增加了进位信号,由图3右侧的图可以看出,垂直线箭头表示的是进位信息,本实施例中将进位信号作为操作数,相比于图3左侧节省了计算进位数据所需要的逻辑单元,使综合结果中的逻辑单元块数量更少。实验证明,对于一个十位宽的RTL级数据对象来说,不加进位链所使用的逻辑门对象单元是28个,使用本发明使用进位链信号的逻辑门对象单元则只有11个;对于一个二十位宽的RTL级数据对象来说,不加进位链所使用的逻辑门对象单元是68个,本发明使用进位链信号的逻辑门对象单元则只有21个。由此可见,本发明在逻辑门对象上增加进位输入端口和进位输出端口,逻辑门级对象之间增加了进位信号,其减少的逻辑门对象单元数量是非常明显的。

本实施例中还进一步对所述逻辑门级对象集合进行优化。

根据所述逻辑门级Cell对象输入端口的信号连接情况,当某一输入端口连接信号为固定0或者1时,进行逻辑门级优化。

当逻辑门级对象其中一个输入端口连接信号为固定0时,判断是否有进位信号:

若没有,将当前逻辑门级Cell对象进行删除,并将另一输入端口信号与输出端口信号进行连接;

若有,将进位信号连接到当前逻辑门级对象连接固定0信号的输入端口,清空进位信号;

当逻辑门级对象其中一个输入端口连接信号为固定1时,判断当前逻辑门级对象相邻下一位的逻辑门级对象的相同端口是否连接固定0信号,

若是,则将当前逻辑门级Cell对象进行删除,将另一端输入信号的原信号保存为进位信号待用,取反信号与输出端口信号进行连接;

若不是,则将当前逻辑门对象连接固定1的输入端口信号清空并将LUT参数进行对应的修改。

根据逻辑门级对象输入端口的信号连接情况,也可以进一步减少逻辑门级对象单元的数量。图4为本发明的一种对于求和运算中包含常数操作数优化方法的流程图。如图4所示优化对象为Cell对象,相关输入数据同时包含下一位求和运算操作数信号next_sig_a、next_sig_b用于确定是否有进一步优化的空间和上一位求和运算产生的进位信号carry作为当前求和运算的操作数以及目前创建的逻辑门级Cell对象的总数用于确定当前逻辑门级Cell对象的FUN参数和LUT参数值。

如图4所示优化流程为:获取当前Cell对象的A、B端信号连接sig_a、sig_b以及Y端输出信号sig_y。判断信号sig_a、sig_b中是否包含常数,若不含常数操作数,直接返回。否则,具体判断常数为sig_a或者sig_b,假设sig_b为常数,继续判断为常数0或者1,若是0,则需判断是否包含进位信号carry,若进位信号carry为空,则直接建立信号sig_a到sig_y的连接并删除当前Cell对象,同时count计数减一;若包含carry信号不为空,则将carry信号代替sig_b赋值Cell对象的B端连接并清空carry信号。若是1,则需判断next_sig_b是否为常数0,如果是,则将sig_a信号取反连接到sig_y,并删除当前Cell对象,count计数减一;否则按sig_b为固定值1更新LUT参数以及FUN参数。sig_a信号为常数信号同上。

图5为本发明针对求和运算中包含常数操作数优化后逻辑门级结果对比示意图。如图以包含“assign out=a+10;” 求和赋值语句的用户电路为例,采用图4所示的优化算法进行优化后和优化前的生成的$_LCELL_COMB_类型的逻辑门对象集合结果的对比。如图5所示,描述求和运算前两位运算的逻辑门级Cell对象被优化删除,转为用assign赋值语句代替,同时第二个$_LCELL_COMB_对象的其中一个操作数“a[1]”赋值第三个$_LCELL_COMB_对象的B端输入端口信号。优化后电路所需的$_LCELL_COMB_类型的逻辑门对象的数目减2。

步骤4:遍历所述RTL级数据对象集合,得到所有的逻辑门级对象集合,将所述逻辑门级对象集合映射为物理门级对象打印提取逻辑网表文件。

步骤4.1:将逻辑门级对象到物理门级对象的映射关系描述在verilog格式的cells_map.v库文件中,

步骤4.2:解析所示库文件获取逻辑门级对象到物理门级对象的映射关系,包含逻辑门级模块内部调用物理门级实例个数及端口和参数的映射关系;

逻辑门级对象生成模块:用于将所述RTL级数据对象集合中的每一个RTL级对象转化为具有进位链信号连接的转化为逻辑门级对象集合,建立逻辑门级对象之间的进位链信号连接并为其赋值相应属性信息;

逻辑网表文件输出模块:用于遍历所述RTL级数据对象集合,得到所有的逻辑门级对象集合,将所述逻辑门级对象集合映射为物理门级对象打印提取逻辑网表文件。

本实施例给出了逻辑门级\$_LCELL_COMB_类型到物理门级lcell_comb类型的映射文件:

module \$LCELL_COMB (input A, B, C,D,CIN, output Y,COUT);

parameter LUT = 0;

parameter SUM_LUT_INPUT = 0;

parameter FUN = "NORMAL";

parameter MODE = "normal";

if(FUN == "NORMAL")begin

lcell_comb #(.lut_mask(LUT),.sum_lutc_input(SUM_LUT_INPUT),.operation_mode(MODE)) REPLACE_(.combout(Y),.cout(COUT), .dataa(A), .datab(B), .datac(),.datad(),.cin(CIN));

end

if (FUN == "A_HALF_ADDER")begin

lcell_comb #(.lut_mask(LUT),.sum_lutc_input(SUM_LUT_INPUT),.operation_mode(MODE)) REPLACE_(.combout(Y),.cout(COUT), .dataa(A), .datab(), .datac(),.datad(),.cin());

end

if (FUN == "B_HALF_ADDER")begin

lcell_comb #(.lut_mask(LUT),.sum_lutc_input(SUM_LUT_INPUT),.operation_mode(MODE)) REPLACE_(.combout(Y),.cout(COUT), .dataa(), .datab(B), .datac(),.datad(),.cin());

end

if (FUN == "HALF_ADDER")begin

lcell_comb #(.lut_mask(LUT),.sum_lutc_input(SUM_LUT_INPUT),.operation_mode(MODE)) REPLACE_(.combout(Y),.cout(COUT), .dataa(A), .datab(B), .datac(),.datad(),.cin());

end

if (FUN == "A_ADDEND")begin

lcell_comb #(.lut_mask(LUT),.sum_lutc_input(SUM_LUT_INPUT),.operation_mode(MODE)) REPLACE_(.combout(Y),.cout(COUT), .dataa(A), .datab(), .datac(),.datad(),.cin(CIN));

end

if (FUN == "B_ADDEND")begin

lcell_comb #(.lut_mask(LUT),.sum_lutc_input(SUM_LUT_INPUT),.operation_mode(MODE)) REPLACE_(.combout(Y),.cout(COUT), .dataa(), .datab(B), .datac(),.datad(),.cin(CIN));

end

if (FUN == "LAST_ADDER")begin

lcell_comb #(.lut_mask(LUT),.sum_lutc_input(SUM_LUT_INPUT),.operation_mode(MODE)) REPLACE_(.combout(Y),.cout(), .dataa(), .datab(),.datac(),.datad(),.cin(CIN));

end

endmodule。

由映射文件可知\$_LCELL_COMB_类型的端口定义与lcell_comb的端口定义为一一对应关系,如下:

.dataa(A)、.datab(B)、.datac(C)、.datad(D)、.cin(CIN)、.combout(Y)。但要依据\$_LCELL_COMB_类型的FUN参数选择性的进行端口连接,其余端口置空。

本发明还提供了一种基于yosys实现求和运算的FPGA逻辑综合装置,包括以下模块:

语法树生成模块:用于使用yosys开源程序将求和运算的行为级用户电路描述文件解析生成语法树;

RTL级数据对象提取模块:用于对所述语法树生成模块生成的语法树中的全部节点进行遍历,根据所述语法树中的节点类型提取出描述求和功能模块的RTL级数据对象,形成RTL级数据对象集合;

逻辑门级对象生成模块:用于将所述RTL级数据对象集合中的每一个RTL级对象转化为具有进位链信号连接的转化为逻辑门级对象集合,建立逻辑门级对象之间的进位链信号连接并为其赋值相应属性信息;

逻辑网表文件输出模块:用于遍历所述RTL级数据对象集合,得到所有的逻辑门级对象集合,将所述逻辑门级对象集合映射为物理门级对象打印提取逻辑网表文件。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

19页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于处理计算作业的方法、电子设备和计算机程序产品

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类