杭州电子科技大学黄继业获国家专利权
买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
龙图腾网获悉杭州电子科技大学申请的专利一种基于字符分隔值文件转换Verilog代码的方法获国家发明授权专利权,本发明授权专利权由国家知识产权局授予,授权公告号为:CN111814417B 。
龙图腾网通过国家知识产权局官网在2023-09-26发布的发明授权授权公告中获悉:该发明授权的专利申请号/专利号为:202010531916.5,技术领域涉及:G06F30/34;该发明授权一种基于字符分隔值文件转换Verilog代码的方法是由黄继业;闻勇强;高明裕;何志伟;杨宇翔;林辉品设计研发完成,并于2020-06-11向国家知识产权局提交的专利申请。
本一种基于字符分隔值文件转换Verilog代码的方法在说明书摘要公布了:本发明公开了基于字符分隔值文件转换Verilog代码的方法:S1,读取字符分隔值总文件中的数据,根据总文件内的记录去搜索符合条件的字符分隔值子文件;S2,处理字符分隔值总文件和子文件内的数据,生成端口信号列表和变量定义部分的Verilog代码;S3,给每个字符分隔值子文件分配状态号区间,读取各个子文件内的状态跳转数据,生成状态跳转部分的Verilog代码;S4,读取每个字符分隔值子文件内对应状态所执行的操作,生成各个状态语句执行的Verilog代码。本发明为字符分隔值文件数据转化到硬件描述提供了切实可行的方案,当需要编写的状态机状态很多时,可有效简化状态的插入和删除问题以及子状态机间相互跳转问题,能够降低代码编写的出错率,提高开发的效率。
本发明授权一种基于字符分隔值文件转换Verilog代码的方法在权利要求书中公布了:1.一种基于字符分隔值格式文件转换Verilog代码的方法,其特征在于,包括以下步骤:S1,读取字符分隔值总文件中的数据,根据总文件内的记录去搜索符合条件的字符分隔值子文件;S2,处理字符分隔值总文件和子文件内的数据,生成端口信号列表和变量定义部分的Verilog代码;S3,给每个字符分隔值子文件分配状态号区间,读取各个子文件内的状态跳转数据,生成状态跳转部分的Verilog代码;S4,读取每个字符分隔值子文件内对应状态所执行的操作,生成各个状态语句执行的Verilog代码;所述S1,读取字符分隔值总文件中的数据,根据总文件内的记录去搜索符合条件的字符分隔值子文件,包括以下步骤:S10,在字符分隔值总文件中的State列中按顺序从第二行开始读取各个子状态,一直读取到State列有字段为空,完成子状态的读取,根据子状态的名称,将子状态分为3类:可返回母状态的子状态、不可返回母状态的子状态和线性序列机子状态,并将子状态的名称保存在列表Sub_State_Name中,各子状态称为Sub_StateX,X=1~N;S11,根据Sub_State_Name中的内容,搜索符合子状态名称的字符分隔值子文件,分类别读入所有子文件的数据并将其保存;所述S10,根据子状态的名称,将子状态分为3类,其子状态分为以下三类:不可返回母状态的子状态:状态标号前不加任何特殊符号的状态,这类状态不能作为被调用的子状态,其最后一个状态必须带有要跳转去的下一状态;可返回母状态的子状态:状态标号前带有”$”,作为子状态被调用,在子状态全部完成之后自动跳转回调用子状态的母状态,其子状态的最后一个状态没有确定对应的目标状态;线性序列机子状态:状态标号前带有”#”,这类标号的子状态可使用线性序列机来实现若干简单通信时序;所述S2,处理字符分隔值总文件和子文件内的数据,生成端口信号列表和变量定义部分的Verilog代码,包括以下步骤:S20,从带有#的子状态名称所对应的子文件中读取第一行除State之外的所有字段,每个字段对应一个端口信号,将其通过文件写入操作,写入到目标文本文件中,写入文本文件中的内容为“module端口信号1,端口信号2,……,端口信号N;”;S21,读取总文件中Variable那一列的数据,当读到字段为空时,Variable读取完毕,将其用于生成模块内所有定义的变量,其生成文件的文本形式为“wirereg[n1:0]变量名1;wirereg[n2:0]变量名2;……;wirereg[n3:0]变量名N;”,在生成变量定义的代码之后在其文本之后生成现态次态切换的Verilog代码;所述S3,给每个字符分隔值子文件分配状态号区间,读取各个子文件内的状态跳转数据,生成状态跳转部分的Verilog代码,包括以下步骤:S30,读取Sub_State_Name中所有的子状态标号,每个状态标号作为一个子状态,为每个子状态分配500个状态号,每个子状态的基本状态号以500为单位递增,Sub_State1的基本状态号范围为0-499,Sub_State2的基本状态号为500-999,按此分配,在文本中生成Verilog代码中每次均固定生成“always@*beginn_state=0;casec_state”;S31,解析状态设计子文件,按行读取与状态跳转的各列,首先读取State_Cur,生成文件的文本形式为“分配到的基本状态号+子状态中的状态:”,在遇到下一状态之前,所有的状态跳转判断语句均属于同一状态,再读取State_Jump_Condition判断语句的字段,其生成文件的文本形式为if判断语句字段,若判断语句字段为空,则判断语句字段不生成任何文本,接着读取目标状态的那一字段,其生成文件的文本形式为(“n_state=跳转的目标状态字段;”),继续读取当前状态下其余各行的状态跳转判断语句以及目标状态,生成前述文本,当State_Cur读取到其他状态号时完成当前状态所有状态跳转分支的Verilog语句生成,在该状态文本的最后添加(“elsen_state=c_state;”),一个状态最终生成的Verilog文本代码的形式为“(基本状态号+子状态内状态号偏移):beginif判断语句1n_state=目标状态1;elseif判断语句2n_state=目标状态2;……elseif判断语句Nn_state=目标状态N;elsen_state=c_state;end”;S32,解析出跳转目标状态为可跳转回母状态的子状态,将母状态的当前状态号的下一状态号保存在状态号寄存器组SC中,并且由SC_Cnt来记录应该返回的状态号存储在SC中的哪个16位寄存器中,当调用可返回的子状态时,为了能否返回母状态,必须记录下返回母状态所需要的状态号,因此要求在该状态下能自动在Verilog文件的当前状态下的无条件执行语句块中添加“SC[SC_Cnt]=c_state+1’b1;SC_Cnt=SC_Cnt+1’b1;”,当子状态返回时,从SC中取出之前保存的状态号,目标状态自动设置为SC[SC_Cnt–1’b1],并且在子状态的最后一个状态的执行语句块中自动添加SC_Cnt=SC_Cnt–1’b1,使得每次都能够取到正确的返回状态,此执行语句可由脚本自动生成无需自行写在字符分隔值文件中;S33,线性序列机状态跳转不需要状态跳转判断语句,下一时钟到来的时候,自动进行状态跳转,0~n-1状态的下一目标状态都是c_state+1,且没有跳转条件,文本生成形式同S31,当来到最后一个状态的时候,返回调用线性序列机子状态的母状态,同S32;S34,重复执行S31,S32,将所有状态设计子文件中的状态跳转部分的代码生成,当所有的状态跳转部分的代码生成完成之后,在末尾补全此组合逻辑部分的代码,补充的内容为“default:n_state=0;endcaseend”,即完成状态设计子文件的状态跳转部分的代码生成;所述S4,读取每个字符分隔值子文件内对应状态所执行的操作,生成各个状态语句执行的Verilog代码,包括以下步骤:S40,生成时序逻辑部分固定的Verilog语句,其文本格式为always@posedgeClk,negedgeRstbegin,读取总文件中Rst列的数据,当读到字段字段为空时,Rst所有执行语句读取完成,将其用于生成模块中的复位部分代码,其生成文件的文本形式为“ifRstbegin复位语句1;复位语句2;……;复位语句N;end”,在复位语句生成之后需要添加上“casec_state”;S41,读取State_Cur,生成文件的文本形式为“分配到的基本状态号+子状态中的状态:”,在当前状态下读取Operate,当行数在下一状态所在行或者Operate为空的时候完成Operate的读取,在S32中所需要添加到无条件执行语句块中的语句也自动归属到Operate中,生成无条件执行语句块的Verilog代码,其生成的文本形式为“beginOperate1;Operate2;……;OperateN;end”;S42,按顺序读取O_C,当读取到一条不为空的O_C字段时,接着读取与其在同一行的O_M_C字段,判断后续若干行的O_C是否为空,若为空,则将此若干行的O_M_C字段均作为满足O_C条件时执行的语句块,其生成的文件的文本形式为if执行语句判断条件begin执行语句1;执行语句2;……;执行语句n;end,继续读取O_C、O_M_C和State_Cur生成前述Verilog语句,当在State_Cur中读到其他状态时完成当前状态下对应Verilog代码的生成,其生成文本的形式为if执行语句判断条件1begin执行语句x1;执行语句x2;……;执行语句xn;endelseif执行语句判断条件2begin执行语句y1;执行语句y2;……;执行语句ym;end;S43,按顺序读取O_N_M_C,读到空字段或者State_Cur列读取到其他的状态,则标志着不满足所有判断条件的执行语句块读取完毕,将读取到的语句块生成Verilog代码,其文本形式为“elsebegin执行语句1;执行语句2;……;执行语句N;end”;S44,重复S40-S42,将子状态中的所有状态的执行语句全部生成Verilog代码,完成之后在文件的末尾添加上“default:;endcaseendendmodule”,至此全部的Verilog代码已经全部生成。
如需购买、转让、实施、许可或投资类似专利技术,可联系本专利的申请人或专利权人杭州电子科技大学,其通讯地址为:310018 浙江省杭州市下沙高教园区2号大街1号;或者联系龙图腾网官方客服,联系龙图腾网可拨打电话0551-65771310或微信搜索“龙图腾网”。
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。