[发明专利]一种基于字符分隔值文件转换Verilog代码的方法有效
申请号: | 202010531916.5 | 申请日: | 2020-06-11 |
公开(公告)号: | CN111814417B | 公开(公告)日: | 2023-09-26 |
发明(设计)人: | 黄继业;闻勇强;高明裕;何志伟;杨宇翔;林辉品 | 申请(专利权)人: | 杭州电子科技大学 |
主分类号: | G06F30/34 | 分类号: | G06F30/34 |
代理公司: | 浙江永鼎律师事务所 33233 | 代理人: | 陆永强 |
地址: | 310018 浙江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 字符 分隔 文件 转换 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读取完毕,将其用于生成模块内所有定义的变量,其生成文件的文本形式为“wire/reg [n1:0] 变量名1; wire/reg [n2:0] 变量名2; ……; wire/reg [n3:0] 变量名N;”,在生成变量定义的代码之后在其文本之后生成现态次态切换的Verilog代码;
所述S3,给每个字符分隔值子文件分配状态号区间,读取各个子文件内的状态跳转数据,生成状态跳转部分的Verilog代码,包括以下步骤:
S30,读取Sub_State_Name中所有的子状态标号,每个状态标号作为一个子状态,为每个子状态分配500个状态号,每个子状态的基本状态号以500为单位递增,Sub_State1的基本状态号范围为0-499,Sub_State2的基本状态号为500-999,按此分配,在文本中生成Verilog代码中每次均固定生成“always@(*) begin n_state = 0; case(c_state)”;
S31,解析状态设计子文件,按行读取与状态跳转的各列,首先读取State_Cur,生成文件的文本形式为“(分配到的基本状态号+子状态中的状态):”,在遇到下一状态之前,所有的状态跳转判断语句均属于同一状态,再读取State_Jump_Condition判断语句的字段,其生成文件的文本形式为if(判断语句字段),若判断语句字段为空,则判断语句字段不生成任何文本,接着读取目标状态的那一字段,其生成文件的文本形式为(“n_state= 跳转的目标状态字段;”),继续读取当前状态下其余各行的状态跳转判断语句以及目标状态,生成前述文本,当State_Cur读取到其他状态号时完成当前状态所有状态跳转分支的Verilog语句生成,在该状态文本的最后添加(“else n_state = c_state;”),一个状态最终生成的Verilog文本代码的形式为“(基本状态号+子状态内状态号偏移): begin if(判断语句1)n_state = 目标状态1;else if(判断语句2)n_state = 目标状态2; …… elseif(判断语句N)n_state = 目标状态N; else n_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; endcase end”,即完成状态设计子文件的状态跳转部分的代码生成;
所述S4,读取每个字符分隔值子文件内对应状态所执行的操作,生成各个状态语句执行的Verilog代码,包括以下步骤:
S40,生成时序逻辑部分固定的Verilog语句,其文本格式为always@(posedge Clk,negedge Rst) begin,读取总文件中Rst列的数据,当读到字段字段为空时,Rst所有执行语句读取完成,将其用于生成模块中的复位部分代码,其生成文件的文本形式为 “if(Rst)begin 复位语句1; 复位语句2; ……;复位语句N; end”,在复位语句生成之后需要添加上“case(c_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(执行语句判断条件1) begin 执行语句x1;执行语句x2;……; 执行语句xn; end else if(执行语句判断条件2) begin 执行语句y1;执行语句y2 ;…… ;执行语句ym; end;
S43,按顺序读取O_N_M_C,读到空字段或者State_Cur列读取到其他的状态,则标志着不满足所有判断条件的执行语句块读取完毕,将读取到的语句块生成Verilog代码,其文本形式为“else begin 执行语句1; 执行语句2; …… ; 执行语句N; end”;
S44,重复S40-S42,将子状态中的所有状态的执行语句全部生成Verilog代码,完成之后在文件的末尾添加上“default: ; endcase end endmodule”,至此全部的Verilog代码已经全部生成。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010531916.5/1.html,转载请声明来源钻瓜专利网。