一种自动生成状态机RTL代码的方法
1 引言
电子设计自动化(Electronic Design Automatic,EDA),在集成电路设计中扮演了重要的角色,无论前端还是后端设计都需要熟练掌握和使用各种EDA工具,现今EDA软件主要由国外厂商提供,国内这方面的研究与开发还比较少。
文中研究探讨了一种将Matlab的StateFlow工具包生成的状态转移图,自动转换为Veri吨描述的状态机寄存器传输级(Register Transfer Level,RTL)代码的方法;并根据该方法成功设计了STG2RTL软件,该软件能减轻代码设计过程中的工作量,缩短开发周期,并已应用于实际设计过程中。
2 状态机设计方法
基于Verilog的状态机RTL设计方法非常灵活,按代码描述方法的不同分为直观状态机、隐含状态机川直观状态机中又有二段式描述和三段式描述等。为了保证代码的规范性与可靠性,提高代码可读性,文中选择“三段式”描述。“三段式”代码主要包括3个部分。
(1)状态转化部分,这部分定义了基于时钟的寄存器.对状态值进行不同的编码可以得到不同的寄存器组类型。比如One-Hot码,使用该码可以简化输出组合逻辑,但是消耗了更多寄存器资源;再如采用Gray码,由于每次状态变化时只改变一个比特位,因此可以降低功耗。
(2)状态转移条件此部分是纯组合逻辑,实现了状态转移的条件判断在这部分中,如果某一状态下通过不同条件进入不同状态,则应仔细考虑这些条件间的优先级。
(3)输出逻辑部分.根据不同需要可以有多种方式实现,比如,处于某状态时,输出一个时钟周期的信号,或多个时钟周期的信号;也可以在进入某状态的时候,输出一个或多个时钟周期的信号。
由此可见,状态机代码实现过程中有很多规律,利用这些规律可以通过软件自动生成代码。
3 Matlab中的StateFlow工具
Matlab提供了非常强大的状态机图形化输入工具StateFlow,使用该工具可以方便地定义状态机输入输出接口信号,画出状态转移图以及状态转移条件。图1所示为StateFlow中输入的OTG(On TheGo)接口控制芯片设备发包子模块(DEV_SIE_PF)的状态转移图.图2为StateFlow中定义的输入输出端日以及时钟复位信号,该图形保存为DEVSIE_PF. mdl文件。

图1 Stateflow中输入状态转移图
4 状态转移图到RTL代码
在mdl文件的基础上,可以进行RTL代码的转换,转换包括两个过程,首先是信息提取,分析mdl文件,得到有用信息,构建数据结构;然后是代码生成,利用该数据生成需要的RTL代码。

图2 StateFlow中接口信号定义
4.1信息提取
mdl文件不仅包含了有用信息,同时拥有大量冗余信息.因此需要一种快捷、简便的方法进行提取操作.Tcl/Tk是一种脚本语言,它可以高效地处理文本,利用Tcl/Tk语言,按照以下步骤方法能够很轻松完成上述工作。
(1)去掉文件中所有的空白字符、回车和换行字符
(2)搜索关键词state.junction.transition.data等,并在关键词前插入一个空白字符
(3)根据空白字符分割文件中的内容,得到的一组字符串组,并保存于一列表中。
(4)利用正则表达式,对列表中每个成员,即字符串进行匹配,提取出所需的信息。
本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
- 上一篇文章:基于ADS的微波放大器设计
- 下一篇文章:汉明码编译码的FPGA设计与实现
