掌桥专利:专业的专利平台
掌桥专利
首页

一种树状mux电路的优化方法

文献发布时间:2024-04-18 20:02:18


一种树状mux电路的优化方法

技术领域

本发明属于数字电路领域,尤其是涉及一种树状mux电路的优化方法,该优化方法在保持树状mux电路结构不变的情况下,通过将地址控制逻辑单独提取出来进行优化,进而实现整个树状mux电路的优化。

背景技术

从电路的功能角度划分,数字电路可以分为数据通路和控制逻辑两大部分。数据选择器(Multiplexer,mux)既可以构建数据通路,又可以实现控制逻辑,且所有组合逻辑电路都可以用树状mux结构来表示。另外,mux在FPGA(Field Programmable Gate Array,现场可编程门阵列)中应用尤其广泛,研究显示,FPGA中mux的面积往往占了25%以上。因此,针对树状mux电路的优化策略将有助于基于FPGA的数字逻辑电路的性能提升。

数字逻辑电路设计中,目前常用的手段是硬件描述语言结合EDA工具实现。在数字逻辑电路行为的硬件语言描述中,以硬件描述语言Verilog HDL为例,使用频率很高的if、else与case语句都可以映射成树状mux电路。图1a展示了用Verilog HDL中的case语句对电路逻辑功能的描述,图1b展示了图1a映射成的树状mux电路。在图1b中,每个梯形表示一个二选一mux门,梯形下部的2个连线为数据输入,梯形上部的1个连线为数据输出,梯形腰部的1个连线为mux门的地址输入,梯形内底部的“1”和“0”分别表示当地址输入为1或0时,与“1”端或“0”端相连的数据输入将被选中作为mux门的输出。从图1b中不难发现,树状mux电路有二部分组成,第一部分为由多个二选一mux门构成的树状结构;第二部分为地址控制逻辑电路,用于控制每个mux门的数据输出来自于与它相连的二个数据输入中的哪一个。在图1b所示的地址控制逻辑表达式中,“0”表示反变量,“1”表示原变量,符号“||”表示逻辑“或”。以M5的地址控制逻辑表达式“0000||0010”为例,假设4位宽的变量sel的高位到低位分别为sel[3]、sel[2]、sel[1]、sel[0],则“0000||0010”对应的逻辑表达式为

一个数据输出为Y,二个数据输入分别为A和B,地址控制输入为C的二选一mux门电路的逻辑表达式为

发明内容

本发明所要解决的技术问题是提供一种树状mux电路的优化方法,其在保持树状mux电路中的各mux门连接关系不变的情况下,通过单独优化各mux门的地址控制逻辑,进而实现整个树状mux电路的优化。

本发明解决上述技术问题所采用的技术方案为:一种树状mux电路的优化方法,其特征在于该优化方法中待优化树状mux电路用Verilog语言描述,对应的Verilog电路文件用V0表示;待优化树状mux电路由多个二选一的mux门构成,mux门的逻辑功能用逻辑表达式

该优化方法包括以下步骤:

步骤1:利用开源EDA工具,将待优化树状mux电路对应的Verilog电路文件V0中用于逻辑功能描述的语句转化为只有单一连续赋值语句构成的Verilog电路文件V1,Verilog电路文件V1的输入变量为原始输入变量;定义四个集合I、P、Q和O,其中,I、P、Q和O的初始值均为空集;逐条检查Verilog电路文件V1中的每条语句,并将当前检查的语句设为Verilog电路文件V1中的第2条语句,定义为当前语句;

步骤2:检查当前语句,假设当前语句为Verilog电路文件V1中的第i条语句,判断当前语句是否为连续赋值语句且表达式具有如下格式:

步骤3:将表达式T

步骤4:判断下一条语句是否为Verilog电路文件V1中的结束语句,若不是,则将下一条语句作为当前语句,再返回步骤2继续执行;否则,直接执行步骤7;

步骤5.1:判断集合Q是否为空集,若集合Q为空集,则返回执行步骤4;若集合Q不为空集,则执行步骤5.2;

步骤5.2:在集合Q中任取一个变量,设定所取变量为w

