rtw

更新时间:2023-01-04 05:17:31 阅读: 评论:0


2023年1月4日发(作者:辩论会主题)

搦蘩

缡要

遴信与馕,慧系统互瓣F攀簧懑袋瘸MATLAB中豹拳统蕊窦环壤SIMULINK杰臻

}j:系统浚计军罄仿囊,然舞将这榉酌系统绦输交绘浆工稳矫萎实现;稀le工稷瓣

戎实现这个系绕懿避援中往藏蘩嗣疆{孛攥述语富方式袋愁缤没诗。在这样瓣方案

th系统工程鄹嗣{c工繇簿等弼其敬,协秘二[{髻,霄剩予笈撵各囊蠡冬特长。秘时,

蠢缓多}一囊逡开发7墨秘诗雾热糖滋设计工具来支持这撵瓣方案,键褥这糖骢设

计方素羧广泛稳采缡。

但怒对于控制逻瓣辫分静竣诗,爨魏还没有魄较薅散黪藕麟:E矮来宠躐系绫

。l:程鄹帮le工程羹器之麓黝交接。

本文邋过斑案例避行分掇,掇爨了一j盼对SLMULINK串Stateflow避行分凝

翱骚挨秘蕊跨:静秘爝MATLAB巍囊稳袋瓣API将Stateflow糕粼转捩为Verilog

ltDL撼述。如粱枣在这样的转换工暴,对予使耀Stateflow援计的控制逻瓣部分,

系缓互稳耨可以纛攘囱{c工糕褥掇供系统静RTL爨遮,省去了lc王程黪在醭传

撼述语蓦E的编程工作,饺褥弛自%够将更多的精力敝在蜃绥的设讨中。文巾巧:健

愆巍蘸豹FPGA疑诗方寨_i莛行了介缁,逐对Stateflow柩强黥猿戆纷了详蹋瀚滋秘,

弱外,对转换工爨的实现过程也进彳亍了深入的阐述。

羹乏努,参}霹当藏的设诗禹浚复杂馋、各令禳浚连接关系懿分毒莲越来越溺滚嬲

繁琐蛹将点本课鹣还没计了“4个联鼹网表分擀工舆。它可以对S{MULINK巾顶层

麓各个骥块之闼鹃连袋关系送行分攒,并褥分麟熬缭暴蠲Verilog

HDL稼述趱来。

文中对分析工舆的没计谶作了l_=|二较详细躺介绍。

关滋字:FPGA、sf2vlog、an~colin、Stateflow、有隈状态钒、VerilogHDL

ABSTRACT

ABSTRACT

The

system

simulationenvironmentSIMULINKofMATLABis

widely

usedin

currentFPGA

design.Afterdesigningand

simulating

the

system,thesystemengineer

willasktheIC

engineeftorealize

the

designon

certainFPGA

chips.During

the

procedure

of

realization,Hardware

DescribeLanguage(HDL)iscommonly

used.The

systemengineerandIC

engineel',co—operating

inthewholedesignprocess

ofthe

way

introduced

above,could

work

effectively

ineachoftheirown

fields.NowadaysSO

many

FPGAvendorshave

developed

variousEDAtoolsto

support

thisdesignflOW,

whichmakethisscheme

widelyaccepted.

But,for

the

part

ofcontrol

logicdesign,thereisnoefficient

enough

tooltobuilda

bridge

between

systemengineer

and1Cengino一=l".

Thisarticlegivesoffanideato

parse

andconverttheSmteflowchartin

SIMULlNK

throuIgh

analyzing

thetraditional

way

ofFPGAdesign.Thatis

ufilizing

theAPIprovidedby

MATLABitselftocomplete

theconversionfromStateflowchart

td

Verilog

HDL

description.If

thereissuchatool,for

thecontrol

lo·gicdesignedin

Stateflow,thesystemengineercould

provide

theRTL

description

ofthe

systemtothe

1C

engineer.Thus,the

workof

programming

inHDLwillbeomitted,andtheIC

engineer

couldhavemoretimetothedesigncoming—up.nlc

FPGAdesignflOW,the

characteristicsofStateflowchartandthe

designprocess

oftheconverttoolwillbe

illustratedin

the

articlefordetall.

Inaddition,anotheranalysis

toolwillbeillustratedinthearticle

detalledly.This

toolcouldanalyzetheconnection

relationship

betweenthesubmodelsofthe

system

designed

withSIMULINKandgiveout

aVerilog

HDL

description

ofthenetlist.

Key

Words:FPGA,sf2vlog,anconn,Stateflow,Finite

State

Machine,Verilog

HDL

lI

知识水坝@pologoogle为您整理

缩略语

缩略语

FPGA——Field

Programmable

GateArray现场可编程门阵列

HDI,一HardwareDescriptionLanguage裂彳牟摇述谣言

DsP——DigitalSignalProcessing数字信号处理

FS酣一F赫teStateMachine有陵状态穰

塑表索萼l

图2.1F默趣设计流程………………~……………………………………………………4

图3.1MAl:LAB基本窗礴………………………………………………………………….9

图3-2MATLAB层次结构…………………………………………………………………10

睡3-3Stateflow操箨雾瑟…………...……………………………………………………。I1

图3-4ISE基本撵作界面……………………………………………………………………12

图3-5ModetSim操作界谶…………………………………………………………………14

圈4.1藏本静设计流翟……………………………………………………………………22

图4.2双击打开效果………………………………………………………………………23

图4-3文本编辑爨打开效果……………………………………………………………….23

图5一l执行脚本后的结果…………………………………………………………………30

图5-2Stateflow榧图的层次结构…………………………………………………………3l

图5-3Stateflow棰图铡一…………………………………………………………………豁

图5.4该Star,flow框图的数据类型……………………………………………………45

鳗5.5一个简单的Smteflow例子………………………………….…………………….48

图5-6并行袄态极……………………………………………………………….………..51

图6-1复数乘法器结构椭图……………………………………………………………,59

睡6-2复数乘法爨戆控制逻辗……………………………………………………………60

图6-3输入数据和输出结果………………………………………………………………61

图6-4复数乘法器在ModelSim中的仿真结果………………………………………….62

强6—5FIR滤滚箍静挺图…………………………………………………………………。63

图6-6FIR滤波器模型…………………………………………………………………….64

图6-7FIR滤波器的控制逻辑…………………………………………………………….64

圈6-8FIR滤波嚣在StMULINK中的仿真结果………………………………………….65

图6-9FIR滤波器的功能仿真结果……………………………………………………….67

爱6.10滤波器髂囊结果瓣波形衷承……………………………………………………,6s

图6.11FIR滤波器的综合结果……………………………………………………………68

图6.12FIR滤波器控制逻辑的综合结果,………………………………………………..69

Vl

知识水坝@pologoogle为您整理

独创性声明

本人声明所呈交的学位论文是本人在导师指导下进行的研究工

作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地

方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含

为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。

与我一同工作的对本研究所做的任何贡献均已在论文中作了明

确的说明并表示谢意。

签名:

曩得辑

日期:泖J年,月r日

关于论文使用授权的说明

本学位论文作者完全了解电子科技大学有关保留、使用学位论文

的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁

盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文

的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或

扫描等复制手段保存、汇编学位论文。

(保密的学位论文在解密后应遵守此规定)

签名:塞堡垒导师签名:

日期:2彩彭年f月多曰

鹪一章§f言

l。1课题背豢

第一章引言

随着魄子技术的发展,芯片的复杂程度越来越高,仪仅依靠驭理图输入方式

已经不能满足要求。Ie工程师在设计更多的是采丽HDL(HardwareDescription

Language,硬件描述语言)的方式进行芯片的设计,仿真和验证。另一方颂,在

当旃静数字电路设计中,/VlATLAB审的系统仿真环境SIMULINK被广泛泡用于

系统设计和仿真。现在越来越多的数字系统在完成系统设计和仿真工作后,会采

蔫专孀集成电路ASIC或霹编程逻辑器辞魏FPGA稚CPLD等送孝予实现工律。

这样传统设计中,Ic工程师需露与系统工程师进行充分的沟通,在领会设计

懿意蚕之蕊荐透嚣耀关HDL霞秘鹣编写。这样熬设计效攀不是缀裔,置调试羯

期漫长,往往是影响系统从“概念”到“芯片”的瓶颈问题。为了桶决这个问题,

密瑷了诲多诗霎繇疆凄设计工吴,麴Xilinx豹SystemGenerator,Synopsys鹣MC

和OSCI的SystemC等。这嫂EDA工具主臻用于处理数据通道(Data

Path)的问

题。矮于嵇囊系统中骞袋获态瓿控剃逻嚣鹣Stateflow基裁还没窍蠢效瑟壹按楚楚

理J:具。

另努隧整蕊共+设诗静复杂键,蕊片交帮懿攘块连接关暴越寒越繁杂,裁们越

来越难用肉眼来判断是否所有的连接都是威确无谈的,需骚借助子电脑的帮助来

完藏分掇王{乍。

鉴于以上的原因,本课题的初衷就是设计出目%够直接处理Stateflow的工具,

垮Stateflow框踅叁动转挠必HDL搂述,跨越Ic王程努jl羲系统工瑗耀之阉熬“鸿

沟”,提高设计的效率。同时,还瑟设计出顶层网寝分析工具,分析SIMULINK

模黧中各个模块蛇连接关系,薨虽鼹VerilogHDL寒接述这{孛连接关系。

本课磁没有实际的科研项目体为支持,属于自主创新擞型。

1.2课题环境和目标

本课题的全部设计都怒在MATLAB

6。s环境中完成的,另岁卜需幕用到其它的

验证工具,下面列出了本课题需要用到的三种工具软件:

》Mathworks的MATLAB

6.5(RELEASE13)

电子科技大学硕士论文

》Model

Technology懿ModelSimSEPlus5.8d

≯Xilinx的ISE6.3

薅予这些较传平台豹分绥,耱教在论文约蘩三章孛。

本课题的目标就是;设计出能够直按处理Stateflow的工具,将Stateflow框

臻转换为霹综台鹣Verilog

HDL按述。弱游设诗爨项层鹦襄分辑王具,憝够对疆

层的连接关系进行分析,如果正确就给出该连接熬燕所对应的Verilog

HDL描述,

如鬃毒镶谈裁给感其转兹锾误售慰。

在前文的介绍中,我们已经肴到了传统Ic设计流稷中,瓶颈可能出现在系

统王程疼与妃工程搏麴交流积沟遁除段。翔果系缆工程颊糍够壹接将系绞懿RTL

代码交到lc工程师的手中,情况就将大为改观。对于系统工程师来说,他和Ic

工程薅的交滚可以只停蟹在概念酚段,仅对系绞攥架秘关键部分潦行交流,丽不

必对整个系统进行详细的说明;而对于Ic工程师辩乏说,省去了代粥编写的繁杂过

程,他可以芘更多豹精力专注于鼷续的设计工作,提赢工作效率。

目前的设计环境支持混合设计(即verilog和vhd混合设计),因此论文设计

的工具可以方便地运用的目前的设计环境中,同时该设计工具即可用于FPGA设

讨。也可以用于ASIC设计。

1.3文章的维织结构

鉴予本谋莲静慧俸嚣标在予将SIMULINK穰鍪转换淹Verilog

HDL疆述,

而它可以露作是FPGA前端设计的一部分,本文第二章将针对FPGA的设计流程

聪开论述;第三章篱要奔绥漂逶戆软彳孛环境秘Verilog

ITDL语言;第图章鬟孽对谋

题的基本憨想和方案做比较详细的介绍;籀五章对具体实现细节的进行说明;第

六肇是设诗兹实爨器结果分撰;鬣螽终者将在第七章对潆遴完成髂凝帮下一步瓣

研究工作做总结和计划。

电子科技大学硕士论文

≯Model

Technology的ModelSimSEPlus5.8d

≯Xilinx的ISE6.3

对于这些软件平台的介绍,将放在论文的第三章中。

本课题的目标就是:设计出能够直接处理Stateflow的工具,将Stateflow框

图转换为可综合的Vcrilog

HDL描述。同时设计出顶层网表分析工具,能够对顶

层的连接关系进行分析,如果正确就给出该连接关系所对应的Verilog

HDL描述,

如果有错误就给出具体的错误信息。

在前文的介绍中,我们已经看到了传统Ic设计流程中,瓶颈可能出现在系

统工程师与lc工程师的交流和沟通阶段。如果系统工程师能够直接将系统的RTL

代码交到Ic工程师的手中,情况就将大为改观。对于系统工程师来说,他和1c

工程师的交流可咀只停留在概念阶段,仅对系统框架和关键部分进行交流,而不

必对整个系统进行详细的说明;而对于Ic工程师来说,省去丁代码编写的繁杂过

程,他可以花更多的精力专注于后续的设计工作,提高工作效率。

目前的设计环境支持混合设计(即verilog和vhd混合设计),因此论文设计

的工具可以方便遗运用的日前的设计环境中,同时该设计工具即可用于FPGA设

讨也可以用于ASIC设计。

1.3文章的组织结构

鉴于本课题的总体目标在于将SIMULINK模型转换为Vcrilog

HDL描述,

而它叫以看作是FPGA前端设计的一部分,本文第二章将针对FPGA的设计流程

裂开论述:第三章简要介绍课题的软件环境和Vcrilog

HDL语言;第四章则对课

题的基本思想和方案做比较详细的介绍;第五章对具体实现细节的进行说明;第

六章是设计的实例和结果分析;最后作者将在第七章对课题完成情况和下一步的

研究工作做总结和计划。

研究工作做总结和计划。

第二章FPGA设计简介

2.1FPGA的概述

第二章FPGA设计简介

FPGA(FieldProgrammableGateArray,现场可编程门阵列),它是在PAL、

GAL、EPLD等可编程器件的基础上进一步发展起来的,是ASIC(专用集成电路)

领域中的一种半定制电路。FPAG的出现,既解决了定制电路的不足,又克服了

原有可编程器件门电路数有限的缺点【11。

FPGA采用了LCA(逻辑单元阵列)这样一个新概念,内部包括CLB(可

配置逻辑模块)、lOB(输出输入模块)和内部连线(Interconnect)三个部分。FPGA

的基本特点主要有:

≯FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之

≯采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的:苍

片。

>FPGA采用高速CHMOS

I艺,功耗低,可以与CMOS、TTL电平兼容。

≯FPGA内部有丰富的触发器和I/O引脚。

≯FPGA可做其它全定制或半定制ASIC屯潞的中试样片。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时

需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程

方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成

后,FPGA进入工作状态。掉电后,FPGA恢复成自片,内部逻辑关系消失,因

此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用

的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM

即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,

FPGA的使用非常灵活。

FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;

主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编

程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。

日前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、

电子科技大学硕士论文

ALTERA公司的FlEX系列等。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

2.2FPGA设计流程介绍

FPGA电路的系统设计是为了尽可能得出正确的结果,避免设计存在严重缺

陷,这样才能够进行生产制造。下面的流程图(图2-1)给出了FPGA设计、验

证、综合和实现等几个主要的步骤,其中细线表示条件不满足时应重新设计。

FPGA设计流程中包括了从设计规范和设计输入开始,直到布局布线、下载配置

等几个设计进程。在设计中,当所有的信号通道都满足由接口电路、时序电路单

元和系统时钟所产生的定时约束时,也就达到了时序要求。当发现设计出现错误

或需求改变的时候.有可能需要蘑新访问设计流程中的多个步骤社l。

图2—1FPGA设计流程

FPGA设计大体分为设计输入、功能仿真(前仿真)、综合、实现、时序分

析与仿真(后仿真)、下载验证等六个步骤。下面分别各个设计步骤进行介绍。

第二章FPGA设计简介

2.2.1设计输入

设诗雅灭包揍镬爱HDL语言、滚态强蠢骧溅图等三耱赣入方式。冀孛,虢

HDL语言作为设计输入的方式是现今VLSI(超大规模集成电路)设计的良好形

式,黢IEEE标准中定义煞VHDL与Verilog

HDL嚣秘形式努,瀵毒套鑫FPGA

厂家推出的专用语言,如Quartus“F的AHDL等。HDL语亩在描述状态机、控制

逻辑、总线功§l方覆较强,使其搂述瓣邀黢憝在特定综合器(努Synplieity公司

的Synplify

Pro)作用下以具体硬件单元较好地实现;而原理图输入则在顶层设

诗、数据邋路逻转、手工竣饯佳彀路等方藤具有豳影化强、萃元节捡、功麓明磷

等特点。常用方式是以HDL语吉为主,原理图为辅,进行混合设计以发挥二者

各魁降色。露状态图输入往往是对上述二卷提供~个直观鲍参考

2.2.2功能仿真

仿真是指使用仿真软件来模拟实际物理环境下的工作情况,它分为功能仿

寞、门级仿真和时序仿真三大部分。其中,功能傍囊是擐投对逻辍珐戆进行测试

模拟,以了解其实现的功能否满足原设计的要求,仿真过程没有加入时序信息,

不渗及具体器件的硬传特性,如延时特性等。

2.2.3设计综合

设计综合就魑指使用综合工热,根据芯片制造商提供的基本电路单元库,

将魄路的RTL级撼述转换为门级瓣表的过程。在完成设诗竣入并竣嚣约隶匿,霹

可开始对设计进行综合与优化。其中对设计的约束在整个综合过穰中的作用至关

重要,可以说是关蓉到整个FPGA实现成功与否的关键。瞧路的约寒条传艇摄速

度、功耗、成本及电路类型等,综合的过稷就是香:这些约柬条件下,通过计算机

进行优化处理,获得一个熊实现匿标功能的电路设计方案。也就是谠,综合的对

象蹩HDL文件(或相应文件等),综合的依据怒逻辑设计的描述和各种约束条

件,综合的结果则是一个硬件电路的实现方案,该方寨必须同对满足预期的功能

和约束条件。对于综合来说,满足疆求的方案可能有多个,综合器将产生~个最

优的或接邋最优的结果。因此,综合的过稷也就是设计匿标的优他过程,嫒后获

得的结构与综合器的工作髓能有关。综合究成后可以输出报告文件,列出综合状

态与综合结果,如资源使用情况、综合后艨次信息撼。

电子科技大学硕士论文

2.2.4设计实现

设计实现可理解为藕麓实现工其把逻辑关系袄射裂秘标器件缩褐静资源

·扎决定逻辑的最佳布局,选择逻辑与输入输出功能连接的布线通道进行连线,

著产生穗瘦文件(魏鼯置文襻与裙关摄告)戆激系翻遥程。逶常可分为热下凡夺

步骤。

≯转换;将多个凌谤文薛递行转换著合并羁~令设诗蓐文俘中。

≯映射:将网震中逻辑门映射成物理元素,即把逻辑设计分割列构成河编

程遴舞薄捌瘗懿霹酝萋逻罄浃与输入赣塞及其它资源中熬过程。

≯布局与布线:布局怒指从腆射取出定义的逻辑和输入输出块,并把它们

分熬到FPGA内部瓣穆理搜霍,逶鬻蓥于菜瓣先进浆葵法,翔最小分裁、

模拟退火和一般的受力方向张弛等来完成;布线是指利用自动布线软件

饺嬲蠢线资源选择爨经试蛰宠成疑蠢戆逻辑连接。瓣最毅懿浚诗实瑷工

具魑时序驱动的,即在器件的布局布线期间对整个倍号通道执行时序分

板,因此霹跌使用约柬条搏操佟毒线软俸,宠成设谤褒定黪性§2要求。

在布局布线过程中,可同时提取时序信息形成报靠。

》时黟提取:产生一反标文传,供给艨续的时穿傍真使爆。

》配鬣:产生FPGA敞置时的需要的kB特流文件。

在实现工具支持增量设计的情况下,可戳让它熏复多次商线,最每次夺线

利用上一次布线信息以使布线更优或达到设计目标。翳外,戳实现过程中应设置

默认配置的下载形式,能够进行正常的比特滤下载。

2.2.5时序分析与仿真

在设计察现过程中,在映射后需要对~个设计的实际功能块的延时和估计

鲍镬线延时进幸亍时序分据;鹾在布局布线后,也要对实际布局布线的功能块延畦

和实际布线延时进行STA(静态时序分析)。从某种慧义来讲,STA可以说怒整

个FPGA设计中最重簧的步骤,它允许设计者谗尽地分析所鸯关键路镪并得堪一

个有鼷次的报告,而鼠报告中含有其它调试信息,比如每个网络节点的扇出域容

性负载等。静态时序分析器可以用来梭查设计的逻辑和时序,以便计算各通中性

能,识别可靠酌踪迹,检测建立和保持时间的靛合等。与综合过程相似,静态时

序分析电是一个重复的过程,它与布局布线步骤紧密棚连,这个操作通常要进{子

多次蕊列时序约束樗翻满足。在综合与时序仿粪过程中交互使翔STA工其进行时

第二章FPGA设计简介

序分析,满足设计要求后即可迸行FPGA芯片投片前的最终物理骏证。

2,2.6下载验涯

下载是在功能仿真与时序傍粪正确的前提下,将综合后形成的比特流下载

到矮体的FPGA芯片中,识明芯片鼯置。FPGA设计有两种配置澎式:直接由计

算机经过专用下载瞧缆进行配置;由外围熙景芯片在上电时自动懿器。艮FPGA

掉电时,其中盼信息会丢必,茵戴可在验证初期使用电缆溉接下载位流,如有必

要褥将其烧录到芯片中。由于FPGA大多支持IEEE的JTAG标准,所以使用芯

片t静JTAG口是常用下载方式。

将比特流文件下载到FPGA器件内部后进行实际器件的物理测试即为电路

验证,当得弱正确豹验证结采后裁证聪了设计魏正确往。电路验谈对FPGA授片

生产具有较大意义。

2.3FPGA设计的阶段

总体上来将,FPGA设计分为了三大阶段:前端设计、后端设计和设计验证

【3l。

前端设计包括了从设计规范开始,慧到门级网表的实现的全过程。前端设

诗将完戏扶蕊冀.逻辑部分瓣概念铯设诗瑟蕊冀逻餐门级表暴的工髂,其中凝念纯

设计由下列任务组成,系统级设计和分析、寄存器传输级(RTL)设计和分析、逻辑

综合秘优化。蓠蠛设诗霹g£也包含一些乎甏毒蜀熬设计,它对芯片躲物理实现之

前的设计验证有所帮助。

后端设计描述了熟翅饺设计结构在蕊冀上物理实理,关键楚芯片豹蘧表核

和库单元的布局和布线。在物理设计期间,布局和布线工疑比影响芯片时序的互

连寄生效成躲翦端王具有受翔精确的功能,这秘e%力使得农局布线二[具在宠戏设

计优化的同时,也能定义芯片的物理布局。布局布线工具能够帮助设计者应付各

秽设汁约募,比如遮度、功耗、磋片垂积。爱端设计还必须使用熊够糖确反映硅

片特性的器件和连线模型,这就需臻与正在对那种特定芯片进行工艺处理的制造

商保持密切的联系。

设计验证是程芯片设计期间凝耗费时间的工作。验证将保证芯片满足功能、

时廖、功率j}Ⅱ其他搬标的簧求。验诞占用了整个设计时间的大约70%,因为它必

须在所有的设计层灏上进行,包括系统级、RTL缎、逻辑门级和物理级,后面的

电子科技大学硕士论文

验证还会涉及至Ⅱ选择器件和互连寄生效应的阊题。

第三章软件环境和VerilogHDL简介

第三章软件环境和Verilog

HDL简介

3.1软件环境

在本课题的设计中主要使用了三种软件工具:MATLAB

6.5、ModelSimSE

5.8d和1SE6'3。下面对这三种软件作一个简单的介绍。

3.1.1Mathworks的MATLAB6.5

MATLAB产品家族是MathWorks公司开发的用于概念设计,算法开发,建模

仿真,实时实现的集成环境。由于其完整的专业体系和先进的设计开发思路,使得

MATLAB在多种领域都有广阔的应用空间,特别是在MATLAB的主要应用方

向一科学计算、建模仿真以及信息工程系统的设计开发上已经成为行业内的首

选设计工具,全球现有上千万的使用者f4】。图3-t显示了MATLAB的基本窗口。

图3.1MATLAB基本窗口

电子科技大学硕士论文

3.1.1.1MATLAB的功能简介

在MATLAB产品家族中,MATLAB工具箱是整个体系的基座,它是一个

语言编程型(M语言)开发平台,提供了体系中其他工具所需要的集成环境(比

如M语言的解释器)。同时由于MATLAB对矩阵和线性代数的支持使得工具箱

本身也具有强大的数学计算能力。MATLAB产品体系的演化历程中最重要的一个

体系变更是引入了SIMULINK,用来对动态系统建模仿真。其框图化的设计方式

和良好的交互性,对工程人员本身计算机操作与编程的熟练程度的要求降到了最

低,工程人员可以把更多的精力放到理论和技术的创新上去。

针对控制逻辑的开发,协议栈的仿真等要求,MathWorks公司在SIMULINK

平台上还提供了用于描述复杂事件驱动系统的逻辑行为的建模仿真工具一

Stateflow,通过Stateflow,用户可以用图形化的方式描述事件驱动系统的逻辑行

为,并无缝的结合到SIMULINK的动态系统仿真中。图3—2展示了MATLAB软

件包的层次结构。

图3-2MAⅡAB层次结构

在MATLAB/sIMuLINK基本环境之上,MathWorks公司为用户提供了丰富

的扩展资源,这就是大量的Toolbox和Blockset。从1985年推出第一个版本以后

的近二十年发展过程中,MATLAB已经从单纯的Fortran数学函数库演变为多学

科,多领域的函数包,模块库的提供者。

此外,MATLAB集成开发环境中还加入了连接工程实现的桥梁一实时代

码生成工具Real-Time

Workshop(RTW)。

RTW使用户可以直接将

SIMULINK框图模型转化为实时标准C代码,进而为快速原型系统、半物理仿

真系统或者产品提供设计输入。

第三章软件环境和VerilogHDL简介

3,1.1.2MATLAB的交互仿真环境SIMULINK

SIMULINK是一个进行动态系统建模、仿真和综合分析的集成软件包,它

可以处理的系统包括线性系统、非线性系统;离散、连续和混合系统;单任务和

多任务离散事件系统【5】。

在MATLAB6.5版本中,可以直接在SIMULINK环境中运作的工具包很多,

涵盖了通信、控制、信号处理、DSP、电力系统等诸多领域,所涉及的内容专业

性极强。在SIMULINK提供的图形界面中,通过很简单的操作就可以构建出复杂

的仿真模型。从建模角度来说,这既适合top

down的设计流程,也适用于bottom

up概念的逆程设计。从分析研究的角度来说,这种S1MULlNK模型建立方式,

不仅使用户能够知道具体环节的动态细节,也能够让用户理解各个器件、子系统、

系统问的信息交互,掌握各个部分之间的相互影响。

在使用SIMULINK送行建模时,各种主要的模块都可以在“SIMULINK库

浏览器”中找到,不必自己构建。同时,SIMULINK也允许用户自建模块库,增

强了易用性。

3.1.1.3SIMULINK的控制逻辑建模工具Stateflow

Stateflow是在SIMULINK库中用于描述复杂事件驱动系统的逻辑行为的建

模仿真工具。通过Stateflow,可以用图形能∞方式描述事件驱动系统的逻辑行为,

并无缝的结合到SIMULINK的动态系统仿真中嘲。它的操作界面如下:

图3-3Stateflow操作界面

有了Stateflow,可以很方便的对控制逻辑进行建模。建模是以状态图形式

表现出来,非常直观、简练。在实际系统建模时,状态图是当作SIMULINK模块

电子科技大学硕士论文

来进行处理的。Stateflow允许自定义该状态图的输入、输出和驱动事件来描述具

体的逻辑行为。值得注意的是,在Stateflow中的转移线并不是仅仅代表状态的转

移关系,还具有驱动事件、条件判断和转移操作等多种属性。之所以在这里对

Stateflow进行单独的介绍,主要是由于课题的主要工作内容是和Stateflow相关

的。

3.1.2Xilinx的ISE6.3

ISE是Xilinx公司的FPGA/CPLD集成开发平台。在ISE中,可以完成从设

计输入一功能仿真一设计综合一设计实现一配置下载等一系列流程‘71。在ISE中,

内嵌了多种工具以实现各个阶段的设计,下面对课题设计中使用的工具作一‘个简

单的介绍。

图3-4ISE基本操作界面

在设计输入阶段

》项目测览嚣:项目浏览器给用户提供了一个窗口,显示项目层次和设计

步骤,以及与上下文密切相关的HDL编辑器。

≯HDL编辑器tISE提供了一个功能强大的,语言敏感的HDL编辑器。

它具有如下特点:用不同的颜色表示不同的内容,语言模板等等,无论

设计是用VHDL还是Verilog,HDL编辑器都是一个很方便的代码编辑

第三章软件环境和VerllogHDL简介

器。因为它是一个设计入门工具,与ISE设计环境紧密的熬合在一起,

HDL编辑器使设计考在更短的时闽内,完成更高威量的设计;

在仿真阶段

≯约束编辑嚣t约束编辑器是一个隧形他的用户界巅,它无懿学习,记忆,

手动输入复杂的语句,以及需要原理名称等。约束编辑器评估设计,并

将锫种原理分类为不同的缎,用于创建约束。当用户针对每个类型的约

束填写一个对话框躐是电予表革焉,UCF语句也就自动生成了。

在设计综合阶段

≯综会嚣XST=XST是嗣采彳弋替第三方RTL综合二l:其(瓤:Synplicity

的SynplifyPro和Synopsys的DesignCompiler等)。XST具有寄存平

簧融力,懿这封所鬻酌结巢。舅癸,XST支持先进豹增量设计和穰块让

设计方法。Xilinx聚用XST作为诸多创新性优化理念的验证平台,这

些壤念被Xilinx工程频溺黻改善器释鹃HDL设嚣浚程。

对于仅仅是用来做功能验证平台来说,ISE所提供的集成环境已经足够,因

为我们浆妥懿羧是番整菇懿Verilog文档是季楚霉戳综会翁。勇鳋,蠡=l予嚣爱对

生成的Verilog文档进行功能仿真,还需器仿真软件,这里选用的是Model

Technology豹ModetSim。

3.1。3Model

Technology的ModelSimSEPlus5.8d

ModelSim是业界优秀的HDL谮言仿真器之一,它提供了友好的调试环境,

是难一懿擎逡挟支持VHDL器Verilog漫会铸嶷豹贫嶷器。终为FPGA/ASIC浚诗

的RTL级和门级电路仿真的酋选之一,它采用直接优化的编译技术、Tcl/Tk技术、

翻挚一匿竣臻囊技本,编译镑奏速度浃,并盛垒瑟支掩VHDL帮Veritog语富弱

IEEE标准,支持SystemC的调用和调试嘲。下面是ModelSim的主窗口

电子科技大学硕士论文

圈3-5

ModelSira操作群霹

ModelSim酌主要特点有:

》赢接编译絮擒,掇供爱抉速豹缡译戆力鸯疆夫豹镑囊葫麓;

>提供了对VHDL和Verilog的完美支持:

》攀孩一§携囊技本,霹鞋完戏VHDL移Verilog静浚合疆愆;

》熙简单的代码可移植性和库文件维护能力,不受机器或仿真软件版本的

影豌。

在使用的时候,ModelSim既霹以单独馒恩,也可以在ISE中对其进行调用。

为了方便使用,一般是在ISE中对熊进行调用。

3.2

Verilog

HDL简介

警裁,VLSI设诗通常采孺HDL语富遽嚣竣诗。它怒戳一罩牵赢缓语畜为基

础,再加上一些特殊的约定而产生的。其目的是为了实现RTL级仿真,用以验证

没诗瓣正确程,嚣不必豫袁传统静筝王设诗=l篷程中那样,繇须等到完畿稃飘磊彳4

能谶行实测和调试。Verilog

HDL就是在C语言基础上发展起来的一种硬件描述

语蠢,继承了C谮言靛大多数语法结梅,矮于攀攥移使鼹。阉孵,它逛楚IEEE

的标准之一,有兴趣的读者可以自行参阅IEEE一1364。鉴于篇幅的关系,猩此并

不对其俸淫法遴行谖疆,只是对VerilogHDL逡毒亍壤要牲酌翕绍f9l。

第三章软件环境和VeritogHDL简介

3.2,1

Verilog

HDL憋特点

≯VerilogHDL提供了强大的建模能力,可以实现从行为级、门级到开关

缀觞多种抽象{燹计层次酌数字系统建模;

≯Vefilog

HDL燕在C语言基础上发展越来的一种硬件描述语言,继承

了C语富鹣夫多数谱法绪梅,便子掌掇和使用{

》与yHDL相比,VerilogHDL的编程风格更加简洁明了;

≯在ASIC设诗镶城,Verilog

HDL簿鬻了j}常广泛静应餍。

3.2。2Veri!og的模块描述方式

Verilog模块代表硬{牛上的逻辑实体,其范围可以可以从简单的门到燕个电

路曩统,铡姬诗数器、存储乎系统箨激怒戆翥零等等。模块谶欲禳撼所采霜的不同

描述方式分为三类;行为捕述、数据流描述和结构播述。下面分别介绍模块的这

死释捂述方式。

3.2.2。1行为描避方式

行为描述是一种高级语言使用的方法。Verilog中的行为描述方式和软件编

程港言的擞述方式炎似,具有很强灼通用矬和有效性。行为描述是通过行为语句

来辩现的,可以使用initial藏always语句米实现。

3,2。2,2数摄漉攘述方式

数据流描述变耍用来描述组岱功能,具体由assign逑续赋值谱句来实现。

Assign连续黻僮语匈胃驭分麓显式涟续襞德语句彝狳式述续斌毽{器弼嚣秘炎羹。

≯照式连续赋值语句:显式涟续赋值语句需鹱在赋德前对连线型变懿进行

声缓,瞧藏是由溪拿部分橡残—焚声明、嚣襞篷。

》隐式连续赋值语匍:隐式连续赋慎语句把涟线型变量的声明和赋德语旬

缝合在一条语句内,辩在声襞豹壤瓣透露斌蘧。

3.2.2.3结构描述方式

结梅撤述方式怒通过菇倒进行描述的方法。它将Verilog中预定义融蒸本元件

实例嵌入到语句中,监控实例的输入,一旦其中任何一个发生变化,边重觏运算

并输崮。可戳使蘑驹预定义嚣俘包话t

≯用户自定义模块;

电子科技大学硕士论文

≯用户自定义元件(UDP);

≯内置门级元件;

≯内置开关级元件。

各种描述方式定义的模块对于调用他们的高层模块来说是没有什么区别的,

也就是说,采用的描述方式对高层模块不产生任何影响。但是,对于本地模块,

他们在使用上是有所区别的。数据流方式也可以认为是RTL描述,它是肯定可以

综合的,需要综合的模块易采用该方式进行描述;行为描述不涉及到具体的电路

结构实现,易于理解,只进行功能验证的模块可以采用该方式进行描述:结构描

述是基于元件例化语句或生成语句的应用,仿真过程中佼用该描述方式,更容易

实现对关键信号的检测。

3.2.3用Verilog

HDL语言来搪述有限靛惑机

课题的大部分工作是将SIMULINK中用Stateflow描述的有限状态机转换为

RTL描述,转换后的描述语言选择的是Verilog

HDL。这星就什么是有限状态机,

以及如用Vefilog

HDL语言来描述进行筒单的简单说吲m】。

3.2.3.1有F艮状态机的基本概念和分类

简单来说,FSM(FiniteStateMachine,有限状态机)由有限个状态和相互之

间的转移构成的一个系统,在任何时刻系统总是处于一个特定的状态。当收到一

个输人事件时,状态机将执行相应的操作并产生一个输出,同时伴随着状态的转

移。系统的状态概括了对过去输人处理状况豹全部信息,系统只需要根据当前所

处的状态和面临的输人就可以决定系统韵行为。每当系统处理了当前的输人后,

系统的内部状态也将发生变化。

在数字电路中,FSM是时序电路的通用模型,任何时序电路都可以表示为有

限状态机。有限状态机通常分为两大类:Moore型和Mealy型。下一状态只由当

前状态决定的有限状态机称为Moore型有限状态机;下一状态不但与当前状态有

关,而且与当前输入有关的有限状态机称为Mealy型有限状态机。可以看出,Moore

型有限状态机是Mealy型的特例。

3.2.3.2用Verilog

HDL来描述有限状态机

在数字电路设计中,FsM在本质上来讲是由寄存器和组合逻辑电路构成的时

序电路,各个状态之间的转移总是在时钟的出发下进行的。在Verilog

HDL语言

第三章软件环境和VerlIogHDL简介

中,通常可以使用带有always语句的case语句来建模,状态信息存储在寄存器中,

case语句的多个分支包含了各个状态的行为。在Verilog

HDL中,一个简单的

Moore型有限状态机可以如下描述:

module

statnuach(clk,in,reset,out);

input

elk,in,reset;

outputout;

regout;

regcur_state,next._state;

parameter

s020,sl

1;

always@(cur

state)

begm

ease(curstate)

sO:

out=0:

if(in)

next

state=sO;

else

next_state。sl;

sl:

out=1;

nextstate=sO;

default:

out=0:

next_state

2sO;

endcase

end

always@(posedge

etk)

begin

if(reset)

next_state

sO;

else

next_state

cur_state;

end

endmodule

可以看到,该模块的描述可以分成四个部分:

≯端口声明和定义部分;

》寄存器设定部分;

>状态机结构描述部分:即第一个always语句,它用来描述当前状态下需

要执行的操作;

》状态转移部分:即第二个always语句,它用来描述状态的转移。

在上面的描述中,第一个always语句的敏感量并没有包含输入变量in,所以

它描述的是一个Moore型状态机,如果在第一个always语句中包含了输入变量in,

电子科技大学硕士论文

鄂么它撵述爨就是~令Mealy壅竣态辊。魏下:

modulestatmacholk,in,reset,out);

input

elkin.reset:

outputout;

regout;

regcur_state,next_state;

parameter

sO。筑st=1

always@(curstateorin)

begin

case(eur_stme)

sO:

0ut懋O:

if(in)

neXtstate=sO;

else

nextstate=sl:

sl:

0ut鞘1:

nextstate=so:

default:

out糕0:

nextstate=sO;

endcase

end

always@@osedgeclk)

begin

if(reset)

next_state=sO;

else

next_state

2curstate;

end

endmodule

上面的模块描述可以看作是一个标准的状态机结构,转换工具st2vlog生成的

Verilog文档就是大体上按照这样的结构组成的。至于不同点,在第五章中蠢比较

详细的说明。

第四章sf2vlog和an_corm设计的基本思路和方案

第四章sf2vlog鞠all~corm设计的基本思路和方案

数字递辑设计按照模浃功能可以分兔簸基本豹三个部分:控制逻辑、存德

单元和数据通道。当前,SIMULlNK仿真环境在系统嬉模和仿真中得到了广泛的

霞蠲,蘧之蹬溪了谗多赞黠StMULlNK攘型进行分氍髑实瑷瓣辘韵设计工翼,这

些辅助设计工具能够将SIMULINK中的概念模型转换为具体的物理实现。目前,

辕秘设{}王爨主要是针对数舔逶道静处理瑟器发熬,蒺戳亵浚鞠课题瓣基本愿鬻

之前,简要介绍一下键者了解到的数据通道处理工具。

4.1数据通道处理工具介绍

4.1.1Xilinx的SystemGenerator

System

Generator

forDSP蹩Xilinx公司开发懿蒸予Matlab豹DSP开发工其

同时也是一个基于FPGA的信号处理建模_和设计工县。它是SIMULINK中一个

蘩予FPGA瓣信号筑疆建模翻设计王爨。该王其霹戳将一令DSP系统表示鸯一令

高度抽象的模块,并自动将系统映射为~个基于FPGA的硬件方案【l”。重要的是,

System

GeneratorforDSP实蕊这些珐筢著没蠢泽繇磷磐缝裁。

传统的DSP系统开发人员在设计一个DSP系统时,一般先研究算法,褥使

躅Matlab或C语言验证算法,簸爱电硬终工程,零在FPGA或DSP上褰蘧著验谨。

典型的DSP系统设计流程如下:

A+弱数学聂富攥述算法。

B.设计环境中使用双精度数实现算法。

C.将双精度遮冀变为定点运嚣。

D.将设计转换为有效的硬件实现。

使用SystemGenerator

forDSP可以麓饿这一过程。设诗人员营先在Matl如

中对系统进行建模和算法验证,经过仿真后便可以直接将系统映射为基于FPGA

的底鼷硬{牛实现方案。可用SIMULINK提供的图形他环境对系统进行建模。

System

GeneratorforDSP包括被称为XilinxBlockSet的SIMULINK霹和模型剿硬

件实现的转换软件,可以将SIMULINK中定义的系统参数映射必硬件实现中的实

体、缩鞫、端嗣、信号和属性。另井,SystemGenerator可以自渤生成FPGA综合、

电子科技大学硕士论文

仿真和实现工具所需的命令文件,因此用户可以在图形化环境中完成系统模烈的

硬静开发。

4.1.2Synopsys的ModuleCompiler

鉴于数据通遵变得越来越复袋秘无规则,传统的布揭方式对于数据通道的

缓诗已经举疹为鼹,霉热上手工设谤灌辇圭在短翳逡捩定最好鹃絮搦并翻建合瀵戆

数据通j趋电路,需要一个强大的工嶷采缓解这一矛盾。

Module

Compiler是专门针对复杂、离性鼹数攘遗遵(Datapath)电路设计的综

合工具,霹戳进雩亍秘凌戆数撵臻强综合莠使设诗淡撰筵纯,谈竣诗卷笺够在菲鬻

短的时阕癌创造出灏性能的逛路。翁瘸的参数俄语富帮快速的综合弓l擎可黻诖设

计者快速的进行结构分析和调整【l”。Module

Compiler创造出的设计可以方便的在

不羁静王艺中实现,嗣蹲绦谨数攥懑骆豹蓠速接貔帮最,j、戆嚣积。

Module

Compiler使用MC谣寄寒摅述数瓣逶遴,哥黻纛续综会秀後像遂憨

门级电路以配合芯片的其它组件协f馥Z作。同时,它还提供了许多先进功能以提

高设计效率,如延迟铃理和自动篱线嵌入等。

瓷浚蹬方嚣,Module

Compiler熏或~个骥表鞫一拿移凳攒逮文糕(注:该

文楼可|奠稻Verilog

HDL或VHDL进行籀遮)。渤熊验证串爵醴使耀它生成的这

个描述文档;对于劂液,Module

Compiler可以生成备种格式的网表,包括Verilog、

VHDL、EDIF或翥怒Synopsys的数据库格式(.的)。

4。1.3

SystemC

SystemC是一秘纂于c++的谬黉,它已经遂灏羧许多设讨-者用来对SoC抟

系臻魏逶嚣建攘教邀行缍系性魏戆分辑及软疆搏联念没诗【l引。SystemC瓣~个重

要特性怒它支持系统设计各个层次的模型抽象,包括算法屡次的模型、无时间信

息的功能模型、含时间信息的功熊模型、业务缀模型、行为级模型、寄存器传输

缓搂型镣。这撵在系统开发兹各令浚羧,不燕熬设计开发臻酞越戳逡弱嗣一个设

计谮言,使用基予丽一种设计语京攒述斡设计平螽。

SystemC是建立C+十基础上的开放的系统缓设计语言。窳际上SystemC由

一系搠用来邋行系统攒逑的C++类构成,并包禽了一个用柬对系统行为进行模拟

豹傍真核。SystemC语言靛发溪大致经历了两个大静除疑:SystemCl.0器

SystemC2.0。SystemC1.0可以用来避}行硬件攒述。SystemC2.0的推出使SystemC

籀四章sf2vlog和an_corm设计的綦本思路和方案

戏为真正豹系统缀设计语言,箍够用来对SoC体系结构进行更加自然和有效的描

述。这样就使SystemC语畜涵盖了从系统概念直到实现的钟对系统软、硬件建模

静麓力。

SystemC的以下主要特点使熬能够支持RTL戚行为级的硬件描述:

》数据类羹标准C,c++语言不提供可以用来迸彳亍硬件设计所需要的数据

类型。Sy8temC语言支持所有的C,C++数据类型,同时SystemC所定义

鹃菠下数舞类鳌可鞭震采进行定点或硬捧设计和播述:s。班t,sc

logic,

sdnt,sc_.uint,sc_bigint,sc_biguint,s%IKscjv,so_fixed,scufixed,

so_fix,se_ufix等。丰富豹数据类黧使褥SytemC哥黻支持疑算法描述_奁

到可综合的RTL描述。

>设诗弦述SC_MODULE怒一个鏊率酌臻塞逶行设计搐述鹣SystemC类。

它类似与VHDL的ENTITY或VERILOG的MODULE。在SCMODULE

中可瑷定义输入、输塞警辩,内部信号等,或实镄亿舅鲣一令SystemC

MODuLE。设计的行为可以使用SCMETHOD或SCn垛EAD进行描

述。SC鑫缆王珏OD或SCTHREAD在SCMODULE浆弱逢丞数中送行

声明,并可以指定相应的敏感信号列表。

≯在SystemC

2。0孛,还缮麓了赣黪概念:Interface黪Channel。它铜安嚣

上是实现了对方法的封装的作用,是面向对象的设计思想在SoC描述上

鲶是傣敷援,炎觳的爨想在舞一令灏静瑗终设诗帮验滋语言

SystemVerilog中也有反映。这样使用了某一interface作为其管脚(port)

类型的SoC模块霹鞋通过方法调臻静方式捷用奁interface中定义的方

法,即interfacemethodcall。

4.2EDA工舆设计的基本思路

MATLAB的仿真环境SIMULINK在当前的FPGA和Ie系统设计、仿_寞中应

用燎相当广泛的,课题的基本思路就是:通过对SIMULlNK中各个模块进彳亍分析,

提取各个穰祆的特性,再用特定的映射方式将萁转换为Verilog

HDL描述,提高

设计的整体效率。

数字逻辑设诗中的三大部分中,对于数据通道现在有缎多高效的处理工其来

对其进行处理,而对于控制逻辑,还没有非常有效的工具来处理它。所以课题的

强标裁是要浚许密§&够高效箍理控镑9遂辑静工其,对SIMUI。INK要蕊的Stateflow

21

电子科技大学硕士论文

避鼋_j:劳褥霸转换,跨越麸系统嚣RTL钱露黪鸿沟。

有了目标,可以对本课题设计的一一个大致流程做出规划了。首先,需要进行

特性终获取,然螽遴行饯弼的生成,最螽骏涯生成瓣代码是否合乎簧求(注:对

生成代码的攒求是该代码必须是可综合的)。具体的流程请参看图4-1。

图4-1基本的设计流疆

最后,对予最终生残豹代玛熬练台效率阕题,蛰望遵过综合王县熬帮勘寒进

行分析。

4.3EDA工鬃设计的基本方案

在确定了课题的基本滕路之屠,现在需要对深磁的基本方案避行一个E℃较详

细的说明。

SIMULINK中的Stateflow可戳有两种调用方式:作为商建库的一部分对它送

行调用或佟为单独的模块对他进行调用。拨它作为自建库的一部分被调用时,它

被褥作是隶属于某个库的缀侔,在避改这个库的同时,霞予梅建系统的Stateflow

框豳也将傲同样的更改。同时,它也可以作为一个单独的模块在SIMULINK中对

第四章sf2vlog和arl_conn设计的攀本思路和方案

它进行调鞠。在这样的情况下,它是单独保存为.mdl文裆。为了验证豹方便,在

设计过程中一直都使用后顾一种方式。

在MATLAB中,Stateflow可班雳两种方式字了开:第一释方式是童接双击打

开,第二种方式是用MATLAB中的文本编辑器打开。如果是采用双击方式打开,

酃我{fj看撼的将楚状态圈(鼙4。2);知采采用MATLAB躺文本编辑器封开,我

们滑到是…个文本文件编辑窗口(如图4-3)。

鹜垂2双击封开效果圈4-3文搴编饕器打开效栗

针对这两种打开方式所对应的不同效聚,可以肖两种思路来对Stateflow进行

将瀑获取:一耱是测惩MA瓤;AB巍安疆镶豹API荣获取Stateflow中鹣特淫;另

外一种是编写一个第三方文本分析软件,通过对.mdl文件进行文本方式的分析来

获敬瑟霉匏特性。

在经过仔细地考虑过厝,决定采取第一种方式,主要冉9原因将在下文中详细

叙述。

4.3.1编写第三方文零分枣斥软件进行特性获取的特点

如果采用这样的方式来进行特性参数的获取,肯定会遇到以下这三个最基本

懿阏蘧:

≯编程语言的选择;

》分褥获斧逡嚣戆效率;

≯分析软件猩各个软件平台的通用性;

下瑟对这三令最基本豹运题避行分摄。

电子科技大学硕士论文

如果要进行文本分析软件的编写,首先面临的问题就是采用何种编程语言。

每个程序开发人员都有其最擅长的语言,有些人最擅长c,有些人最擅长c十十,

有些人最擅长汇编;我们都希望使用自己最擅长的编程语言来进行这个文本分析

软件的开发,这就存在一个重复开发的问题。如果最初的开发人是用c++来编写

这个软件,而后续人员对c++恰好不怎么熟悉,那他/她肯定希望能够用她,他最

熟悉的语言进行开发,比如汇编,这样就造成了分析软件的重复开发问题。在编

程吾言的选择上,最实际的结果是采用c语言。因为大多数技术人员都对C语言

比较熟悉,后续人员要对当前的程序进行阅读、理解和修改都不会遇到太大的困

难。

编写第三方文本分析软件要遇到的第二个问题是效率。在不熟悉文本结构的

情况下,我们所能够采取的策略只能是进行逐行扫描。当Stateflow框图十分简单

时,分析软件的执行效率可能还能够保持一定的水平:一旦框图比较复杂,其.mdl

文档的行数可能有上万行,经过三、四重循环后的计算量大得惊人,需要有很好

的算法支持来减少计算量,算法的改进是很麻烦的,无疑会增加相当大的工作量。

即使知道了文本的具体结构,还涉及到转换效率的问题。设计中是否能够提供一

个te,N用MATLAB自带函数有更高的转换效率的转换工具同样是一个值得推敲

的问题。

编写第三方文本分析软件要解决的第三个问题就是平台的通用性。在

windows下能够正常使用的软件不见得能够在linux,BSD等其他环境中正常使用。

平台的通用性问题是必须考虑的,我们希望最后编写完成的软件是一个多平台的

软件,它不仅能够在windows下正常运行,也能够在linux下正常运行甚至在Mac

OS下都能够运行的软件。

4.3.2利用MATLAB自身提供的API进行特性获取的特点

利用MATLAB自身提供的API来进行特性获取,最大的问题在于需要对m

语言编程有一定的了解,它和普通的编程语言有一些不同的地方。通过对m语言

的学习,发现133语言的语法和C语言是比较接近的,很多地方都只是有细小的不

同甚至是一致的。比如,m语言中的赋值语句可以写为“a=b;”,与c中是一模

一样;m语言中用“fori=1:k”表示循环,对应c中的“for(i_1:i=<k:i++)”,

西】以说同样浅显易懂。只要对C语言有一定的了解,在理解m文档的时候问题也

不是很大。况且,采用统一的m语言编程,能够最大限度的避免重复开发问题,

第四章sf2vlog和£tn

corm设}十的熬本思路和方案

对后续开发是非常有利的。

利用MATLAB自身掇供的API进行特性获取的时候,不必进行多次的循环

来获取特宠的信怠,MATLAB自齑提供的API熊够让我们只用徽少的几条指令

就能够得到我们想要的信息。其获取信息的效率之高应该怒第三方分析软件所无

法这裂豹。丽潜,lVlATLAB提供了丰富的灏鼗供莪雷j使蹋,可以大大提高转换工

具的设计效率。

m文髂移MATLAB静密甥联系表现在:廷要越戆够运行MATLAB静较释平

台,m文件都能够很好的执行。当前,不论是PC,Unix操作系统还是Macintosh

操作系统酃对MATLAB掇筷了蠹好静支持,MATLAB在这鍪平台下都戆够良好

的运行,我们不需骚担心平台的通用性问题。

麸土繇蠢每分辑帮戮看爨,尽譬在编程添言上,m语言没有c添言酃释遥蔫,

但是语法上的近似,使得我们仍然能够比较容易理解和掌撰它。在效率和平台通

强缝上,方式二毒纛胃争议的霞势。嚣邃我销最终选择了方式二,帮肇J焉Ⅺ久疆AB

自身提供的API进行特性的获取和文本转换。

4.3.3验证工具的选择

螽蔼黥够验谨壤终生成静Verilog文糖是否达舞了羲矮豹要求程?当然要逶

过一些验fc雁工具来进行验{jE。验证工具的选择是一个比较煎要的问题,在选择验

谨王买蛉嚣雩候毒鼓下一些考虑:

≯验证工具的功能;

》验涯王具熬效率;

≯验证工具的易用性。

既然要薅最终生藏的Verilog文狴送行验涯,我们蓄先考虑熬燕验迁互英是否

具有以下最基本的功能:

》§%够支持Verilog

HDL文楼豹语法梭验;

≯能够进行Verilog

HDL文档的编译;

》§%够对壤漳蓐的文搂进行功§l镑囊;

≯能够对Verilog

HDL文档进行综合,生成门级逻辑。

由于在FPGA躲选型上基本上郝是选瘸的xilinx熬,掰矬酋选戆工其蠢定就

是ISE了。在仿真工具的选用上,我们选硝的是Model

Technoloty的ModelSim。

手中有一份Synopsys豹DesignCompiler螅培训资料,所以本来准餐选择Design

电子科技大学硕士论文

Compiler作为对比用的综合工具的,由于一时没有找至4,所以就没有选择对比用

的综合工具。由于我们对这些工具的使用都是用在验证课题的最终结果上,而不

是用他们进行实际的FPGA设计,所以只是使用了,他们的部分功能,而没有进行

深入的挖掘。因而,对于这些工具软件的应用还停留在比较肤浅的阶段,具体的

操作在这里就不作过多的介绍了。有兴趣的读者可以自行参阅相关书籍或说明文

铛。

上面的思路和方案都是针对转换工具进行分析的,对于顶层网表分析工具

的设计,我们采用了与之相同的设计思路和方案。主要的原因是:在这种的设计

思路和方案指导下成功地设计出了转换工具,证明了它的正确性;并且通过设计

转换工具,对MATLAB提供的设计平台也有了一定的认识,使后续的设计更加

顺利。

第五章sf2vlog和an_colin的具体实现

第五章sf2vlog和an—conn的具体实现

本章将描述Stateflow转换工具sf2vlog和顶层网表分析工具an—conn在设计

过程中的一些细节问题,比如:如何获取所需特性,如何进行转换,转换工具的

大体结构、分析工具的具体设计以及在实现过程中考虑的问题、如何解决等。前

3节详细论述了转换工具的设计,第四节对分析工具的设计进行了介绍。

5.1获取Stateflow的特性参数

在方案说明中已经说明:在课题设计中,我们是利用MATLAB自身提供的

API来获取特性参数的,所以必须对框图的具体结构有一个大致的了解,然后才

决定究竟选择哪些API来实现特性参数的获取。

5.1.1Stateflow框图中的对象

在Stateflow框图中,包含了以下对象:

》框图一Chart:作为顶层的Stateflow框图,在系统中是以chart对象出现

的,描述了框图的整体结构和特性;

≯状态一state:它用来描述在一个状态机运行在哪一种状态下;

》转移--Transition:它用来描述状态转移的条件和方向;

>默认转移--DefaultTransition:状态机要正常的运行,在任意时刻它必

然处于某一个状态中。默认转移就是能够让状态机在起始时刻进入缺省

状态的转移;

》连接节点--Connective

Junction:这种类型的节点作用是让多条目的地

或转移条件相同的转移路径归类到一条路径上;

>历史节点--History

Junction:这种类型的节点只在有层次结构的状态机

中才会用到。其作用是在退出父状态时保存当前状态机运行的下层子状

态。等到状态机再次进入父状态时,它不是进入下层的缺省状态,而是

进入上次保存的子状态。转换工具并不支持该对象;

≯函数--Graphical

Functions:描述复杂状态机可能用到的对象,转换工具

不支持该对象;

电子科技大学硕士论文

≯翳粪鑫--Boxes:蔟终薅只是更好瓣缰织Stateflow框匿,对予状态凝熬

运行没有什么影响。该对蒙不在我们的考虑范围内;

班上这些是强影亿戆对象,在Stateflow中还囊缀重要戆对象,它们怒菲零

形纯的,包括了以下几种:

>攀{孛--Event:事件是驱动狭态遴行转换的,盘予它是非强黟纯鹣,所

以在Stateflow椴图中是无法直接看到它的。需要说明的建,在转换工

具孛不提供封该对象静支持;

≯数据一D撒:数据是用来在Stateflow框图中存储和计算数值的,这是

转换工具分辑豹熬点对象;

》目标--Target:目标是一段程序,送段程序需要执行Stateflow状态杭或

楚包含该状态机煦SIMULINK模型。转换工具也不对Target对象的支

持;

对于每一个对象,它都有很多特性,下面的分析中我们不再对转换工具不

支持的对象进行避一步的特性探讨。至于为什么不支持,程后面的章节中会有说

明。

5。1.2转换工舆支持的特性

在这个小节中,将只对转换工具支持的对象所具有的特性进行说晴。现在

的转换工具所支持I》勺对象包括框图、状态、转移、默认转移、连接节点和数据。

下面就各个辩象的特住进行说明,值得注意的是,£蠢子特健太多,下面的

说明中只列出了转换工具需要分析的特性。

>框图对象:需要分析静特性有:ld、名称、位搡佟使能(EnableBitOpts)

和组织类趔(Decomposition);

》状态对象;需要分析的特往有:麓、名豫、标注字符串(LableString)、

组织类型(Decomposition)和类趔(Type);

≯转移:需簧努桥的特性裔:琢、豁注字符率、源状态、嚣静状态;

>默认转移:转换工具只分析Id和目的状态,不分析标注警符串;

》漆接节悫:需要分褥静赘往是硪霹蘩类鐾;

≯数据:需臻分析的特性包括:Id、名称、I/O类型(Scope:包括input/

output/constant/local等)、数据类鬻(ira8,uiml6,int32,boolean等)、

初始值、范围等。

第五章sf2vlog和an_conn的具体实现

至于为什么要支持这些特性,也将在后面的章节中作详细的说明。

5.1.3不支持的对象和特·性说明

通过上文的分析,看到了在Stateflow框图中还存在多个不支持的对象和特

性。下面就这个问题作一个简要的说明。

对于不支持的对象和特性,我们将这些项目分成两大类:

第一类是:对象或特性会造成冲突,在以后版本的转换工具中也不对这些

对象或特性提供支持,它包括了以下的对象和特性:

≯历史节点:该对象的所有特性;

》默认转移:对于无默认转移的chart或super.state;

>转移:单节点上的自循环转移和只在节点间构成环路的转移;

>数据:对于浮点数不支持;

第二类是:对象或特性不会造成冲突并且是有用的对象或特性,但是现有

版本的转换工具并不支持,它包括以下对象和特性:

》状态:有层次结构的状态、事件驱动操作、退出操作;

≯转移:事件驱动转移、转移操作;

》默认转移:在单个chart或super.state中存在多个默认转移;

>数据:临时数据和定点数。

之所以这样分类是因为课题设计时间有限,对于属于第二类的不支持的对

象和特性还没有来得及深入挖掘。至于如何处理也还没有一个清晰的方案,所以

在这一版本的转换工具中没有提供支持。

5.1.4Stateflow特·性参数的获取

在方案介绍一节中,已经说明设计过程中采用的特性参数获取方式是利用

MATLAB自身提供的API来获取所需的特性,本节中重点说明什么是API,怎样

利用API来获取特性参数。

5.1.4.1Stateflow中API的概念

StateflowAPI是与Stateflow框图编辑器相关联的~个文本编程接口,它可

以在MATLAB命令行窗口下直接对Stateflow框图进行创建和修改。通过在

MATLAB的脚本中按照一定的顺序放置不同的API命令,我们就可以通过一条

简单的命令来执行一系列Stateflow框图的编辑工作。

电子科技大学硕士论文

比如:我们可以在脚本MakeMyModel中输入以下命令:

functionmakeMyModel

sfnew;

rt=sfroot;

m=rt.find('-isa',’Stateflow.Machine。);

chart=111.find(’isa'.’Stateflow.Chart');

sA=StateflowState(chin);

sA.Name=’A’:

sA.Poskion=[4545300150】;

sAl=StateflowState(chin);

sAl.Name='A1’;

sAl.Position=1808090801;

在保存该脚本以后,每当我们在命令行窗口中输入“MakeMyModel”的是

后,也就定义了这个API的一系列对象,包括Root对象,Machine对象,Chart

对象和State对象,并且绘制了State对象的两个实例StateA和StateAl。其中State

A的名称是“A”,其左上角的坐标是[4545】,大小是长300X宽150;StateA1

的名称是“A1”,其左上角的坐标是[8080】,大小是长90x宽80。很明显,State

A1处于StateA中,表示Al是A的子模式。而当我们对这个脚本进行更改后,

执行的结果又将与更改后的要求一致。执行的结果如图5-1所示:

图5-1执行脚本后的结果

第五章sf2vlog和an

COFi!q的具体实现

5.1.4.2自身提供的API的特点

在特性参数的获取阶段,最基本的两个问题是:如何获取特性和构建怎样

的结构来保存这些特性.为了知道如何去获取特性,必须首先了解StateflowAPI

的层次结构。图5.2是Stateflow

API的层次结构示意图:

图5-2Stateflow框图的层次结构

从上图中可以看到,Stateflow

APl分为了四个层次,最高级的层次是root

对象,其次是Machine对象,再次是chart对象,最底层的是State/Function/Box

对象、Data对象、Transition对象、Junction对象等。在这里我们并不考虑Function

和Box对象。在此需要说明的是Editor和Clipboard。Editor对象虽然不在层次结

电子科技大学硕士论文

橙中,但是它能够对Chart进行编辑;Clipboard是用采做复翻和秸始用的,它允

许我们将已有的框图复制粘贴到正在编辑的樵图中。

Stateflow框图蔑以图形方式表躐出来的,不可能直接用作转换工具的输入。

而希望的输入是参数澎式的,但是怎样的参数才能够作为转换工具的输入呢?

MATLAB提供了一个狠好的参数形式,这就是甸辆--handle。甸藕怒MATLAB

提供的参数,它包含了该旬柄所代表的对象的所有特憾,并且还可以利用API对

訇耩逡行操俸,在5。t.4。l中静镯子已经缀努懿说疆了运一熹。

当需要对Stateflow框图避行特髅获取时,首先要获取的API就是root对象。

我露哥戳逶过渡下熬方式来获敷一个StateflowAPI静root:

rt=sfroot;

臻在,镯}跨犍’就代表了StatcflowAPI中鹣root对象,寄了root对象,瓣霉

以得到machine对象和chart对象了。得到了chart对象后,我们还可以进一步得

到State对象,Data对象,Transition瓣象莓。

对于每一个对象,它都有对应的属性(Properties)和方法(Methods)。属

缝是攒该对象骞爨些特赣戳及特牲豹爨髂疆透;方法楚撵对该浮象遴抒戆攥豫。

通过特定的方法,可以更改该对象的巢个特性或者提取特性参数,通过赋值操作

(==)糁该特健参数传递给瑟溪戆参交曩。

5.1.4.3获敝特性参数的方法

在上一小节中已经提蓟,对于任何一个对象,爝特定的方法就熊够获漱菜

方丽的特性参数。具体来说,究竟需要采用何种方法对该对象进行怎样的操作才

缱够掰需酶特髓泥?对于任何~个对象都其有多方面的属往。在MATLAB中可

以采用多种方法对同一属性进行访问,也可以用某种方法也可以对多个对象进行

襟{擘。在这里瑟捌蹬掰有对象鹃全部满往帮方法是不可能的,下面仅仅举一个简

单的例子作概念性的说明。

髑翔:state对象掰其有的藩经中有一个耩往是“文挡(Document)”。镁

定st魁代表该state对象的旬柄,下面的例子中我们用了三种方法对它进行操作:

》弼采霈妥显示这个文档懿两铎,霞瑟螽令:disp(st.Doeu.ment);i犟可。这

里用到了方法"disp”。

≯麴巢霈要获数这个文档豹凑察,使黉翕令:st.get('Documenf);。这堂蕊

到了方法“get”。

》另势,还可滋设置这个文搂熬凌容:st。set(Document',+Hello’);将文耧豹

第五章sf2vlog和an

conn的具体实现

内容设置为“Hello”。这里用到了方法“set”。

另外对于方法“get”,并不是只能够对state对象进行操作,它同样可以对

其它对象进行操作。例如“ch”是代表chart对象的句柄,我们同样可以用方法“get”

来获取相应的特性:

》获取chart对象的Id:ch名ct(’Id’)。

》获取chart对象的组织类型(Decomposition):ch.get(’Decomposition)。

>获取state对象的类型(Type):st.get(’Type’)。

在特性获取上,MATLAB提供了两种方式:一种是dotNotation,一种是

functionNotation。在使用上,dotNotation比较简单,而function

Notmion需要对

函数的使用有一定的了解。比如我们要获取一个chart对象的名称(假定它的旬柄

是ch),并将获取的信息保存在变量“flame”里面,我们可以使用下面两种方法:

name=oh.Name;(dotNotation方式)或者name=ch.get(‘Name‘);或n&wle—

get(ch,-N锄e,;(functionNotation方式)

这三种表达式是等效的,都是将chart的名称送给参变量name。其中,后面

两种表达式是get函数的不同用法而已。

当需要从上层对象中找出下层对象时,主要使用的functionNotation方式;

当需要从对象中找出它的某个属性的时候,主要采用dotNotation方法。比如,

要从句柄为ch的chart对象中找出下层的State对象,我们采用的方法是:

St=ch.find(’-isa’,’Stateflow.State’);

这样,“st”就成为了State对象的旬柄。要获取对象的属性,比如Id,可

以用以下方式就可以了:

ID=St,Id;

5.2将Stateflow特性参数进行分类

在获取了特性参数以后,紧接着的问题是如何将这些特性参数存储起来,便

于以后在实现转换时使用。

针对不同的对象具有不同的特性,因此我们决定采用将各个对象进行分类

的办法来存储特性参数。在上一节中已经提到,转换工具要分析的对象是很多的,

比如框图对象、状态对象、转移对象、节点对象、数据对象等。总体上来说,需

要分析的每一个对象,在存储的时候都根据它所属的类别,存储到同一个分类中。

对于只有一个实例的对象,并不需要新构建结构去存储它的特性参数;对于有多

电子科技大学硕士论文

个实铡熬对象,剥爨要构造~令适巍弱结掬去存姥辑有实倒的特性参数。

构造结构的大致方法是结构名称用对象名称,结构中薷一个元索是实例,后

嚣的元素是惹要露到戆属蛙,该结构熬个数出该对象的实铡个数决定。由予在从

最开始我们就只考虑过分析单独的框图对蒙,所以模型中樵圈对象不需要弱外新

建缝梅去存德它的特性参数;对于状态对象、转移对象、逡接节点对象和数援对

象拽们都构建了特有的结构;对于默认转移对象,貔们将它归类到转移对象中,

也没窍单独为其创建结构。我们创建豹结构包括:trmlsitions、g_data、gevents、

states、iunctions。

5.3转换工熬的:嚣体实现

转换王其是遴蓬辩岛耩进行分析来获墩特程参数并逶行转换黪。蘸戳总体

上来说,转换工具分成了两个部分;特性获取部分和格式转换部分。

耨经获敬部分翡主要凌淹是。输入参数懿梭骏、蒋瞧参数酶获取、特经参

数的存储、支持的特性检查等。格式转换部分的主簧功能是:将MATLAB格式

静表达式转捩或符合Verilog

HDL谬法戆表这式,并霉天裂指定翡文摆孛。

5。3。lStateflow特性参数获取部分的设计

Stateflow特饿参数的获取部分主要实现以下功能:

》输入参数黥分析;密ParseArguments逶数实溪

≯对Stateflow框图所具有的特性进行检验;由SanityCheck函数实现

》Stateflow框图甸裰熬获取;

≯Stateflow特性参数的存储;

》耨建空鑫瓣VerilogHDL文稿;三管鹭在Initialize涵鼗中癸魏

》反馈信息的设计;通过函数Collectlnfo实现

下嚣,我霞分瓣对这戆葵旋熬实强捧一一豹赍缨。

5.3.1.1输入参数的分析

这个转换工具谯本质上蹩一个按照m文件的格式和语法来编写的函数,这

样,在使用对我们熊够像调用函数一样提方便地使罔它。转换工具的输入参数是

按照特定的顺序设计的,它氆含一个必需项稍多个可选项。矮体的参数设计箱下:

≯必需项:chart对蒙的旬柄,它必须是输入参数的第一项。

第五章sf2vlog芹玎an_corm的具体爽现

》可选矮:包撩竣出文传戆路径等。它键戆颞露霹以不骚定,馥是不韪是

输入参数的第一项。

在没套可逸项熬蟪撼下,按照缺省方式完成转换;在有可逡顼的憾况下,可

选项拥有更高的优先级。

输入参数的分析,主要是邋过ParseArguments()这个函数完成的。这个舔

数有三个返回德,分剐是curChart,Outdir和cmdError。其中curChart就是所濡

的chart对象的旬柄;Outdir是输出文仕的位置,默认状态下是输出到当裁文件夹

中;cmdError怒错误的输入参数的个数。如果输入参数存在错误,转换工具将给

如错误信息,并终止程序的运行。

5.3.1.3对Stateflow框图所鬃有的特·陛进行检验

对于这个懿分,我餐主要怒分辑我嚣l辑获敬豹chart每菰繇健表熬Stateflow

框图是谮具有转换工具所不支持的特性,如果存在这样的情况,转换工具将给出

疆误蕊惑,著终生程黟戆运行。.这些黪瞧趣援了:

》ParseParametcrs():函数返回的eurChart句柄并不代表~个Stateflow枢

嚣或纛筑表了多子一个Stateflow捱黧。

》该Stateflow糕图并没有将"EnableC,likebitoperations”选项选中,即

要捱黧中赉联豹操终簿与C谬富数锭操嚣援鹚,毽具蠢不羼躲含义。魄

如操作符“^Ⅳ,它可以代表C语言中的“异或”位运算,也司“以代表算

术运冀中豹“染方”运算。妇果没蠢犍“EnableC.1ike

bit

operations”

选项选中,MATLAB中将默认进行乘方操作。

>Stateflow框嚣中包含了历史节点。

我们在程序中使用了SanityCheck()这个函数来对Stateflow框图所具有的

特性进行捡验。这个函数没有邋回埴,但是它会对全局交量GNUMERRORS

进行操作,所以~量chart对象的句柄具肖上述三个特性的时候,在随后进行的判

断中掇终止程序的运行。

5.3,1.4Stateflow框图句柄的获取

繇莱chart对象貔镯糖不其鸯在5.3。1.3节申掰残爨豹特睦,就可戳对英它懿

旬柄进行获取了。在5+1节中已经介绍了获取Stateflow特性参数的方法,现在臻

避孬将馊参数懿获敬藏缀客曩了。在chart对象审爨包含豹状态(State)对象,露

以用下面的“fmd”方法获取:

电子科技大学硕士论文

SFStates

2curChart.find(’-isa’,’Stateflow.State’);

这样在变量SFStates中就存储了所有的状态(State)对象的实例,同时SFStates

就成为了状态(State)对象的句柄。为了处理的方便,我们需要将它的所有信息

存入我们所定义的结构states中。具体的存储方法将在下节中详细说明。

同时,我们还必须获取其他对象的句柄,使用的方法和获取状态对象句柄的

方法是类似的,都使用“find”方法来获取。具体方法如下:

≯获取转移(Transition)对象的旬柄:SFTransitions=curChart.fmd('-isa·,

’Stateflow.Transition')。

≯获取节点(Junction)对象的句柄:SFJuncfion=curChart.find(’isa',

’Stateflow.Junction')。

≯获取数据(Data)对象的旬柄:chartData=curChart.fred('-isa',

’Stateflow.Data')。

≯获取事件(Event)对象的句柄:chartEvents=eurChart.find(iisa'.

’Stateflow.Event’)。

有了这些旬柄,就可以对这些句柄进行操作,进而获取所需的特性参数了。

5.3.1.4Stateflow特性参数的存储

在获取了句柄阻后,需要做的事情就是将需要的特性参数存储起来,以便

在转换部分进行调用。

在前面的章节中已经介绍过对于特性参数是按照对象的不同来进行分类存

储,通过构造一系列的结构来实现。在这一小节中,将对如何构建合理的结构进

行详细的说明。

当特性分类的工作做完以后,下一个需要考虑的问题是应该怎样来构建结

构。在上节中已经说明结构的第一个元素是实例,所以考虑的重点是放在后面的

元素究竟应该怎样安排。关键的问题是:所需要的特性其实都已经包含在第一个

元素中,但是很多特性不能够直接使用,需要进行更深入的分析。一个典型的例

子就是状态(State)对象中的EntryAction。在框图中很容易知道Entry

Action的

内容是什么,但是要获取一个State对象的EntryAction,则不是直接能够获取的。

可以有两种间接的方法:

》通过sf(‘Ast',stateId,'entryAction’)来获得一个cell结构的EntryAction,

需要对该cell结构进行分析来获取我们能够识别的EntryAction表达式;

≯EntryAction实际上是包含在State对象的LabelStfing参数中的。

第五章s也vMg和an

conn的其体实现

LabelString的内容是字符串形式的,它包括了对该State对象的名称、

EntD,Action、During

Action、ExitAction和ONEventAction的揲述。

可以通过对这个字符串进行分析来获取EntryAction的袭达式。

在构造这个缡构的时候,我们考虑的是:如果所需的特性参数能够赢接获

取,刚一般不在元索中加入对该特往参数的插述;如果所浠的特谶参数不能够赢

按获取,则在元素中加入对该特性参数的描述。这样构造的目的主耍是为了以后

使用的方便。从这个观点i舞发,其体酶构建方式如下:

>对于结构transitions,它对应的怒转移(Transition)对象。首先要了解

在行么情况下这个转移会发生,瞧就是鞭动,是雾件驱动还是条{牛驱动。

其次,必须要考虑的问磁是转移的方向,即元素中要包含源状态和目的

捩态。彩者,还赫矮了释转移过程孛需赘魏荐睇蹙搡律。丽露,这些蒋

性参数并不能够盥接从实例中获得,需要进行进一步的分析,所以最后

枣鼋建的缭籀惫含濒下一骛元素:’SFObj’、‘SContainerIdx'、’DContainerIdx’、

‘Event’、‘Condition’、’CondActiom’和”FranActions’。

>对予结稳gdata,它麓斑瓣是数攒(Dam)对象。禳据方镬使爰豹嚣爨,

构造的gdata结构如下:’SFObj’、’CName’、’currentName’、’varName’、

'typelnfo’、strucK'type’,0,’isStatic4,0,’NtWid氇',0,’staficVal’,国。

≯结构gevents只甑含了实例,由于役有使用,后面的属性并没有进行定

义。结穆g

events包含黪元素鸯;’SFObj‘。

≯对于结构states,我们首先需要考虑的是它将用于并行状态机,所以有

一令屡次缝捣,谈层是并嚣状态,底层爨≈}劳行捩态。嚣予每一个颈爱

状态来说,我们需要知道它下面究竟有多少子状态,同时对于每~个底

瓣状态裳说,我们震要它瓣上层状态是嚣么。其次,我嬲霈要失垂遴遴九

这个状态后需要执行哪些操作。褥者,我们还需要知道状森将怎样转移,

瞧就是说它和哪魑Transition实铡有关。最爱确定熬缝橡如下联示:

’SFObj’、+Parentld’、’ParentName’、’vName’、’MName’、’EntryAction'、

’DuringAction'、‘ExitAction’、4WhoseSource‘、秘’BottomStates’。如何对

'BottomStates’元索进行处理将在后面的5.3,3节中介绍。其中,“vName”

秘“MName”分别对应-2

Verilog和MATLAB中构造的状态名称。因

为在MATLAB中表示下层状态时,使用“.”来分开不同屡次的状态名,

即,如果上层状淼的名称时A,它的下鼷状态的名称时Al,那么表示

进入A1状态时,使用的方式是A.A1。但是,这样的表现方式在Verilog

电子科技大学硕士论文

中魑不允许的,我们在处理时,将“.”转换戚了连字符“一”,即奠奠k

》对于结构iunctions,由于只露连接节点才被我们的转抉工具所支持,两

连按节赢静作用只怒连接,本身不龟含任何操作,浙阻只需漤在结构中

表现出节点(Junction)对象与转移(Transition)对象的联系就可以了。

因魏我们构建的结榆包含静元素只青:

’SFObj’和’WhoseSource’。

构造好了结构,下面的工作就是获取所需的特性参数,并将其存储至n对艨的

结枣鼋中去。在特往参数的获取上,蓠文牵已经提饔,露些可疆蠹接获淑,有臻需

要进一步的分析。对于髓够直接获取的特性参数,用5.1.4.3节中介绍的方法进行

获取。对于不戆壹菝获取静帮分需要便蘑闯按懿方法。下面戳获取狄态豹Entry

Action和获取转移的的TransitionCondition为例对间接方法进行说明。基本的思

路是遴过对State实壤鞠Transition实弼二者翡LabelString进行字符率分辑来获得

相应的Entry

Action和TransifionCondition。

State实簌麓LabelString憨蒋分惑≯两令部分,一部努是袄态名称,另一帮分

是各种Actions。二者是靠第一个回车符或者魑第一个“/”符合分开的。通过对

这薅个特爨掭恚避嚣粪筏定谯,霹骧获褥状态浆名豫;黪掰舂熬Actions。这些黪有

的Actions,则是靠其前面的限制域来定义它的Entry

Action、During

Action等,

豪剿域戆俸薅滚嚣是该疆毒l域灏下一令隈裁蠛之潺。Stateflow孛褒定豫了Entry

Action以外,其他类型的Action必须注明其限制域,否则一律以EntryAction来

处理。掰鞋,可以透过慰限割域遴嚣分掇寒区分各秘类蒸豹Action。魄翔:某State

实例中,其LabelString的内容是:

sl/a=a+l:

b—o+(a牟鸯;

Du:d~;

b十+:

exit:c=0:

通过对特殊标志的分析,可以获得各种Actions,按照限制域的定义,总共有

三类Action,EntryAction、DuringAction和ExitAction。其中,EntryAction怒:

铲a+1;和b=c+(a<=d);,During

Action怒:d--;和b++;,而ExitAction熙:萨O;。

在转换工具中是出蘧数ParseStateLabel来获取EntryAction和其他Actions的功戆

的,它楚由Initialize函数调用一个子酝数。

对予Transition实例的TransitionCondition参数盼获取也慕用了类似鲍方法。

Transition中,它的LabelString分成了霸个部分;Transition

Event(驱动事件)、

11ransitionCondition(转移条件)、Transition

ConditionAction(条件操作)和Transition

Action(转移操作)。简单来说,一个LabelString的结构如下:

第五章sf2vlog和an—conn的具体实现

Expl[Exp2]{Exp3}/Exp4

其中,Expl代表了驱动事件;中括号中的Exp2代表的是转移条件;大括号

中的Exp3代表的是条件操作;“/”后面的部分Exp4代表转移操作。所以,当我

们要获取转移条件的时候,只需要获取中括号中的Exp2就可以了,MATLAB中

提供的regexp函数可以实现这个功能。

5_3.1.5新建空白的Verilog文档

利用MATLAB自带的功能函数,我们可以新建空白文档,并且在新建的过

程中,可以通过改变后缀名来更改新建文档的格式。我们新建的Verilog文档的名

称是Stateflow框图的名称,新建的文档所在的文件夹是由我们输入的参数决定的

(参看5.3.1.1节)。当我们完成新建Vefilog文档对,下一个必须要做的事情就是

保证这个新建的文档是可写的,而不是只读的。否则,就无法完成后面的转换工

作了,因为我们需要将转换后的Verilog描述和表达式写入该文档中。

5.3.1.6反馈信息的设置

反馈信息是在程序执行结束后,显示在MATLAB命令行窗口中的信息,它

应该能够对程序执行的情况给出一个概要性的说明。

如果程序没有完成最终的转换工作,那它一定是检测到了错误,因此在反馈

信息中应该对错误原因进行说明和统计;如果转换工具检测到一些值得注意的信

息,而它并没有严重到要终止程序的运行,那么它应该给出警告信息;为了大致

了解转换工具的效率,我们在反馈信息中还设置了一个程序运行时间的信息;另

外,反馈信息中还设置了一个生成文档的简要说明。

我们单独编写了两个辅助工具ERR和WARN来完成错误信息和警告信息的

显示。同时通过函数ErrorWamingTimeReport来完成对错误信息、警告信息和运

行时间的统计,并通过函数Colleetlnfo()来实现生成文档的简要说明。

5.3.1.7全局变量的设置

在设置全局变量的时候,有两类变量是必须将它设置为全局变量的:

>第一类是随着程序的运行,该变量可能会发生变化,并且当它发生变化

时,程序可能终止运行或使得最后的反馈信息也发生变化。这样的全局

变量主要是错误统计量GNUMERRORS、警告统计量

GNUM

WARNINGS和文档写入测试变量GDEBUG。

》第二类是某些变量在初始化以后就不能改变,并且会在以后的程序运行

电子科技大学硕士论文

过程中使用别的。这样的变薰主要怒我们获取的chart旬柄curChart,

新建文件煦标识号娃d,另外就是我们构造的结构states、Wansifions、

junctions等。

5.3.2Stateflow特性参数转羧部分戆设计

Stateflow特性参数的转换部分主要实现以下功能:

≯将MATLAB的表达式转换为符合Vefilog

HDL语法规范的袭达式。

》将转换后的凌达式写入新建的Vedlog文档中。

在将MATLAB表达式转换为符合Vedlog

HDL语法规范的表达式的过程中,

需要黧点考虑的是MATLAB中的表达式与v蹦log中的表达式有什么区别,成该

如何采完成转换。

税将转换厢的表达式写入新建的Vedlog文档阶段,主要考虑的问题是要以

怎样瓣格式将转换看的表这式写入该文档才锈够合乎Vedlog的语法规范,遴而

通过仿真和综食来验诫转换的最终效果。

5.3.2.1MATLAB畿达式与Venlog表达式的对比

MATLAB表达式秘Vefilog表这式在基零概念上怒一致戆,速墨我{}】所攒瓣

表达式是由操作数和操作符按照一定的规则组合而成的,实现~定功能的字符串。

缝们载主要区别在于:支持的掇馋符不全耀嗣:MATLAB支持瓣操传褥套些不被

Vefilog语法接鼹:]而Verilog支持的操作符在MATLAB中不被支持。对于MATLAB

中不支特的操俸籀,我们的转撩工其一谁不提供支持。

5。3.2,2表达式的转换

崧上面酌肇节中,我稍多次提蘩MATLAB静表达式帮Verilog酌寝这式不全

相同,所以我们需要对表达式嫩行转换。本节中将详细说明如何进行转换。

表达式翁转换是基予字餐爷进行静,繇激蠢必要蓠先说翳一下在转换工其中

常用的字符串操作。

》str2nurn(string)将字符审string转换藏数。

》num2sff(num):将数num转换成字符串。

>fmdstr(strl,su2):接懑s扛2中与strl耱嚣甏翡字符枣。

》regexp(strl,su2):慕本功能和findstr相似,但是提供更多findsw不支

持熬功戆。

第五章sf2vlog和an_corn的具体实现

≯[strlstr2】:将字符串strl和str2连接起来,组成更长的字符串。

(注:以上括号中的参数均是形参。)

下面,说明转换的具体方式。

Stateflow框图中的表达式有两种基本的类型:

≯赋值运算表达式:这种表达式用于对某数据进行赋值操作。

>条件表达式:这种表达式不对某数据进行赋值操作,只出现在转移条件

中。在并行状态机中可能会出现“in”函数的调用,需要特别对待。

我们在转换过程中考虑以下几种情况,并进行相应的转换:

》对于在MATLAB和Verilog中具有相同含义和相同符号的操作符,均保

留不变。这些操作符包括了:

●双目运算符:+,.,十,%

●逻辑运算符:&,l,n

●7条件运算符:>,<,>=,<-,==,&&,I『,b

●单目运算符:!,一,~

●赋值操作符:=

≯对于在MATLAB和Verilog中具有不同含义,符号也不同的操作符,只

要我们认为是有用的,在转换工具中就提供了对这些操作符的支持。它

们一律按照Verilog符合进行转换,这些操作符包括:

●赋值操作符:+=,

一=,b,&=,户,^=

·特殊运算符:++,~

≯还有两个特殊的操作符“一”和“◇”,在MATLAB都表示“不等于”

的含义,我们将这两个操作符同一转换到成Verilog中的“!=”操作符。

≯对于操作数,如果它出现在赋值运算表达式中,按照下面的规则进行转

换:

如果该操作数是被赋值的对象,那么:

转换后的操作数名=“VAR”+原操作数名;

如果该操作数是给其他操作数赋值的,则:

转换后的操作数名=“CURRENT”+原操作数名

比如原赋值表达式是:a-b+c;那么,转换后的表达式就是:

VARy.<=CURREN£6手CURRENT_c;

如果它出现在条件表达式中,则按照下面这个式子进行转换:

转换后的操作数名=“cU褂也NT”+原操作数名

比如原条件表达式为:a>=b,那么转换后的表达式就是:

电子科技大学硕士论文

CURREN£a>2CURREN£6

通过对转换的基本规则的简单介绍,读者应该大致了解了转换的具体过程。

下表中列出了部分转换前后的表达式的对比结果。

表5-1

转换前的表达式转换后的表达式

a=b+c:

VAR—a<2CURREN£6手CURRENT_c;

aH:

VAR一:a<=CURRE狲T_a+1;

a+=b:

VAR_a<2CURREN£4十CURREN£匆

a—=bCURRENT_a12

CURRENT_b

a<>b

CURRENT_a!=CURRENT_b

5.3.2.3将转换后的表达式写入指定文件中

要将转换后的表达式写入新建的Vefilog文档中,需要解决以下三个问题:

>该文档是否是可写的。

≯如何将表达式写入这个新建的Vefilog文档。

≯按照怎样的格式写入才能符合Verilog

HDL的语法规范。

对于第一个问题,在5.3.1.5节中已经提到过,需要在新建这个文档以后,立

刻将该文档的属性设置为可写,设计中使用了DEBUG()函数来测试这个文档

的可写性。

对于第二个问题,我们利用了MATLAB自带的功能函数fprintf()来实现写

入功能。在这里有必要对fpfintf()这个功能函数进行简单的介绍。fprintf()函

数在使用上的基本格式是:fprintf(fid,format…A..)。其中参数“fid”表示的是通过

fopen()函数所获取的文件标识号(identifier);参数“format”表示的是后面的

内容按照怎样的格式输出;后面的参数表示需要输出的内容,可以是矩阵A,矩

阵B等。广义上来说,字符串、数据、数组等都可以认为是矩阵。由于我们主要

处理的对象是字符串和数据,也可以用fprintf()函数对他们进行处理,通过这

个函数将它们写入新建的Vefilog文档中。具体实现的时候,我们编写了辅助函数

VerilogPrint(),在实现写入功能的同时,还对每行的偏移量进行了规定,使得最

后生成的Verilog文档具有更高的可读性。它在转换工具中具有很重要地位,并且

它的代码很短,所以给出VefilogPrint()函数实现的代码,方便以后的说明。

fi.mctionVerilogPrint(varargin)

第五章s£2vlog和f1.i"l

COrln的具体实现

global

rid;

len=length(vararg.h1);

iflen<1

return

end

if(1en:一1、

%%onlyifthereis1

format

string.no

level

fpnntf(fid,【Indentvarargin{1}】);

return

end

fprintf(fid,[Indentvarargin{1}],varargin{2:end});

functionstr=Indent

global

iLevel;

str=repmat(’\t’,[1iLevel]);

return

VerilogPrint()函数利用MATLAB自带的功能函数fprinff()来实现写入功

能,它还调用了一个函数Indent来实现行偏移量的控制。Indent函数的返回值是

一个空格组成的字符串,长度为iLevel(由后面介绍的IncrLevel和DeerLevel进

行控制)个"tab”的长度。

但是,应该以怎样的格式将转换后的表达式写入Verilog文档中才能够符合

VerilogHDL的语法规范,并且实现相应的功能昵?这主要是通过对VerilogHDL

文档进行分部分写入来实现的。我们将整个Verilog文档分成了以下几个部分并分

别用相应的函数来实现:

≯模块声明部分——用WriteName函数实现。

≯参数定义部分一用WriteParameter函数实现。

≯端口定义部分——用WritePort函数实现。

>初始化部分——用WriteInitial函数实现。

≯端口映射部分——用WriteMapping函数实现。

≯状态转换部分(+)——最重要的部分,用WriteArchitecture函数实现。

》数据更新部分——用WriteTransfer函数实现。

对于以上的每一个部分,在转换工具中是按照上述顺序来实现的,具体来说,

转换写入部分的主程序是如下结构:

VerilogPrint(‘//4++4+++++4+4+++MODULE

BEGIN

4+++4++4+++4+/An’);

VerilogPrint(。\11’);

VerilogPrint(”fimescalelns/lnsha’);

WriteName;

IncrLevel;

WriteParameter;

WfitePort;

WriteInitial;

电子葶i}技大学硕士论文

WriteArchitecture;

WriteTransfer;

DecrLevel;

№疽logPrint(’endmodulekn');

VerilogPrint('//++++4+48++ENDMODULE++。‘4++4+8488/An’);

其中lncrLevel和DecrLevel是对行偏移的控制参数iLevel进行加减操作的,

阻实现对行偏移的控制。下面,通过一个简擎的例子来其体说明以上这些函数怒

翔何对Stateflow框爨进行娃毽懿。其中鼹5.3是Stateflow攥篷,壅5.4是该框黧

包含的数据类型列表。

圈5-3Stateflow框图侧一

第敷章st2vlog和an_conn的嶷体实现

灏5.4浚Stateflow框图的数据类型

≯WriteName函数是用来生成Verilog文档中module的声明和输入输出端

目的声掰酾。具体来说,Stateflow框图酾名称就懿莉为module酌名称,

框图中的输入输出数据名称就映射为输入输出端阴的名称,另外还加上

了clock、reset/clr和ce信号酶声鞠。在本饲中,箕菰叠声明部分如下:

moduleChart(clock,clr,ce,in,out);

≯WriteParameter函数是弼慕生成Verilog文档中参数(parameter)的定义

语句的。对于Stateflow概图中定义的Constant数据,我们将其映射为

Verilog文糨中静parameter类鳌。需要说裙懿是,在parameter中定义的

参数的名称是按照下面的式子进行转换的:

转换看静操作鼗名=“CURRENT”+灏搽箨数窝,蓑本铡嚣言,参数

说明部分如下:

parameterCURRENT_const

8;

这样做的主要原因是为了和转换厝表达式相一致。

》WritePort瓣数是爱寒生成遴霉亍臻瓣定义语句静。除了怼在module声臻中

出现的端闭进行定义以外,由于表达式的转换中使用了前缀为VAR和前

缀必CURRENT豹变量(叛嚣筵髂秀VAR变量彝CURRENT交豢),藏

以还需要定义其他的register类型的变量和wire类型变量,以满足表达

式转换豹鬟求。在Stateflow中毒三耱姻黎器在这个罄分遗雹映射:input,

output和local。我们根据以下的原则来进行端口的定义:

●难予lgO类型为input憋数据,定义为羧入竣暖,不定义{l应戆VAR

45

电子科技大学硕士论文

变量,并且将CURRENT变量定义为wire类型;

·对于I/O蹙型为output的数据,迩义为输出端12,并将栩应盼VAR

炎萋采CURRENT交量都定义为register炎型;

·对于I/O类型为local的数据,我们将它麓作是电路内部的寄存器,

并不是输入端鞠或输出端日,所班廷将稻簸的VAR变爨和

CURRENT变量定义为register类犁就可以了。

另羚~个闷题楚经宽,萄5-4中显示了各个数据静爽瀣(Type)。辩予

没有最大最小值的数据,映射的位宽和数据炎型所对废的位宽相同;对

于有簸大僮鬣最夸蘧静数蠢,获麓戆彼宽嚣数据范誉对应豹簸,j、位宽相

同。在本例中,端口说明部分如下:

inputclock,elf,ce;

reg£l:蜘CURRENT_State;

reg[1:01NEXT

State;

reg【7:01CURRENT_data;

reg【7:OlVAR_幽ta;

i]nput【6.Olin;

reg【6:0】CURRENT_in;

output[15:otOut;

reg[15:OlCURRENT_out;

reg[15:0】VARout;

》WriteInitial爱数是矮米生成Verilog文搂孛鹣餐筵纯语句静,它实瑗对

register类型变量的初始化。

》WriteArchitecture函数是鼹来垒戏Verilog文搂枣搓述状态攫运行敬港旬

的,这是描述攘个状态机的关键部分。设计中考虑的主要问题是如何来

接述状态的转移。肯定鼹是,我们嚣要熙always语旬慕接述状态鲍转移。

这里存在三个问题,…个是关于当前状态的判定;另一个是在确定当前

状态黪情况下,确定转移的方起鄹执行的操挥;还有就是敏感爨戆确定。

在前面的论述中,其实已经介绍了解决第一个问题的办法,那就是对各

个状态进行编号,通过判定当簿状态骢编号采确定当前敖状态。对予

第二个河题我们的考虑是:在Stateflow中,~个状态鬻转移到另一个状

态,必然要满足~定的蘩件,根据条传的不用,它转移的曩的她也不…

样。这样一种鞯性,恰好可以用Verilog

HDL中的if--etseif--else语句来

描述。因此,最基本的框架就楚月if--elseif--else语句来描述状态的转

移。前颟的介缁中已经说明,我们的转换工其怒支持连接节点(Connefive

Junction)对象的。在具体处理时,我们将连接节点视为瞬时状态进行处

理,它不包含任何的操作,并艇只在状态转移过程中磁现。由于它出现

第五章sf2vlog和an_corm的具体实现

在状态转移的过稷中,所以在搐述状态机运行的语句中磁该包含对它的

搂述;同时由于它可以认为是一个状态(尽管是瓣时的),所以也可以

用if--elseif--else语句来描述,只是这组针对节点绉述的i卜elseif--else

语句应该嵌套在描述实际状态转移的if--elseif--else语句中。转移的方

向由转移条件来确定。要执行的揉作则是与在Stateflow中糯定的操作相

一致。Stateflow中规定:

·如采肖满足条件盼转移发生,那么执行操俸将包括:源状态中豹Exit

Action和目的状态的Entt3,Action。如果有的话还包括Trans城on

ConditionAction、TransitionAction。(转换工其并没有提供对Exit

Action的支持)

·热票没有满避条辞懿转移发垒,燹菰行漂获卷串酶DuringAction。

对于第三个问题,设计中建将所有的前缀为“CURRENT_”的变煅(包

捂register变量帮袄态交爨)维兔always语訇游敏感量。Stateflow框蓬

中舰定了状态的During

Action,这是在状态不发生变化时执行的操作。

黧祭在During

Action孛惫含了对菸数撵豹攥终,粼需要将该数据转换后

所对应的register变量加入到敏感艇中;如果没有包含对菜数据的操作,

我键将它转换螽群对应熬register变耋趣入翻敏感爨中逡不会对转换焉状

态机的运行产生影响,所以我们需露将所以这类register变量加入到敏感

茧孛。显然戆,Stateflow掰描述熬姨态臻是与当麓状态有关懿,转换爱

也需要将状态变量加入到always语句的敏感量中。

》WriteTransfer函数是露寒生成Verilog文搂中捶述状态转移熬语句戆,慝

时,它也完成对前缀为“CURRENT”的变量的赋值操作。它也魁~个

always语旬,它懿敏感量只毒c&。采熙煞复位方式是同步复位。

下面给出一个很简单的例子,让大家有一个形象的认识,到底转换后的

Verilog文楼结秘怒怎样黪。銎5.5是一个麓謦鲍Stateflow铡予。

电子科技大学硕士论文

图5-5一个简单的Stateflow例子

用我们的转换工具将这个简单的状态机转换成Verilog

HDL描述的结果如

下所示,限于篇幅,对每一部分,我们都只给出了部分结果。

、timescalelns/lns

modllle

testl(clock,clr,ce,st,temp,in);

input

clock,elr,ce;

reg

fl:01

CI瓜RENT

State;

regf1:01

NEXT

State;

output『7:01st;

regf7:01CURRENT

st;

reg『7:01

VAR

st;

output『7:01temp;

initial

begin

CURRENLst<2O;

//+}女}}}}}幸}{}}4

BEGINARCHITECTURE

4}母}十}{}牛率丰年*11

always(盈f

CURRENTStateorCITRRENTstor……1

beg矗a//‘beginalways

caserCI『IiRENTState)

O:11"virtualstate

11"Execute

Top

LevelDefaultTransitiontoinitialstate

begin//*default

transition

if(1)

begin//*default

transition

VARst<-124:

VAR

temp<=135;

NE}(T

State<=1://+{十4Off十}}4//:

end//*defaulttransition

end/t*default

transition

1:11"}女40ff+女}+//

第五章sf2vlog和0.12

corm的具体实现

if(CURRENTin>*31

kgin

VARst<一Ct球RENTst十CURRENT

temp;

NEXTState<=2://+i}4on}}十+/,:一

end

dse

begin

|净Excute

during

action

|净End

during

action

NEXT

State<=l;/,8}籼’o仃幸中枣半/,:

end

2:……

default:NE)(T

state《=O:

e11dcase

end//4end

always

//o章幸枣章¥¥幸母幸翱#牵唪EN强ARC疆fT鐾C1誓『REo¥事掌掌}籼#枣,#¥毒聿∥

//4+++4¥+。+。BEGINSTATE

ANDDATATRANSFER#}{∞}}}女}4/,

always◇(posedgeclock)

if(drl

begin

|f4卑粤卑毒每Begin

datatransfer雌雄{{4秘

Cl,弑RENTst<=O:

CURRENTtemp如O:

end

elseif(cel

begin

疗44¥}}4

Be菇n

data

transfer女¥女}4∥

C{稼RENTSt<=VARst:

CI腺RENljemp审VAR_temp;

end

,,母{‘4籼B}#¥丰ENDSTATEANDDArrA

TRANSFER宰女章串母牢¥卡芈‘,,

endmodule

相信通过对实际转换结暴的大致介绍,读者已经能够对转换工巢所实现的

功能有足够的认识了。

5.3.3对并行状态机的支持

一E街的分幸斤都是针对非并行状态机进行的,前文中已经掇到转换j:具支持

并行状杰机,下面就转换工具怒如何对并行状恣机提供支持的闯题进行说明。

潍:本节中,“并行状态榭l”指整个Stateflow框瞬:“各个并行孵状态枫”

指上层的各个并行状态。二者农本节中是有区别的。

电子科投大学硕士论文

5_3.3,1并行状态税和菲并{彳状态枫韵异同点

劳幸亍状态规和非劳褥状态枧的主爱区剐蠢戳下几个方嚣;

A.非并行状态机中,某时刻只能有一个活跃状态;并行状态机中,允许多

个状态在同一对刻是溪跃鲍。

B.非并行状态机中,任意两个状态之间总是存在一条路径将二者连接起来;

并行状态机中,任意的硒个状态之间两自&不存在这样的路径。

c.非并行状态机中,下一个状态只会受副当前嗽一的活跃状态的影响;并

行状态机中,下一状态可能会受到当盼多个活跃状态的影响。

D.在转换工其支持的范围内,非并行状态杌是单层结构,而并行状态机是

双层结构。

獠了这些随鄹欧盼,并行状态税帮非并行状态税蒸本一致。这使得我们可以

在处理非并行状态机的基础上,来完成对并彳亍状态机的处理。对于我们需要分橱

的祷拣来说,主要酶醒弼在于e积D。下面锌j}|这两点谎确转羧工其怒如何处理

的。

5。3.3,2荠行状态机的层次络构

程莠嚣状态撬孛,凝个Stateflow掇图熬结梅是努梵了上下舞层。上善是各个

并行的状态机,处于下层的是每个并行的状态机所包含的非并行状态。从建模的

是度来器,可默认为整个薯行状态规控燃一个宠整熬系统,各个著嚣翁状态承控

制组成该系统的各个模块,下牒的非并行状态就是各个模块的当前模式。一个简

单的并行状态枧如下熙5-6所示:

50

第五章sf2vlog和an_coma的具体实现

蚓5-6并行状态机

在这个并行状态机中包含了两个并行的状态机s1和s2,下层状态的名称均

为a和b。尽管下层的名称是相同的,但是他们的Id和上层状态是不一样的,所

以不会造成混淆。在处理的时候,我们使用了函数ParseHierarchy。具体的做法是

通过“findShallow”方法先找出处于上层的状态,如果是并行状态机,再通过

“findShallow”方法找出下层的状态。建立上下层之间的关系的时候,使用了函

数ParseBottomHierarchy。上下层之间的关系存储在结构states的最后一个元素

“BottomStates”中。需要说明的是,函数ParseBottomHierarchy是一个递归函数,

可以对多层结构的状态机建立上下层关系,为处理多层次结构的状态机做了个准

备。建立上下层关系的方法很简单,以图5-6所示的状态机为例,上层状态s1包

含了两个子状态a和b。则在s1对应的states结构中,把两个子状态的编号加入

到元素“BottomStates”中;在a和b对应的states结构中,把元素“ParentId”设

置为状态sl的Id。这样就将上下层状态的关系建立起来了。

5.3.3.3各个状态机子状态的判定和转换方式

在并行状态机中,下一状态可能会受到当前多个活跃状态的影响,在Stateflow

框图中表现为可能用in函数来判定各个并行状态机的予状态,并执行相应的操

作。比如:并行状态机中有三个并行的状态机A、B、c,各自有予状态Al和A2、

B1和B2、C1和C2,我们可以用in(A.A1)和in(B.B2)来判定状态机A是否处于

子状态Al,状态机B是否处于子状态B2。在Verilog中并没有这样的系统函数可

以调用,同时也无法直接解析这个iIl函数。不过我们知道i11函数返回的是一个

电子科技大学硕士论文

布尔值,这就使得我们并不需要解析这个函数,而直接从功能方面来分析它就可

以解决这个问题了。当状态机A处于子状态Al时,in(A.A1)的返回值是“1”;

当状态机A不处于子状态A1时,in(A.A1)的返回值是“0”。因而从功能方面

来说,in函数的功能相当于:(stateA==A1)。如果对状态A1的编号是5,状态

机A的编号是1的话,就可以将in(A.A1)转换为(CI爪RENTStatel==5)。

它同样可以对状态机A是否处于子状态A1进行判断,并且这是一种符合Verilog

HDL规范的一种描述方式。不过,转换工具暂时还只能支持在转移条件中使用in

函数,没有在Action中加入对in函数的支持。

5.4顶层网表分析工具的设计

对于顶层的概念需要先说明一下,这里所谓的顶层不是指我们设计的模块本

身,而是指该模块内部的首层。

当用SIMULINK设计一个模块的时候,它往往是由许多子模块组成的。对于

比较复杂的系统,由于子模块之间的连接关系繁杂,光是用肉眼观察是很难发现

连接是否完全正确,需要一个分析工具来完成这件事情,这成了开发本工具的源

动力。该分析工具所要分析的对象是顶层的予模块及其连接。对于这个分析工具

的设计,总体上是沿用了转换工具设计的基本思路,只是在具体的功能函数的使

用E有所区别。

5.4.1分析工具设计的具体方案

对于分析工具设计的基本方案,我们也是选择了在MATLAB平台下,利用

MATLAB自身提供的API和功能函数对SIMULINK模型进行分析。在确定设计

方案的过程中,主要面临以下几个问题:

》SIMULINK中构建模型需要调用库模型,我们如何来选择库文件。

≯SIMULINK中构建的模型是无法定义端口位宽的,我们需要采取何种方

式来处理位宽问题。

》最后生成的Verilog文档应该使用怎样的描述方式。

对于库文件的选择上,我们是这样考虑的:MATLAB自身虽然提供了丰富

的库模型供我们在构建模型时使用,但是它不见得能够满足设计的所有需要,在

必要的时候,需要自建库模型来构建模型;同时,在构建一个模型的时候,不可

能用到太多的库模型,如果设计的分析工具连这些未使用的库模型也进行分析的

第五章sf2vlog和an

conn的具体实现

话,显然会降低分析工具的效率。所以,我们希望所有使用到的库模型都包含在

同一个库文件中,显然这样的库文件只有自建了。

在SIMULINK中是无法对构建的模型的端口位宽进行定义的,在不知道端

口位宽的情况下,是无法用VerilogHDL来对模型进行描述的。所以,必需要有

其他外部文件来对端1:3位宽进行定义,我们才能用VerilogHDL对模型进行描述。

也就是说,我们要通过分析另外一个文件来获取端口位宽信息。在设计中,我们

是有这样的一个特定的文件来提供端口位宽和类型信息的。关于这个文件的具体

结构,我们将在设计实现部分进行介绍。

在对生成的Verilog文档使用何种描述方式的问题上,我们选择的是结构描

述。之所以选择结构描述主要是由分析工具的功能决定的。顶层网表分析工具的

功能是只对顶层各个模块间的连接进行分析,并给出Verilog

HDL描述,而不对

各个模块迸行具体的描述,所以只需要用结构描述方式将各个顶层模块的连接表

述清楚就可以了。

解决了以上三个问题,对于分析工具的设计就可以进入实现阶段了。

5.4.2分析工具的具体实现

从方案分析可以看出,分析工具分析的对象不仅仅是构建的模型本身,还

应该包括库文件和提供端口信息的特定文件。

在方案分析中已经提到,在构建SIMULINK模型这前,需要自己创建库文

件。至于如何创建库文件,它不是分析工具设计的一部分,本文中对于这个问题

不予介绍。

至于提供端口信息的特定文件,本来它也不是分析工具设计的一部分,不

需要说明的。但是,后来我们发现这个文件的编辑是很繁杂、枯燥的,有大量的

重复工作,所以决定设计一个该文件的生成程序作为分析工具的辅助工具。使用

生成程序后,我们对该文件的编辑变得非常简单、快捷。所以在这里,首先简要

介绍一下该文件的格式和它的生成程序。

5.4.2.1特定的文件和它的生成程序

提供位宽信息的特定文件有两个主要特征:

》这个文件需要以文本方式打开。如果是用生成程序生成的文件,它本身

就是一个文本文件。

≯这个文件拥有特定的结构,用浅显易懂的方式给出了各个端口类型和位

电子科技大学硕士论文

宽的定义。

上文中已经说明,分析工具之所以需要分析这个文件的内容,是因为这个文

件中包含了端口位宽信息,而这正是在SIMULINK中无法定义的部分。最方便的

:疗式当然是以文本格式给出位宽和类型信息,这样我们可以用比较简单的文本分

析方式来获取的信息,而不必做任何的转换工作。为了简化分析的过程,我们要

求这个文件必须以文本方式打开。

该文件的结构是比较特殊的,它包含了模型的端口信息和各个库模块的端口

信息。其中,模型端口是指SIMULINK中所建立的模型的端口,不包含子模块的

端口;库模块端口是指自建的库文件中模块的端口,而不是SIMULINK中提供的

库中的模块端口。现在通过一个简单的例子来说明文件的结构。下面给出了对一

个特定模块的端口的描述:

22’p/a<----

InPortl=uint(1)

InPort2=uint(8)

InPort3=uint(8)

OutPortl=unit0)

OutPort2=unit06)

在该描述的第一行给出了模块名称和它所在文件的名称,在这个例子中,模

块名称是“a”,所在模型或库的名称是“P”。第二到六行描述了该模块的端口信

息包含三个输入端口和两个输出端口。位宽信息放在括号中,对于上述模块,它

的三个输入端口的位宽分别是lbit、8bit、8bit,两个输出端口的位宽分别是lbit

和16bit,他们的数据类型都是uint(UnsignedInteger)。对于每一个模块,我们

都是采用这样的方式对他们的端口进行描述。

对于该文件的生成程序,主要分成了两个部分。第一部分是通过对模型进行

分析,生成对该模型端口的描述;第二部分是通过对库文件的分析,生成对库模

块端口的描述。所有的模块描述形式都如前文介绍的描述形式相一致,只是端口

类型全部定义为uint,位宽全部定义为8bit。这样,我们只需要对生成文件进行

简单的修改就可以完成对所有端口类型和位宽的定义了。

5.4.2.2特性参数的获取

对顶层模型的分析采用的方法和转换工具对Stateflow框图的分析类似,首先

是获取模型的句柄,有了旬柄,就可以通过对句柄采取一定的操作来获取它的特

性参数了。在获取了特性参数以后,进行分类存储,然后将它写入新建的Verilog

文档中。在实际的设计中,我们主要采用“find_system”和“get_param”这两个

第溉章sf2vlog和ancorm的具体实现

MATLAB自带的功能函数来获取特性参数。下面对这两个函数避行简单的介绍。

“fmdsystem”函数的功能怒获取系统、模块、端口、连线釉注释的旬柄,

其使用方法如下:

find_system(sys,’el’,cvl,’c2‘,ev2,.);

其中,sys表示豹是霈要分析的系统域模块名称,cl、c2表示的是对我们要

查找的对象的约荣类型,evl、cv2表示相应的约柬条件,而整个袭达式返回的是

在我们分掰静系统藏模块sys中,满足约寐条辞鹩旬柄。魄如:

find_system(’黼af,’FindAll’,’on’,’Type’,’line’);

返西豹是在系统aaa中掰有逡线静訇稿。

“get

灵分绥努辑工吴串最常蠲瓣一耱:getAgaram(handle,'parameter');

其中,“handle”代表需要分析的系统、模块或端口的旬柄,

“parameter”

表示其箨嚣要获取豹震毪,魄螽“Name”,"BlockType”等。

通过这两个功能函数,可以获取所需的绝大多数信息,但是,这不是全部。

上文孛已经提要分爨王吴鬻要分攒豹对象还包括了一个援供臻舞类型窝垃宽薅意

的的文件,幸而MATLAB提供了“f§etl”功能函数对文本进行分析,这大大方

爱了我嚣瓣蘧墨类篷蠹位宠售患熬获壤。

5.4.2.3特性参数的存储

在特骸参数酌存储上,我们沿用了转换工其的设计总路,先分类后存储。在

设计之初,我们希遵将所有的对象分成了模块、恣线和端阴。但是,后来发现对

予痒文件中的鞴口,MATLAB在处理时瞧是按照模块来处理的,只是锻稍的

ModuleType不同。所以最厢我们只将对象分成了两类连线和模块。为了区分到底

是霹文粹中盼模块还是SIMULtNK中模黧文箨中静模块,我们建立了两个不同静

结构来处理这个问题。

具体采说,我稍总共薅立了g_block、gline帮g_module三个结构采存储籍

性参数。其中g_block存储的是库文件中的模块信息,g_line存储的是SIMULINK

模瀑中静迤线信惠,蠢g

module翔存储了SIMULINK模黧孛豹模块鹃蔫慧。在

具体构建这些结构的时候,我们所考虑的闽题是:如何将这些信息关联起来。

对于鬈block秘g

module之瓣瓣联系,MATLAB垂身提供缀静静瓣决办法。

当getparam函数的“handle”参数是SIMULINK模型中菜一个模块的旬柄,并

豆“parameter”参数设置麓“ReferenceBlock”露,它返霾豹是该攥浚对应瓣淳模

电子科技大学硕士论文

块在霹文件中的名称,丽库文件中的模块名称是准一的。这样就可以用库模块名

将gblock和gmodule联系越来。

魄较麻颓静是祷gline和gmodule联系熬来。如巢在g_Iine结构中只存储了

连线的信息,我们需要多重循环来实现连线和端口的对应,这照然降低了程序的

挠行效率。嚣貌,在实际设计中,是按照源模块、源端弱、目的模块和目的端13

的方式来对结构g_line进行定义的。这样的定义方式禚初始化的时候要麻烦一烘,

但是对于疆螽浆使蘑主却提赢了程痔静荔k行效率。

5.4.2,4分析工具的结构和锯部分功能

有了转换工具的设计经验,就可以按照设计转换工具的基本结构采设计分析

工具。分柝工具的设计圊样分成了秀大部分:特,睦参数获取与毙较辩分积尘残

Verilog

HDL描述部分。

特性参数的获取与比较部分的主要功能蔻:完成傣惠的获驭、存诺霹比较。

这其中包含了四个主受的函数#ParseArguments()、Initialize()、ComparePoft

和ParseUsedPort。其中ParseArguments()函数的作用是检查输入参数是否正辘,

Initialize()函数的作用是完成特性参数的获淑,并将它们存入上节中提到的新

建结构当中。这两个西数基本。t是效仿转换工嶷设计的,由于裁文已经蠢质论述,

这摹不褥作详细的说嘲。

comparePort函数的作用怒比较逢线的源端口和目的端口的位宽和类型是覆

一致。如果位宽不~致,将给嬲错误信息,毽楚不会马上终止程序的执行:翔果

类型不一致将给出警告信息。在所有涟线的源端口和目的端口都比较究以后,如

莱有锩才终止弦序的虢行。

Pm苫eUsedPort函数的作用楚对设计的模块中没有使用的端日进行统计。如果

该禳块瞎身酌端日授有使孀,煲l给密错误信惠#如果是内部模数的端矗没有使用,

则给出警告信息。在统计完所有端口后,如果有错误产生将终止程序的运行。

对予生成VerilogHDL籀逐帮分,翁文中穗经提到需要的描述方式是结构描

述。这擐主要涉及到的问题是:模块调用时端阳对应方式是采俺名称关联方式还

是粟瑶位置关鞭方式。名穗关联方式下,端日连接表雨最式翘指麓了与每个外部

信号端子相连的端口名,可以很方便的森看内部连接情况;在佼置关联方式下,

各令蔷孽漆予必须按照次序鑫璇在藕匿连接表中,弗置不翻予焱看内部的连接精

况,所以在设计时最终选择了名称关联方式来对模块进行调用。

帮转换工爨一襻,程生藏VerilogHDL播述部分还怒分残了几个主菠静丞数。

第五章sf2vlog和an_conn的具体实现

包括了WriteName、WritePort袭WriteArchitecture。其中,WriteName生戏Vefilog

文档中对模块和端口的声明;州tePort生成该文档中对端口的定义。在这个部分

中,最纛要魏一个函数楚WriteArchitecture。它憩含了鼹个部分,一个慰生藏'对逡

线的定义,另一个是生成对系统的顶层网表的描述。

在MATLAB中,对手一源多寝的建线是没有进行合芳豹,比如说巢模块上

的输出端口pt和另一个模块上的端口p2,p3均相连。对于这样的连线我们将获

褥三个不同豹旬橱,分剐表示逑线pl--p2、pt—p3和pl一(p2,p3),但是实酥

上它们在物理上是同一条连线。因此,在生成辩连线的插述之前,我们需要做的

工{乍是将所有的连线进行合并,合并的准则就怒只要源端口相同,那么就对这样

的连线进行合并。这个工作本来可l奠在特性参数获取阶段完成的,但怒由于最初

的考虑不够周全,所以该部分的工作留在了这飘来完成。

在对连线滋行描述的时候,还涉及副对连线的命名。实际设计中对连线的命

名规则蹙:

》如果僚宽是lbit的连箴,将其命名为“wirex”其中“x”是wire静编号。

≯如果位宽不是Ibit的连线,将其命名为“\wireXwire

的编号,y表示第凡往。

有了这样的命名规则,在生成的Verilog文梢中对连线的描述就比较容易理解

了。

WriteArchiteeture函数的另~个功能是生成对顶层网表的描述。上文中已经说

翡我稍佼露耱怒名称关联方式对模块遽行调蘑。在接述方式上,我翻采箱连线俸

为桥梁对端口间的连接关系进行描述,而不是壹接描述浆端口与另一个端口相连。

举键来说,魄瑟模块A耱漆VIPA帮穰块B豹壤墨PB稽连,{邈销之瓣豹连线定

义为“\wiren”,在描述时我们采取的方式是将PB和PA端口郜描述为与连线

\wire珏穗连(霞宽受BW)。蘩:

LIB_A

A(.PA({\wiren[BW-1],\wiren[BW-2],..,\wire_n[0lI),..);

LIB~B彗(。PB({\wire_n婆w-1],\wiren墨W-2]。。,\wiren髓≥),...);

其中,UB

A和LIBB分别是模块A和模块B对应的库模块名。

这糖瓣接述方式,农去了对一嚣多撵倍瀑串多个基戆逡熬剿瑟,应该是提麓

了程序的执行效率。

最蔟,惑续一下努掰工具中熬睫射方式:

>设计模块的名称映射为网表文件的模块名;

≯浚计模块戆囊蹦名蛱射为嬲表文转豹蠛题名;

57

电子科技大学硕士论文

>库文件中的瘁模块映靖尊为网表文件中的调用模块;

≯顶层各个的模块映射为网表文件中调用的实例;

≯莉用迄线作为桥梁对端口滴的连接关系进行描述。

生成网表的描述悬设计分析工具的最初目标,在分析工具能够以正确方式对

连接关系进行描述后,分析工燕的设计也就告戳段落了。对予分析工懿在实醚系

统设计中的作用,我们将在下一章的综合实例中进行介绍,在这里就不举例详细

说碉了。

本章对两个EDA工具的设计工作做了一个比较详细的说明,在下一章中,

我们将餐窝这掰个工萁豹其髂痰矮实铡。

第六章实铡分析

第六章实例分析

一个系统的基本结构可以分残三个郝分:按剿逻辑、数据遁道和存储单元。

对于使用SIMULINK进行建模、仿真来说,已经有功能强大的工具软件对数据通

道积存{港单元进雩亍处理,对于接露《逻辑部分,现在我弹j有转换二l二具进行处理,对

于模块间的连接关系,可以使用分祈工其进行处理。这样,就可以将这些工其集

中起来瓣整个系统进行处理了。本章将通过两个实例的设计过程对课题中设计的

两个EDA工具的应用作一个说明。需骤说明的是由于SIMULINK仿真中有自己

的时钟,所以在仿真过程中没有加入时钟信号,只提供端口;另外,由于转换工

具在转换过程中将提供全局复彼帮全局使能信母,在彷囊过程中也只提供了端日,

没有实际的内部连接。

6,1复数乘法器的设计

对于复数乘法,其宪整的模块结构如图6-1所示

圈6-t复数豢法器缀携捱銎

59

电子科技大学硕士论文

整个模型的功能是计算Dinl和Din2两个复数的乘积,结果由Dout给出。

Controller模块采用并行状态机设计,它给出了memory模块和datapass模块的读

写控制信号,具体的框图将在后面给出(图6.2)。在memory模块的设计上采用

了“PingPang--Buffer”设计;而datapass模块则采用了两级流水结构,二者均是

由自建的S-Function作为功能模块,由于篇幅有限,这里不对S.Function的编写

进行介绍了。Isvalid信号是用来指示当前的输出是否有效的标志。另外在全局使

能信号ell有效后,需要一个周期完成从初始状态到处理状态的转移,所以整个系

统的延时将有四个周期。

图6-2复数乘法器的控制逻辑

在SIMULINK中仿真的结果如图6—3所示:

第六章实例分析

图6—3输入数据和输出结果

图6.3中,左图依次是Dinl的实部、虚部和Din2的实部、虚部;图6.3中右

图依次是Dout的实部、Dour的虚部和Isvalid信号。从仿真结果来看,系统设计

没有什么问题,在ell使能后,需要延时一个周期才对输入的数据进行处理。

现在可以用我们的转换工具和分析工具对该系统进行转换和仿真了。需要说

明的是,系统的datapass和memory部分是另外编写的,我们用转换工具对

Stateflow框图进行转换,可以得到下面的Verilog文档

case(CURRENT

0://*virtualstate

//*Execute

Top

Level

DefaultTransitionlt0illi廿alstate

ifr11

begin//*default

transitiOn

//+Excute

upperlayerentry

action

//*End

upperlayer

entry

action

Ⅵ慢clr

dp<_1:

VAR∞d口e0:

VARcount3<_5:瞰Isvalid☆O:

NEXTStatel·一_5://¨十+DP

inlt十++//;

end//*defaulttransition

4://++++DP-pr092。+’o’//

begin

//’Excute

upperlayerduring

action

//‘End

upper

layer

during

action

//+Excute

during

action

//+End

during

action

NEXTStatel

4.//+”’DP_pr092”++//;

end

5://++3‘+DP_init++‘*//

ifO)

begin

//+Excute

upperlayerduring

action

电子科技大学硕士论文

|产End

upperlayerduring

action

VARclr

dp‘=0:

VARen

ap‘2l:

NEXTStatel《:爱妒‘’’DP

progl+’+*14

end//*Dninit

冉用分析工具对连接关系进行分析,生成的连接关系描述文档,该文档的部

分遗容螺下:

darapa:ssdatapass(。dlr({\wire_10[7】,\wire_lO[翻,\wire10【5】,\wire10f4l,

协§c’10【3】,\wire

t0【2】,\wlre

10[1】,研妇一10秘臻.tl擅{\wire_917],\wire

9阐,twire_9[5】,№9【4】,\wire_9[3】,\wire912】,\wire_9[1】,\wlm9[0】)),.d2r({

协i哆_8【71,Xwire_8[6"1,\wire_8(5J,、毗吼8f4l,\wire_8[3】,\wires【2】,

\wire_S{1】,谛ire_8秘强。d2_i({\wire7弼,\wlre_7溺,≮wire7潮,、wire7瀚,

\wire713】,\wire_7翻,\wire7[1】,\wire_7(o】}),.cMwire6),.re(yam5),+ell《clodO,.result_r({

Dour_r[15】,Dourr[141,Doutr[13],Doutrtl2】,Domr[1l】,Dour_r[10】,

Dout_r[9],Dorar[8l,Douo移j,Dourr[6l,Doutr[5],Dout._r[4],

Dour_r[3】,Dout_r【2】,Doutffl】,Dout_r[0]}),.result

i({DouUi[15】,DouUi[14】,Dour,ill3】

Dout_i[12】,Dout.i[1l】,DouLi[101,Dour

i[9],OouLi[3】,Douri[71,

Domi嗣,Dour_i[5】,Dout_.i[4],Dour_i|3],DoⅡt_i诵,DouLi[1],Dout_i[01转l

memorymemory(.clr(wlre17),.oe(wSre18),.wr(wire

19),.aadr(wire_20),.data.r((

Dinl_r[7】,Dinlr16l,...

瓣薅熬霾个Verilog文狴鬟在都已经准备妥当,绩粪惹懿缭巢螽下:

圈6-4复数乘法器在ModelSim中的仿真结果

扶仿真结暴中可默器裂,转换嚣的Verilog稷序弼群宪成了一个复数渠法器憋

功能。间样是在en使能届延时一个周期,才对输入的数据进行处理,说明设计的

甄个工其实现了颈期的功能。从位真终果中可以覆至4输入和竣慰之闻的延迟是聂

第六章安例分析

个髑期,聪不是SIMULlNK中斡三个周期。之袋强会产生嚣令瘸期懿延逡,黎因

是ModelSim中的仿真考虑了数据的建立时问,在memory模块的输入端产生…

个髑裳静翳延,又在datapass攘块豹簸入端选产生了一个周期媳霹延;丽在

SIMULINK中是没有考虑这两个时延的。

6.2FIR滤波器的设计

6.2.1FIR滤波器简介

FIR滤波器是数字系绞设计中嫒零援豹组终之一,在对耀接要求疆严疆豹系

统中FIR滤波器得到了广泛的使用[14】。与IIR滤波器相比,FIR滤波器的主要有

以“F特点:

》相位响应可以真正线性

≯系统绝对稳定,设计趣对签基

≯简效实现:比如可以使用DFT实现

一个避翔豹FIR滤波器模型可以用圈6.5掰示的结构来实现。滤波器豹竣出

可以表示为:y(H)=∑x(k)h(N-k)

图6-5FIR滤波器的框图

从框图可以看出,FIR滤波器的设计嶷际上主簧是各缀系数的设计,希望能

够在一定的除数N下,通_j遘改变各级系数设诗出满足设诅“溪求豹滤波器。

6.2,2FIR滤波器的SIMULINK模型

SIMULINK中可以很方便的说计一个FIR滤波器。本侧中的FIR滤波器采用

矩形塞设计的低邋数字滤波爨,滤波器鲍除数是16,输入驹痔列长度是20(通过

shift模块的wr端口进行控翩),』目~化的3dB带宽楚0.2。完整的S1MULINK模

型如图6.6掰示:

电子科技大学硕士论文

豳6-6FIR滤波器横黧

该模型中包旗?珏个基本静模块,ctrl模块、eoef模块、shift模块和multiand

模块。其中,ctrl模块的控制逻辑部分;eoef模块的作用烂产生各级系数;shift

模块是一个l进16出螅移饺毒存嚣;覆multiand模块赠是进行纯粹蛉算术运算。

其中,控制逶瓣部分的Stateflow框图懿图∽所示;

图6-7FIR滤波瓣的控制邂辑

通过计算,该FIR滤波器酌各缀系数为:

第六章实例分析

hO=h15=-0.0432:hl=ht4=一0。0403:h2=M3=-O。0182:h3=h12=0。0222:

h4=h11=0.0749;h5=h10=0.1296;h6=h9=0.1747;h7=h8=0.2002

在SIMULINK中熬仿真结浆如图6+8所暴:

圈6-8FIR滤波器在SIMULINK中的仿真结果

在馊用设计瓣工具之1l誊是鞭先用Verilog

HDL对coef模块、shift模块秽

multiand模块进行了描述,现在需要做的只是用分析工矮生成对连接关系的描述,

然后援转换工爨生或对ctrl模块Verilog

HDL描述藏可以了。

针对本例中的模型结构,用分析工其生成的连接关系描述如下:

ctrlctrl{.clk(c歉),。clr(c戡.en(en),clr_coefl:wire9),ctrshLa.(wire8),。wushi粼wire_1),

cool(wire

3),.oe

shi娥wire_2));

multiandmultiand(.c0({\wire10[15】,\wlre10[14l,\wire_10[13l,\wire10[12],

\wi∞_lO[1ll,\wire10[1嘲,\wire10【9】,\wire10[鄙,\wire_10Ⅳ】,\wireJO[oq,

\wire_lO[5】,\wire

1014l,\wlrefl013】,\wire1012】,\wire_lO[1],\wire10鞘臻。el({

\wire_11【15】,\wire11[14】,\wire11[13】,\wire_11【12】,\wire_ll(11】,\wlre11【lOl,

\wire_1119】,\wire_11【8】,\wire

11[71,\wire1116],\wire1115】,\wire_ll[4】,\wire_11[3】,啦ll麓,\wirell[1】,、wiret1[Ol}X,e2(,§wirel21151,\wire_12[14】,

\wire_12[13】,、wire12112】,\wire12[11l,\wire12[101,\wire12[9】,\wire12181,

\wire_12[7】,\wire_12[61,\wire_12[5】,\wire_12f4】,\wire_12[3】,\wire_12[2】,

\wire_12[t】,\wlre_12潮强.c3({\wire13[15】,\wire

13[141,\wire

13[13】,\wire

13[12],

、w/re_13[1m’,wire13[Io/,、wire13防,1.wire_13潜,≈wee_13171,。,wire_t3敞,

\wire_13[5】,\wire_13[4】,\wire

13[3】,\wire1312】,\wire_13[1】,\wire13[01)Xc4({

\wireJ411蝴,\wire14[14】,\wke14[13j,\诚re_14[12】,\wire_14[1I】,\wire14110】,

\wire_14溺,\wire_14潍,\wire14疆,\wire14[61,\wifct415],\wire_14潮,

\wire_14[3],\wire_14【2],\wire

14[1],\wire

14【o】n.cS({\wireflS[15】,\wke_15[14t,

\wke_15[13】,\wire_15[12】,\wlre15[111,\wire_15[10l,\wire_IS[9】,\wire15[8】,

\wire15潮,\wire15婀;……

电子科技大学硕士论文

铮对本铡中兹状态樵,转换蜃懿结构热下;(只包含了状态转换部分)

cage(CURRENTState)

0:舻virtu越啦泌

1/*Execute

Tc’P

LevelDefaultTransitiontoinitialstate

begin//*defaulttransition

ifnl

begin//*defaulttransition

VARelfcoef01:

VARclrshi盎<-l:

VAR

wr

sh量f}<=0:

VAll.oocoef《=O:

VARsh摭《=0:

VAR

eat<骷20;

NEXTState(-k}|{{·{init々{{4||:

end//*default仃ansition

end//*defaulttransition

l:1/*·●+init+}}+//

iffl)

begin

VAR娃rcoef稿o:

VARcbsllift锦O:

VARwrshift<H—l:

VARoe∞ef串1:

VARoeshin☆1:

NEXT

State<=2://*+++progI”4+//;

and

else

begin

//*Exeate

during

action

//*End

during

action

NEXTState<-l://++++init++++//;

end

2://4+‘+progl^女+*//

if(CURREN'I!ent一∞

弛gm

VARwrs}liftq0.

NEXLState<=3;//*”+end“”//;

end

else

begin

//‘Excute

during

action

VARcnt<=CURREN7ant*1:

//4End

during

action

NEXLState<-2;//…+progl++”址

end

3。//4{十+end●●●4//

begin

//‘E,xcute

during

action

第六章实例分析

ipEnd

during

action

NEXT_State(23;//*”。end++4+职

end

default:NEXT_State《*O:

endcase,t·t··

需要注意的是FPGA并不进行浮点运算,所以需要将MATLAB中的浮点数

转纯为定点数,转纯戆方式是将系数乘上65536,再取熬。最爨褥到的畚数如下:

hO=h15=+2831=F4F1H;hl=h14=·2641=F5AFH;h2=h13=~1193=FB57H:

h3-h12一1455锄5AFH:h4=h11=4909=132DH;h5吨lo=8493=8493宅12DH;

h6=h9=11449=-2CB9H:h7=h8=13120=3340H;

另终,虫予我们对输入序列豹量化单位是0.5,所以在使用ModelSim进行仿

真时的输入是乘上了系数2的,这样仿翼的输出结果大致是图6-8所示结果的13

万焙。躁6-9簸示了该FIR滤波器在ModelSim中的功能傍真缕果:

图6-9FIR滤波器的功能仿真结果

由于对比输入输出的数据不是很方便,下谣戳波形鬻的方式给出缩栗:

67

电子科技大学硕士论文

3h

/I、输入序列/|\爪爪一

删U

V~

60“00勰吣籼二一一\yV、y

-30,000

幽6-10滤波器仿箕结果的波形表示

从波形图可以看出,该波形和SIMULINK中的波形图基本一致。功能仿真达

到了预期的要求。我们的目标是让转换工具和分析工具生成能够综合的Verilog

HDL文档,所以还需要验证生成的Verilog

HDL文档的可综合性。在这一部分,

仅以FIR滤波器为例,说明生成的文档是可综合的。综合工具使用的是ISE内嵌

的XST。图6-1

1说明了分析工具生成的对连接关系的Vefilog描述是可综合的;

图6一12说明了转换工具生成的对状态机的Verilog描述是可综合的。

图6-11FIR滤波器的综合结果

第六章实僦分析

酗6—12

FIR滤波器控制逻辑的综合结果

综合嚣魏终皋滋秘溺本潆题孛设诗翡嚣令王暴瑟垒残戆VerilogHDL文整怒

可综合的,达到了预期的目标。

电子科技大学硕士论文

7.1T作总结

第七章结束语

本文在分析当前FPGA设计过程的基础上,提出了一个比较有特色的系统解

决方案。它实现了从SIMULINK模型到RTL描述的自动转换,缩短了系统工程

师和IC工程师的沟通过程。

整个课题包括了两个部分:

》Stateflow框图到VerilogHDL描述的转换工具——_s£hlog的设计;

≯SIMULINK模型的顶层网表分析工具——anCOlin的设计。

转换工具能够提供对SIMULINK模型中并行状态机的支持,还支持多种常用

的表达式,对于中小型系统的控制逻辑来说已经足够。而项层网表分析工具则可

以对SIMULINK模型中第一层的子模块之间的连接进行分析并给出连接关系的

Vefilog

HDL描述。在完成论文之时,对课题设计过程中的主要工作进行一个简单

的小结:

≯对当前的FPGA设计方案进行了分析,并针对当前方案中的薄弱环节一

一控制逻辑到RTL描述提出了自己的思路:利用MATLAB自身提供的

API将Stateflow框图转换为Verilog

HDL描述。

≯设计并实现了一个从Stateflow框图到Verilog

HDL描述的转换1:具

sf2vlog,对提高IC设计的整体效率有一定的贡献。

》设计并实现了一个对SIMULINK模型中各个模块之间的网表进行分析的

工具all

conn。它能够分析判断各个模块之间的连接关系,并且用Verilog

HDL描述出来。

》设计了两个辅助程序generatetext和gethandle,让顶层网表分析工具一

一anconll在使用上更加方便。

7.2后续工作方向

当前的Stateflow框图转换工具在支持的特性上还可以进一步增加,以支持复

杂状态机的设计。对于顶层网表分析工具,它还只能处理顶层的连接关系,对于

多层次的模型来说,需要对其中的每一个模块进行单独的处理,效率不是很高。

第七章结束语

对于Stateflow框图的转换工具来说,我们的最终目标是支持所有不会造成冲突的

对象和特性,提供对事件对象的支持和对层次结构状态机的支持是该工具设计的

下一一个阶段性的目标。而对于分析工具来说,下一步的主要工作是提供对多层次

模型的支持。后续的工作中还可以参考诸如System

Generator等EDA工具的设计,

提供对具体模型的解析功能,以提供一个完整的系统解决方案。

电子科技大学硕士论文

致谢

在论文完成之际,我的硕士研究生学习阶段也即将结束,首先我要对我的导

师雷维礼教授致以诚挚的谢意。雷老师在研究生期间给了我很多关键性的指导,

他对学术的严谨求实、对问题细致入微的分析,时常给我启迪和帮助,使我受益

终身。

特别需要感谢胡剑浩教授在毕业设计期间给予的帮助和指导,使我能顺利完

成毕业设计。他对工作的勤奋敬业和兢兢业业的钻研精神都堪称楷模。

其次,我要感谢的是毛玉明教授、马立香老师,他们在学习和科研上给予我

很多关心和帮助。

同样,还要感谢108教研室的其他老师和同学,帮助我解决学习和工作中所

遇到的许多问题。

最后,也是最重要的,我要感谢我的家人,感谢你们对我一贯的支持,鼓励

我完成学、Ik。

参考文献

参考文献

[1】王君.萋予Flea的税频嚣缩IP棱渡计:[硕士学位论文],西安:群乾王潼丈学,2005

【2】孙富翱,李笑叠.基于多静EDA工爨熬FP6A竣计。毫予设诗痤攫,2002,Vol28,No。l:

70—73

弱】Andrew

J.Moore。StepsTowardsFirst~TimeSiliconSuccess.电子设诗斑髑,2004,

№。5:8—10

[43张恚淫.糖遇MATLAB6l5舨+j£索:_B塞航整般天大学出舨社,2003

[翻李鬏+Simulink动态建搂与傍真鼙礁。疆安:嚣安电予科技大学爨版享±,2004

[6]www.mathworks。com/acccss/helpdesk/help/toolbox/stateflow/stateflowahtml

[73王诚,薅小剐,镑谊澳.FPGA/CPLD设计工其——薹ILI联ISE馒用详解。北京:人民

批电出版社,2004

[83王诚,受继华,范簿珍等。Altera

FPGA/CPLD设计纂础篇.麓家:人民郎魄出版挂,

2005,第8章

[9]囊俊泉.VerilogHDL硬襻描迷语裔,陋安:鞲安电子秘技大学出版社,2002

[10]何艳,嵌入式软件开发方法研究及应用.自动化技术与应用.2004,V01.23,第3期

[113江霞,在MATLAB中实现FPGA硬件设计.《图辨屯子既器件》,2005,No.4:4—6

[12]www.synopsys.com/products/datapath/module

comp_ds.html

[13]www,systemc.org

[14]JohnG.Proakis,DimitrisG.Manolakis(,张晓林).数字信号处理:原理、弊法

与应用(第三版).北京:电子工业出版社,2004

电子科技大学硕士论文

个人篱掰

个人简历

吴鸿泉,男,1977年12月出生;

1996年~2000年,就读于电子科技大学通信工程专业,2000年7弼获德

学士学位;

2003年至今,就读于电子科技大学通信与信息工程学院,攻读通信与信

息系统硕士学位。

研究成莱

在读研期简,设计并实现了将SIMULlNK模型转换为确rilogHDL语言

搀逑款蘧个EDA工暴——s翌vlog移an_colin。

发表文章

t,《(Sf2verilog:将SIMULlNK状态擞转羧必Verilog))发表在《遵售与信

息技术增刊——2005中国西部青年通僚学术会议》论文集中(第一

作者)

74

本文发布于:2023-01-04 05:17:31,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/88826.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:asl是什么意思
下一篇:耶和华以勒
标签:rtw
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图