步骤5.3:依次检查构成输出变量为w

步骤6:重复执行步骤5.1至步骤5.3;

步骤7:将集合P中的每个表达式转化为符合Verilog语法的连续赋值语句,并由此得到一个Verilog电路文件V2,Verilog电路文件V2的输入变量为集合I中包含的变量,Verilog电路文件V2的输出变量为集合O中包含的变量;

步骤8:利用逻辑优化工具,对Verilog电路文件V2进行优化,得到优化Verilog电路文件V3;

步骤9:将优化Verilog电路文件V3中所有的连续赋值语句拷贝到Verilog电路文件V1中,由此在Verilog电路文件V1的基础上得到新Verilog电路文件V4;然后利用逻辑综合工具,对新Verilog电路文件V4进行映射,至此完成了待优化树状mux电路的优化。

与现有技术相比,本发明的优点在于:

1)本发明方法在逻辑综合过程中保持了树状mux电路的结构,由于树状mux电路和一些硬件语言的行为级描述(例如if、else和case)十分相关,因此在逻辑综合优化的流程中,往往先进行高层级也就是行为级的优化,之后再进行门级的优化,在if、else和case电路中,地址控制逻辑往往消耗更大的面积,并且在不同的mux门之间的不同的地址控制逻辑之间很可能存在冗余项,而如果将树状mux电路整体进行优化,则很有可能会导致原本的树状mux电路的结构被破坏,由于一个好的电路结构可以有效帮助计算机辅助设计(EDA)工具在后续优化的过程中进行门级的优化和映射,而避免在优化中过早破坏结构会造成优化空间的缩小,进而影响优化效果,因此本发明方法将树状mux电路中所有的地址控制逻辑放入一个新的电路中进行单独优化,可以进一步提高其优化效果,也不会破坏原有的树状mux结构,即保持了树状mux电路中的各mux门连接关系不变,本发明方法很适合处理可以由树状mux电路实现的复杂的控制电路。实验结果也表明了,本发明方法比开源逻辑综合工具优化效果更佳。

2)本发明方法中用到的开源EDA工具以及逻辑优化工具、逻辑综合工具均为开源EDA工具ABC。

附图说明

图1a为用Verilog HDL中的case语句对电路逻辑功能的描述;

图1b为图1a映射成的树状mux电路;

图2a为采用传输门实现mux门的电路结构;

图2b为基于逻辑表达式实现mux门的电路结构;

图3a为用单一连续赋值语句进行逻辑功能描述的Verilog电路文件V1(为了方便说明,每条语句前加有编号);

图3b为用单一连续赋值语句进行逻辑功能描述的Verilog电路文件V1(每条语句前未加编号);

图4为将集合P中的每个表达式转化为符合Verilog语法的连续赋值语句;

图5为在图4的基础上,加上模块名、端口列表、输入输出等定义后得到的Verilog电路文件V2;

图6为Verilog电路文件V2在经过开源EDA工具优化后得到的优化Verilog电路文件V3;

图7为将Verilog电路文件V3中所有连续赋值语句拷贝到Verilog电路文件V1中得到的Verilog电路文件V4。

具体实施方式

以下结合附图实施例对本发明作进一步详细描述。

本发明提出的一种树状mux电路的优化方法,该优化方法中待优化树状mux电路用Verilog语言描述,对应的Verilog电路文件用V0表示;待优化树状mux电路由多个二选一的mux门构成,mux门的逻辑功能用逻辑表达式

该优化方法包括以下步骤:

步骤1:利用开源EDA工具,将待优化树状mux电路对应的Verilog电路文件V0中用于逻辑功能描述的语句转化为只有单一连续赋值语句构成的Verilog电路文件V1,Verilog电路文件V1的输入变量为原始输入变量;定义四个集合I、P、Q和O,其中,I、P、Q和O的初始值均为空集;逐条检查Verilog电路文件V1中的每条语句,并将当前检查的语句设为Verilog电路文件V1中的第2条语句,定义为当前语句;因Verilog语法限制,在Verilog电路文件V1中第1条语句用于电路模块的基本定义,不可能是连续赋值语句,因此从第2条语句开始检查。

步骤2:检查当前语句,假设当前语句为Verilog电路文件V1中的第i条语句,判断当前语句是否为连续赋值语句且表达式具有如下格式:

步骤3:将表达式T

步骤4:判断下一条语句是否为Verilog电路文件V1中的结束语句,若不是,则将下一条语句作为当前语句,再返回步骤2继续执行;否则,直接执行步骤7。

步骤5.1:判断集合Q是否为空集,若集合Q为空集,则返回执行步骤4;若集合Q不为空集,则执行步骤5.2。

步骤5.2:在集合Q中任取一个变量,设定所取变量为w

步骤5.3:依次检查构成输出变量为w

步骤6:重复执行步骤5.1至步骤5.3。

步骤7:将集合P中的每个表达式转化为符合Verilog语法的连续赋值语句,并由此得到一个Verilog电路文件V2,Verilog电路文件V2的输入变量为集合I中包含的变量,Verilog电路文件V2的输出变量为集合O中包含的变量。

步骤8:利用逻辑优化工具,对Verilog电路文件V2进行优化,得到优化Verilog电路文件V3。在此,逻辑优化工具为开源EDA工具。

步骤9:将优化Verilog电路文件V3中所有的连续赋值语句拷贝到Verilog电路文件V1中,由此在Verilog电路文件V1的基础上得到新Verilog电路文件V4;然后利用逻辑综合工具,对新Verilog电路文件V4进行映射,至此完成了待优化树状mux电路的优化。在此,逻辑综合工具为开源EDA工具。

为进一步验证本发明方法的可行性和有效性,对本发明方法用图3a所示Verilog描写的电路进行实验。为了方便说明,在图3a各语句前均加了编号,实际Verilog电路文件中没有这些编号,如图3b所示。

对于步骤1,假设一个待优化树状mux电路对应的Verilog电路文件V0转化得到的Verilog电路文件V1如图3a或图3b所示,从图3a或图3b中可以看出,Verilog电路文件V1的Verilog代码已经完全由连续赋值语句构成,Verilog电路文件V1的原始输入变量为7位宽的控制信号sel,即sel[1]、sel[2]、sel[3]、sel[4]、sel[5]、sel[6]、sel[7]以及8位宽的数据信号din,即din[0]、din[1]、din[2]、din[3]、din[4]、din[5]、din[6]、din[7],待优化树状mux电路的各mux门的输出分别为n12、n13、n23、n24、n44、n45、dout[0]。在图3a或图3b中,连续赋值语句的显著特点是每一条连续赋值语句用assign开头,后面紧跟着表达式,由于Verilog语法的规定,符号“&”对应逻辑位“与”运算,符号“|”对应逻辑位“或”运算,符号“~”对应逻辑位“非”运算,同时Verilog语言不支持下标,以图3a或图3b中的连续赋值语句dout[0]=(n44&~n57)|(n45&n57)为例,它与常用的带下标的逻辑表达式

在步骤2中,从Verilog电路文件V1的第2条语句开始往下搜索,由于前面5条语句都不符合,都不为连续赋值语句,因此一直执行步骤2,直到检查到第6条语句,n12=(din[6]&~sel[7])|(din[5]&sel[7])符合格式

在步骤3中,把表达式T6=sel[7]寄存到集合P中,得到P={T6=sel[7]},把变量T6寄存到集合O中,得到O={T6};因sel[7]为Verilog电路文件V1的原始输入变量,所以sel[7]存储到集合I中。

在步骤5.1中,因为集合Q为空集,所以直接从步骤5.1跳到步骤4,并返回到步骤2。

对于接下来的第7条语句到第9条语句均如此执行,在第9条语句结束时,得到P={T6=sel[7],T7=sel[5],T8=sel[3],T9=sel[1]},O={T6,T7,T8,T9},I={sel[7],sel[5],sel[3],sel[1]}。

在Verilog电路文件V1中的第9条语句处理完后,执行步骤2,对于Verilog电路文件V1中的第10条语句,表达式的格式符合

在步骤5.1中,由于集合Q中包含有一个变量n22,因此执行步骤5.2;在步骤5.2中,令n22为w

重复执行步骤5.1至步骤5.3,直到集合Q为空集。最终得到I={sel[7],sel[5],sel[3],sel[1],sel[6]},O={T6,T7,T8,T9,T10},P={T6=sel[7],T7=sel[5],T8=sel[3],T9=sel[1],T10=n22,n22=sel[7]&~n19,n19=sel[7]&~sel[6]},并在Verilog电路文件V1中删除输出变量为n19和n22的表达式,对应Verilog电路文件V1中第13条语句和14条语句。

对于Verilog电路文件V1中的第11条语句,表达式的格式符合

在步骤5.1中,由于集合Q中包含有一个变量n43,因此执行步骤5.2;在步骤5.2中,令n43为w

重复执行步骤5.1至步骤5.3,直到集合Q为空集。最终得到I={sel[7],sel[5],sel[3],sel[1],sel[6],sel[4],sel[2]},O={T6,T7,T8,T9,T10,T11},P={T6=sel[7],T7=sel[5],T8=sel[3],T9=sel[1],T10=n22,n22=sel[7]&~n19,n19=sel[7]&~sel[6],T11=n43,n43=~n39&~n40,n39=n32&n33,n40=n37&n38,n32=n29&~sel[3],n33=sel[5]&sel[4],n37=n29&n33,n38=sel[3]&~sel[2],n29=sel[7]&sel[6]}。

不断重复上述过程,最终可得到I={sel[7],sel[5],sel[3],sel[1],sel[6],sel[4],sel[2]},P={T6=sel[7],T7=sel[5],T8=sel[3],T9=sel[1],T10=n22,n22=sel[7]&~n19,n19=sel[7]&~sel[6],T11=n43,n43=~n39&~n40,n39=n32&n33,n40=n37&n38,n32=n29&~sel[3],n33=sel[5]&sel[4],n37=n29&n33,n38=sel[3]&~sel[2],n29=sel[7]&sel[6],T12=n57,n57=n22&n56,n56=~n52&~n53,n52=n29&~sel[5],n53=n29&n51,n51=sel[5]&~sel[4]};O={T6,T7,T8,T9,T10,T11,T12}。

执行步骤7,将集合P中的每个表达式转化为符合Verilog语法的连续赋值语句,如图4所示;图5为在图4的基础上,加上模块名、端口列表、输入输出等定义后得到的Verilog电路文件V2,其中,Verilog电路文件V2的输入和输出变量分别来自集合I和集合O。

执行步骤8,Verilog电路文件V2在经过开源EDA工具优化后得到一个优化Verilog电路文件V3,如图6所示,图6所示的优化Verilog电路文件V3已经将Verilog电路文件的模块名、端口列表、输入输出端口定义等省略了。

执行步骤9,执行上面步骤后,Verilog电路文件V1中只保留了7条连续赋值语句,对应图7中的前7条语句。将优化Verilog电路文件V3中所有的连续赋值语句拷贝到Verilog电路文件V1中,得到新Verilog电路文件V4,如图7所示。在图7所示的Verilog代码中省略了电路文件的模块名、端口列表、输入输出端口等定义,图7中前7条连续赋值语句对应树状mux电路的结构,第8条及以后的连续赋值语句为地址控制逻辑表示,从中不难发现,本发明方法没有改变原先树状mux电路中的连接关系,即保持了树状mux电路不变,但将树状mux电路中的地址控制逻辑进行了提取和优化,进而实现了整个树状mux电路的优化。由于这些地址控制逻辑已经用基本的逻辑运算表示了,因此可以方便地映射成实际的电路结构,所以,通过图7所示的Verilog代码已经可以计算电路实现需要哪些逻辑门。

表1展示了直接用逻辑综合开源软件优化和使用本发明方法优化后的结果对比,二者均使用同一开源EDA工具,即ABC。

表1直接用逻辑综合开源软件优化和使用本发明方法优化后的结果对比

从表1数据可以看出,无论是面积还是延时,本发明方法在8个测试电路上的结果均优于用逻辑综合开源软件优化的优化结果。

技术分类

06120116581769