版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
集成电路EDA第2章
基于FPGA与Cortex-m0的MCU设计与仿真实现学习目标
熟练掌握SoC的系统与架构设计方法熟练运用VerilogHDL语言开发SoC了解XilinxVivado软件工具仿真SoC了解Keil软件了解使用高级语言编写硬件单元相应的驱动程序熟练掌握用FPGA实现SoC的开发流程熟练运用软硬件协同开发过程中需要的语言与EDA工具2.1用FPGA实现MCU的整体设计框架用FPGA实现MCU的整体设计框架所谓集成电路EDA,计算机软件是辅助设计的,因此学习EDA工具应该配合具体的集成电路设计进行。采用自顶向下的设计模式,分析MCU的整体架构和所需功能是第一步也是最为重要的一步。将需求分析明确后将根据需求和相关技术逐步细分子模块,实现好各个子模块后再进行整体组合与测试。用FPGA实现MCU的整体设计框架
MCU通常需要具有信号采集、信号处理、信号输出、与外界通讯等功能。如图2.1所示,MCU接收来自前端采集芯片的输入,通过GPIO、ADC、等方式接收来自传感器的信号,经CPU对数据进行处理和加工后,由GPIO、DAC等方式输出给相应的驱动模块。2.1.1MCU顶层设计图2.1MCU通用功能集成电路EDA
为了实现一款具有通用功能的MCU,且具有硬件算法等特殊功能,本设计的MCU具有以下模块:负责数据运算与控制的CPU,负责构建通讯链路的总线系统,负责存储代码的代码存储器(CodeRam),负责存储运行数据的数据存储器(DataRam),针对特定应用设计的定制外设和针对特定场景的硬件算法。其架构如图2.2所示。2.1.2集成电路EDA的重要性图2.2MCU架构用FPGA实现MCU的整体设计框架
2.1.3ARMCortex-M0处理器简介处理器核心包括寄存器组、算术逻辑单元(ALU)、数据总线和控制逻辑。流水线根据设计可以分为3种状态:取指、译码和执行。图2.3Cortex-M0架构中断请求唤醒中断控制器AHBLITE总线接口单元嵌套向量中断控制器电源管理接口内部总线系统处理器内核调试子系统存储器和外设Cortex-M0总线接口调试接口接调试器用FPGA实现MCU的整体设计框架
2.1.4MCU总线系统概述本设计采用的总线协议为高级微控制器总线架构(AMBA)。
AMBA是由ARM公司为了提出并用于设计高性能嵌入式微控制器的片上通信标准。AMBA规范中定义了三种不同的总线:高级高性能总线(AHB)、高级系统总线(ASB)、高级外设总线(APB)。用FPGA实现MCU的整体设计框架
2.1.4MCU总线系统概述AMBAAHB用于高性能、高时钟频率的系统模块。其中AHB充当高性能系统主干总线。AHB支持处理器、片上存储器和片外外部存储器接口与低功耗外围宏单元功能的高效连接。AMBAASB是一种替代系统总线,适用于高性能但是不需要AHB的功能。AMBAAPB针对最低功耗和降低接口复杂性进行了优化,以支持外围功能。用FPGA实现MCU的整体设计框架
2.1.4MCU总线系统概述AMBA规范独立于技术,确保高度可重复使用的外围设备和系统宏单元可以跨各种工艺迁移,并适用于全定制、标准单元和门阵列技术。图2.4AMBA典型系统结构CPUDMA控制器外设1AHB转APB高带宽片上存储器高带宽外部存储器接口外设2外设3外设42.2MCU硬件模块设计MCU硬件模块设计
2.2MCU硬件模块设计MCU硬件设计是开始MCU设计的第一步,主要采用VerilogHDL语言对MCU的总线、存储器和外设进行设计。同时基于XilinxVivado设计平台对HDL代码进行编译和仿真,验证各个模块功能的正确性。MCU硬件模块设计
2.2.1AHB总线系统设计AHB总线规范是AMBA总线规范的一种,主要应用于高性能系统总线。AHB总线支持多主机多从机设计而且同时提供高带宽操作。如图2.5所示。图2.5AHB总线典型系统MCU硬件模块设计
2.2.1AHB总线系统设计AHB总线信号:为了满足总线性能需求,总线上的信号线与几十个。AHB总线数据传输时序:AHB总线传输包括地址阶段和数据阶段。地址阶段一般情况只持续一个周期,而数据阶段则根据HREADY信号持续数个周期。根据有无等待情况,AHB总线传输可分为四种情况:有等待写入、有等待读出、无等待写入、无等待读出。MCU硬件模块设计
2.2.1AHB总线系统设计主机在地址周期发送地址和控制信号后,写信号拉高,同时下一个周期数据周期将数据发送至写数据线,如果此时从机还未准备好接收数据,则从机会将HREADY信号拉低,主机将保持输出,直到HREADY拉高,开始下一个总线周期。图2.6有等待写入时序图
CLKHRDATAADDRESSCONTROLHWDATAHREADYHWRITEcon0con1add0add1d0MCU硬件模块设计
2.2.1AHB总线系统设计无等待写入则是在地址阶段给出地址数据后,HWRITE置高后,下个数据周期将数据发送给HWDATA总线。此过程中HREADY始终保持高电平。则给出数据的同时也会给出下个总线周期的控制信号和地址信号。图2.7无等待写入时序图
CLKHRDATAADDRESSCONTROLHWDATAHREADYHWRITEcon0add0con1con2con3add1add2add3d0d1d2d3MCU硬件模块设计
2.2.1AHB总线系统设计主机发送地址和控制信号后,HWRITE置低电平,如果此时从机尚未准备好发送数据,则会拉低HREADY信号,总线进入等待状态,直到HREADY拉高,主机读取数据并发送下一个周期的地址控制信号。图2.8有等待读出时序图con0con1add0add1d0
CLKHRDATAADDRESSCONTROLHWDATAHREADYHWRITEMCU硬件模块设计
2.2.1AHB总线系统设计主机发送完地址控制信号后下个周期遍读取HRDATA总线的数据并发送下个周期的地址控制信号。对于连续读取信号这种信号传输具有二级的流水线,数据吞吐量大。图2.9无等待读出时序图
CLKHRDATAADDRESSCONTROLHWDATAHREADYHWRITEcon0add0con1con2con3add1add2add3d0d1d2d3MCU硬件模块设计
2.2.1AHB总线系统设计总线系统接收来自主机的地址数据信号,地址解码器对地址进行解码,并给地址对应的模块提供使能信号,使模块正常接收来自主机的信号,未使能的模块不工作,防止误触。从机模块在接收主机的信号后,读数据和响应信号发送给多路复用器,多路复用器则根据上个周期锁存的地址信号对输入数据进行选择,并发送给主机。图2.10总线设计框图ARMCortexM0内核主机地址解码器地址控制写数据选择信号多路复用器使能读数据响应信号从机模组MCU硬件模块设计
2.2.1AHB总线系统设计本设计中地址解码器通过提取地址总线高八位信号,对地址对应的从机信号输出使能。其设计思路采用ROM表实现。对深度为256位的ROM,从机编码对应的地址位预先填充使能信号,对其余则输入低电平,总线信号高八位的信号同时作为此ROM表的地址。图2.11地址解码器原理图MCU硬件模块设计
2.2.1AHB总线系统设计多路复用器接收不同从机的数据,根据地址周期的选择信号来选择对应的从机信号。但由于无等待读写的数据周期晚于地址周期一个节拍,而地址解码器的使能信号位于地址周期,所以必须对地址解码器信号进行延迟一个周期。图2.12多路复用器原理图RAM:随机存取存储器,又称“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM断电时将丢失其存储内容,故主要用于存储短时间使用的程序。MCU硬件模块设计
2.2.2存储器系统设计本设计存储器数据宽度为32位,均衡考虑了FPGA的RAM资源和MCU代码的极限大小后存储器的空间选取为4KB,可以满足绝大多数场景的应用。同时,针对小型轻量化应用,本设计采用纯汇编设计,仅需一个程序存储器即可使MCU正常工作,不需要额外添加数据存储器。总线的访问信号到达存储器时,先经过一级寄存器缓存,延迟一个周期,然后根据控制信号对指定地址的数据进行读写。如果是读信号,则直接将对应地址的数据发送至总线;如果是写信号,则根据HSIZE信号来决定以字节、半字和字的格式将总线写数据写入RAM。MCU硬件模块设计
2.2.2存储器系统设计图2.13存储器设计框图总线接口寄存器RAM写数据写数据地址读数据RAMIP控制地址控制写位数控制MCU硬件模块设计
2.2.2存储器系统设计存储器模块编译完成后的RTL原理图如图2.14所示。图2.14存储器RTL原理图MCU硬件模块设计
2.2.2存储器系统设计仿真20ns时系统启动,在20ns和40ns给出地址0和4的写入信号,然后在40ns和60ns的对应的数据周期给出写入数据0x12345678和0x87654321,紧接着系统在60ns和80ns后分别给出地址0和4的读取信号,可见在80ns和100ns时一开始写入的数据被储存器发送到了HRDATA总线上。图2.15按字连续读写功能仿真MCU硬件模块设计
2.2.2存储器系统设计改变仿真激励代码如代码示。通过改变HSIZE的值可以控制写入的格式,图2.16表示按字节读写的仿真图。系统HSIZE设置为0,系统按字节依次写入0xFFFFFFD4,0xFFFFC3FF,0xFFB2FFFF,0xA1FFFFFF。由于系统按依次按字节写入,于是在120ns读地址0时的数据为0xA1B2C3D4。图2.16按字节读写功能仿真MCU硬件模块设计
2.2.3GPIO设计系统主要分为AHB接口部分和输入输出控制部分。主机向控制寄存器写入使能信号与输入输出工作状态信号后,控制寄存器通过控制三态门实现数据寄存器对IO的输出,通过向数据寄存器写入数据,可实现IO输出指定的信号。同时配置成输入模式时,三态门断开,主机可从输入缓冲处读取IO电平。图2.17GPIO设计原理图总线接口控制寄存器AHB接口输入输出控制数据寄存器输入缓冲IO通用输入输出接口(GPIO)是基本的输入输出引脚,可以由程序控制输出低电平和高电平,在速度要求不高的场景下可实现一些常用开关电路的控制。MCU硬件模块设计
2.2.3GPIO设计名称偏移地址有效位数功能使能015-016个GPIO高电平使能读写控制031-1616个GPIO读写选择,高电平为写入写缓存415-016个GPIO写数据缓存读缓存815-016个GPIO读数据缓存GPIO寄存器地址映射与功能介绍MCU硬件模块设计
2.2.3GPIO设计
对GPIO模块RTL代码进行编译,系统编译而成的RTL级原理图如图2.18所示。图2.18GPIO模组RTL原理图MCU硬件模块设计
2.2.3GPIO设计首先验真GPIO输出功能,其仿真波形图如图2.19所示,先给控制寄存器发送信号0F0F00FF,低16为是使能信号,高16位是读写控制信号,于是GPIO0至GPIO3为写状态,且被使能,GPIO4至GPIO7为读状态,且被使能,GPIO8至GPIO11为写状态,但未被使能,GPIO12至GPIO15为读状态,未被使能。于是在给写入寄存器写入信号1234后,经过一段时间的延迟,GPIO0至GPIO3正常输出4,GPIO4至GPIO7、GPIO12至GPIO15为读状态,三态门未开启,输出高阻,GPIO4至GPIO7三态门开启,但由于GPIO未使能,于是输出均为0。图2.19GPIO输出仿真波形图MCU硬件模块设计
2.2.3GPIO设计
GPIO输入操作仿真如图2.20所示,控制信号写入0x000000FF,即所有IO均为输入模式,三态门关闭,但仅有GPIO0-GPIO7使能,其余GPIO均未使能。随机仿真环境设置GPIO信号为0xABCD,GPIO0-GPIO7检测到后发送给HRDATA总线,GPIO8-GPIO15未使能发送默认值0,于是HRDATA总线数据为0x000000CD。图2.20GPIO输入仿真波形图MCU硬件模块设计
2.2.4
UART设计
通用异步收发传输器(UART)是一种常用的串行异步传输接口,常用于两个系统间的数据通信。对MCU来说,UART常用于与上位机进行通讯,让开发者实时检测MCU工作状态,获得相关关键工作数据;或者对多MCU系统,MCU间常采用串口通信进行数据交互。如图2.21所示,串口发送数据共有10位左右,静默时电平为高电平,开始数据传输时首先发送一位低电平起始位,随机以低位在前发送一定位数的数据位,数据发送结束如果有奇偶校验则发送一位奇偶校验位,最后发送一位高电平表示发送结束。图2.21UART时序图MCU硬件模块设计
2.2.4
UART设计由于UART是异步传输,故传输波特率传输双方需预先设定。总线接口负责接收主机传来的控制信号与发送数据,同时向主机发送接收到的信号。图2.22UART收发器设计原理图总线接口控制数据总线接口UART收发器发送数据接收数据波特率生成器接收模块发送模块MCU硬件模块设计
2.2.4
UART设计UART收发器部分采用模块化设计。波特率发生器由系统时钟驱动计数器,通过使能信号控制计数器工作状态,并通过选择信号选择终值表里对应的计数终值,以发生不同波特率信号。图2.23波特率发生器原理图波特率选择信号计数终值表时钟源使能比较器计数器波特率信号复位MCU硬件模块设计
2.2.4
UART设计当需要发送的时候,发送数据首先寄存进发送数据缓存,波特率发生器开始工作,带动索引信号递增。输出信号则根据索引的值依次选择起始位、数据位、校验位和停止位。图2.24UART发送器原理图波特率使能索引选择器发送数据缓存发送信号奇偶校验发送数据MCU硬件模块设计
2.2.4
UART设计与UART发送器类似,采用波特率发生器带动索引的工作方式。接收器在每个波特率信号点采集接收信号线的电平,若使能后在检测到开始信号,索引根据波特率信号逐渐递增,选择器根据索引信号依次将检测到的电平存储进接收数据缓存的对应位置。图2.25UART接收器原理图波特率使能索引选择器接收数据缓存接收信号奇偶校验接收数据完成信号MCU硬件模块设计
2.2.4
UART设计对UART模块进行编译,完成的RTL原理图如图2.26所示。图2.26UART整体RTL原理图MCU硬件模块设计
2.2.4
UART设计对UART模块进行编译,完成的RTL原理图如图2.27所示。图2.27波特率发生器RTL原理图MCU硬件模块设计
2.2.4
UART设计对UART模块进行编译,完成的RTL原理图如图2.28所示。图2.28UART接收器RTL原理图MCU硬件模块设计
2.2.4
UART设计对UART模块进行编译,完成的RTL原理图如图2.29所示。图2.29UART发送器RTL原理图MCU硬件模块设计
2.2.4
UART设计先对各个子模块进行功能仿真,波特率发生器的仿真波形图如图2.30所示。仿真环境设置波特率为1Mbps。可见波特率发生器在工作后以固定频率发送脉冲信号激励串口发送器工作。其中脉冲的时间间隔测得为1000ns。图2.30波特率发生器仿真波形图MCU硬件模块设计
2.2.4
UART设计系统采用1Mbits波特率,设置发送数据为0x5A,即二进制01011010,采用偶校验校验值为0,在使能信号给出后,数据存入缓存,依次发送低电平起始位,自低到高发送8位数据位,之后发送一位低电平的校验位,最后发送一位结束位高电平结束传输。图2.31UART发送器仿真波形图MCU硬件模块设计
2.2.4
UART设计
为了验证UART接收器接收功能,仿真环境中需要添加一个发送器,模拟外界给串口发送数据的情况。将发送器的输出接至接收器上并单独控制发送器发送数据。图2.32UART接收仿真环境示意图读出接收数据接收器波特率发生器发送器写入发送数据MCU硬件模块设计
2.2.4
UART设计UART接收器在检测到起始位低电平后,逐步将信号写入缓冲中寄存器,然后在接收完校验信号后对信号进行校验,若校验通过,则将缓存数据写入输出寄存器,发送接收完成信号,同时清空缓存以准备下一次接收。图2.33UART接收器校验成功仿真波形图MCU硬件模块设计
2.2.4
UART设计在图2.34中,在仿真环境中强行使校验失败,5a数据校验值本应为0,人为改成1后,接收器校验失败,不发送完成信号,也不输出接收数据,将缓存清零后准备下一次接收。图2.34UART接收器校验失败仿真波形图MCU硬件模块设计
2.2.4
UART设计对UART模块整体进行仿真。仿真环境同样采用外部模拟一个发送器和单独的波特率发生器控制发送来模拟外界环境对UART发送数据的场景。图2.35UART模块整体仿真环境示意图仿真总线读取串口模块波特率发生器发送器仿真发送数据发送接收MCU硬件模块设计
2.2.4
UART设计图2.36UART模块发送初始状态首先总线向写数据寄存器0x04写入发送数据0xA5,然后向控制寄存器0x00写入使能信号和波特率选择信号。可见使能信号写入后,发送状态机开始工作,发送txready信号拉低,发送使能关闭防止重复发送,同时写寄存器中的发送数据被读取到发送模块的缓存中准备数据发送。MCU硬件模块设计
2.2.4
UART设计整体发送波形图如图2.37所示。
图2.37UART发送时序仿真图MCU硬件模块设计
2.2.4
UART设计系统使能波特率生成器和时钟后,在仿真环境模拟UART发送数据0xBC后,UART接收到数据,校验成功后发送给UART模块的接收寄存器,同时发送接收标志位,供总线读取。
图2.38UART接收时序仿真图MCU硬件模块设计
2.2.5定时器中断设计
在MCU的应用场景中,经常需要准确的时钟信号来驱动系统完成相应的命令。而采用软件延迟的计时方法对单核MCU来说,CPU大部分时间用在软件计数中,且受限于指令集的不同与CPU执行的情况,软件计时往往精度不高。而定时器中断将计时部分采用硬件完成,配置好定时器工作模式后,定时器完成计时后产生中断信号,CPU接收到中断信号后进入相应的中断处理函数完成相应动作。MCU硬件模块设计
2.2.5定时器中断设计定时器中断由总线接口和两个计数器组成。控制寄存器负责控制计数器的工作状态,计数终值为计数器2的计数上限值,计数器1用于对时钟信号分频,与计数器2组合可以提供更长的计数周期。当计数器达到终值时,生成中断信号,提供给CPU的中断输入信号。同时清零计数器,根据配置的工作状态决定是否继续计数。图2.39定时器中断模组原理图控制计数终值总线接口计数器1计数器2中断信号接口MCU硬件模块设计
2.2.5定时器中断设计系统完成编译生成的RTL原理图如图2.40所示:图2.40定时器模块RTL原理图MCU硬件模块设计
2.2.5定时器中断设计总线系统依次向定时器模块写入计数终值0xFF和控制信号0x03后,定时器开始计数。0x03本设计表示无分频并使能定时器。图2.41定时器中断开始工作仿真波形图MCU硬件模块设计
2.2.5定时器中断设计当定时器到达预设的计数终值0xFF时,定时器结果清零,同时对外发出中断信号,CPU检测到中断信号后会进入相应的中断服务函数,完成相应操作。图2.42定时器计数完成波形仿真图2.3基于FPGA平台的特殊外设设计系统分为总线接口、数码管驱动和外围电路三个部分,其中总线接口和数码管驱动部分属于片上系统。总线接口接收来自主机的信号,在1kHz的时钟的驱动下依次输入给数码管码表片上ROM,同时码表输出给数码管组,时钟同时驱动译码器选择正确的数码管。基于FPGA平台的特殊外设设计
2.3.1八位七段式数码管硬件驱动设计图2.43数码管驱动设计框图总线接口显示数据数码管码表ROM总线接口数码管驱动时钟生成器译码器0外围电路数码管组基于FPGA平台的特殊外设设计
2.3.1八位七段式数码管硬件驱动设计对数码管模块进行编译,生成的RTL原理图如图2.44所示。图2.44数码管模块RTL原理图基于FPGA平台的特殊外设设计
2.3.1八位七段式数码管硬件驱动设计时钟发生器生成1kHz的周期信号,位选信号Select在每个时钟周期改变并循环。数码管模块在接收到主机的显示数据12345678,根据当前Select信号向码表ROM输入显示数据中对应数码管的数据。图2.45八位七段式数码管仿真波形图基于FPGA平台的特殊外设设计
2.3.2PWM型DAC设计
DAC在工业控制中有广泛的应用,例如含有DAC的MCU在外接功放后可实现简易的语音提示功能。而传统低端MCU多采用外置DAC芯片的设计方式,其成本较高,且对PCB板的设计要求较高。而高端内置DAC的芯片其DAC往往以硬件形式固定在芯片内部,芯片成本比较高且不可复用。而在对时间和精度要求不高的应用场景下,PWM型DAC拥有外设简单,可复用等优势,可以极大降低设计成本,同时若应用场景更变,不再需要DAC时,FPGA可释放逻辑资源供其余模块使用。PWM波形具有固定的周期T0和根据输入信号可变的脉冲宽度T,其比值则成为PWM信号的占空比。对不同固定周期的PWM信号,若具有相同占空比,则其控制效果则基本相同。图2.46周期矩形脉冲信号基于FPGA平台的特殊外设设计
2.3.2PWM型DAC设计
基于FPGA平台的特殊外设设计
2.3.2PWM型DAC设计本设计DAC以8位DAC为例,原理图如图2.47所示。图2.47PWM型DAC原理图模拟信号低通滤波比较值计数器总线接口总线接口比较器PWM信号PWM信号生成器外围电路基于FPGA平台的特殊外设设计
2.3.2PWM型DAC设计PWM模块经过编译后生成的RTL原理图如图2.48所示。图2.48PWM模块RTL原理图基于FPGA平台的特殊外设设计
2.3.2PWM型DAC设计该系统仿真波形图如图2.49所示,设置K值为10000,应RC滤波器截止频率约为32kHz。将K值调整至10000后,即截止频率约为3kHz,仿真波形如图2.50所示。图2.49PWM型DAC输出仿真波形图图2.50低截止频率时PWM输出波形仿真图基于FPGA平台的特殊外设设计
2.3.2PWM型DAC设计基于FPGA平台的特殊外设设计
2.3.3一种基于FPGA系统的简易ADCADC往往承担模拟信号采集的工作。本设计采用将模拟信号编码为PWM信号后通过数字系统采集的方法,利用2个IO及一个运算放大器即可实现AD转换电路,而且很容易扩展成多通道。图2.51ADC工作原理图模拟信号比较器比较值总线接口总线接口PWM检测ADC内部数字系统外围电路控制三角波PWM信号发生器低通滤波基于FPGA平台的特殊外设设计
2.3.3一种基于FPGA系统的简易ADC对该ADC进行编译,生成RTL原理图如图2.52和图2.53所示。图2.52ADC的RTL原理图1图2.53ADC的RTL原理图2基于FPGA平台的特殊外设设计
2.3.3一种基于FPGA系统的简易ADC对该ADC进行编译,生成RTL原理图如图2.52和图2.53所示。基于FPGA平台的特殊外设设计
2.3.3一种基于FPGA系统的简易ADC图2.54ADC仿真波形图在仿真环境设置待测量为24位的仿真模拟量0x800000,PWM型DAC输出接滤波器与上述所设计数字滤波器相同。模拟待测信号与ADC发出的三角波经过比较器后生成待测PWM信号measure,PWM检测计数器在三角波周期内保持计数,并在三角波最低点清零信号发出时输出8位信号0x7f至AHB总线,与理想值0x80误差约为0.78%。
基于FPGA平台的特殊外设设计
2.3.3一种基于FPGA系统的简易ADC图2.55输入变化时ADC仿真波形图当输入发生改变时,如图2.55所示,最初为24位0x200000,测量结果为8位0x1E。输入改变为24位0xC00000后,最初一个周期测量结果为8位0x6E,测量误差42.7%,误差较大,但经过一个周期后测量值变为8位0xBF,与理想误差0.52%。
基于FPGA平台的特殊外设设计
2.3.3一种基于FPGA系统的简易ADC由于输出低通滤波器限制,可能会产生失真,进而产生较大误差,如图2.56所示,对输入24为0xC00000,输出稳定后为8位0xCA,与理想测量值0xC0误差5.62%。图2.56提高三角波频率后ADC仿真波形图图2.57高滤波器截止频率后ADC仿真波形图而滤波器为影响三角波失真的主要因素,提高滤波器截止频率后仿真波形图如图2.57所示。基于FPGA平台的特殊外设设计
2.3.3一种基于FPGA系统的简易ADC基于FPGA平台的特殊外设设计
2.3.4硬件二阶整数矩阵乘法器实现本设计二阶整数乘法器如图2.58所示。图2.58二阶整数硬件乘法器原理图A11A12A21A22B11B12B21B22乘法乘法乘法乘法加法加法加法加法寄存器寄存器寄存器寄存器C11C12C21C22系统编译完成的RTL级原理图如图2.59所示。图2.59矩阵乘法器RTL原理图基于FPGA平台的特殊外设设计
2.3.4硬件二阶整数矩阵乘法器实现基于FPGA平台的特殊外设设计
2.3.4硬件二阶整数矩阵乘法器实现
图2.60矩阵乘法器输入时波形仿真图图2.61矩阵乘法器完成运算时波形仿真图基于FPGA平台的特殊外设设计
2.3.4硬件二阶整数矩阵乘法器实现2.4MCU软件设计与综合测试MCU软件设计与综合测试
在完成MCU的硬件部分设计后,需要编写硬件单元相应的驱动程序,同时需要针对应用场景编写相应的程序以使MCU完成相应的任务。下文将以汇编语言设计定时器中断驱动8位输出控制为例介绍本设计MCU的软件设计方法。MCU软件设计与综合测试2.4.1ARMCortex-M0指令集早期ARM处理器采用32位的ARM指令集,与8位和16位的处理器相比,搭载了32位指令集的ARM处理器具有更强的性能,但同时也带来了更大的功耗。为了解决低端芯片高功耗问题,Thumb-1指令集被提出使用。Thumb-1指令集为ARM指令集子集,代码长度减少,代码密度提高,但牺牲了一定程度的性能,同时Thumb-1指令集可以通过选择器与ARM指令集混用,进一步提高代码的灵活性。图2.62Thumb指令选择指令Thumb重映射至ARM指令译码执行MCU软件设计与综合测试2.4.1ARMCortex-M0指令集ARMCortex-M0内核采用了ARMv6-M的结构,为了尽可能做到低功耗和低成本,ARMCortex-M0将电路规模降低到最小。寄存器访问指令MOV主要负责对指定寄存器进行读写。存储器读写指令LDR和STR主要负责对指定地址进行读写访问。堆栈访问指令PUSH和POP常用函数调用和中断处理服务函数中。算数运算指令ADD,SUB和MUL主要负责处理程序设计中的计算方面。比较运算指令CMP常与跳转指令结合实现条件分支和循环等内容。跳转控制指令可以将当前程序跳转到指定位置。MCU软件设计与综合测试2.4.2软件设计流程对C语言编写的工程,首先编译器会将C语言编译成汇编代码,汇编器再将汇编代码汇编成机器码,然后链接器将机器码与链接库生成可执行文件。KeilMDK将可执行文件烧写进存储器中,MCU开机后执行开机启动文件,将存储器内的可执行文件映射到程序RAM中,依次取指、译码并执行,完成相应的功能。图2.63典型的程序生成流程C代码汇编代码编译汇编目标代码程序镜像文件链接上位机库程序存储器取指译码执行处理器下载MCU软件设计与综合测试2.4.2软件设计流程首先新建工程,如图2.64所示选择本设计采用的ARMCortex-M0内核,然后设置所采用的存储器大小,程序存储器设置4KB,数据存储器设置1KB,同时设置其起始地址,并将程序存储器设为代码起始位置,如图2.65所示。图2.64新建工程内核选择图2.65设置内核存储器起始地址与内存空间【代码】fromelf-cvf.\objects\code.axf--vhx--32x1-ocode.hexfromelf-cvf.\objects\code.axf-odisasm.txtMCU软件设计与综合测试2.4.2软件设计流程然后在用户界面栏设置两条命令语句。命令一为生成可执行文件的同时生成十六进制机器码,用于FPGA工程程序RAM的启动文件;命令二为对机器码进行反汇编,方便调试时查验机器码对应的汇编代码。图2.66设置用户指令MCU软件设计与综合测试2.4.2软件设计流程本设计软件代码流程图如图2.67所示。首先程序启动后,系统进入复位函数,此时依次设置系统中断系统,将输出引脚复位,然后设置定时器中断并使能。图2.67定时器中断验证代码程序框图
程序启动设置中断向量使能配置定时器中断并使能复位函数主循环外部中断输出+10定时器中断输出+1MCU软件设计与综合测试2.4.2软件设计流程
完成代码编写后,对代码进行编译汇编与生成可执行文件。如图2.68所示,系统输出无报错、无警告、并且执行了两条实现定义的用户指令。图2.68编译结果输出MCU软件设计与综合测试2.4.2软件设计流程反汇编的结果如图2.69所示,代码左侧代表的程序计数器(PC)指针值,也就是此段代码在程序存储器的中的位置,紧跟着是当前位置的代码的机器码,后面则是这段机器码对应的汇编代码,表示当前机器码对应的操作。后续整体仿真时可通过查看总线程序计数器的值与对应机器码检验系统是否正常工作。图2.69反汇编结果图MCU软件设计与综合测试2.4.2软件设计流程Keil软件支持软件仿真功能,在系统设置将调制器设置成仿真模式,如图2.70所示。图2.70设置调试器工作为仿真模式图2.71软件仿真界面开启仿真后仿真操作界面如图2.71所示,在仿真界面可通过按步骤运行程序,检查程序运行逻辑,验证算法逻辑的正确性。MCU软件设计与综合测试2.4.2软件设计流程MCU软件设计与综合测试2.4.2软件设计流程图2.72为系统初始运行时的状态,在复位信号拉高后,系统复位,PC指针设置为0,然后开始程序计数,几个周期后PC指针根据启动代码映射至复位函数0x80的位置。图2.72系统开始运行时序图MCU软件设计与综合测试2.4.2软件设计流程图2.73表示复位函数运行过程中,可见CPU依次向指定的三个外设写入对应的值,驱动相应外设正常工作。图2.73复位函数波形图MCU软件设计与综合测试2.4.2软件设计流程图2.74为复位函数中CPU向定时器写入计数终值后使能,定时器开始计数的工作状态。图2.74定时器开始计时波形图MCU软件设计与综合测试2.4.2软件设计流程图2.75为定时器在到达计数终值255后,由于设置其为循环工作,计数器清零重新计数,同时调用中断服务函数,使得输出寄存器0x50000000的值加一。图2.75定时器输出中断波形图基于FPGA平台的特殊外设设计
2.4.2软件设计流程图2.76表示外界中断触发后,CPU调用中断服务函数,使得输出寄存器0x50000000的值加十。图2.76触发外部中断波形图MCU软件设计与综合测试2.4.2软件设计流程完成系统的行为级仿真后,对RTL级代码进行综合,通过后对其进行布局布线,综合原理图与布局布线图如图2.77和图2.78所示。图2.77综合原理图图2.78布局布线图MCU软件设计与综合测试2.4.2软件设计流程完成布局布线后,可对系统占用资源进行统计,本设计芯片采用XilinxArtex的xc7a200tfbg484-2芯片,其资源利用结果如表所示。可见,使用中低端的FPGA完全可以支持ARMCortex-M0内核项目的实现。资源使用总共使用率(%)查找表50731338003.79查找表RAM2048462004.43寄存器11072676000.41DSP37400.41IO112853.86缓冲器1323.13章节回顾本章的主要内容是基于FPGA设计搭载ARMCortex-M0内核的MCU,验证基于FPGA开发MCU的可行性与优越性。主要内容包括微控制器功能分析,前端设计,仿真模拟,软件设计和系统整合等方面,具体的内容有:分析ARMCortex-M0内核原理与工作方式;分析AHB总线协议与工作方式;基于ARMCortex-M0内核和AHB总线设计MCU所需基本外设;基于FPGA平台设计具有可复用的高效特殊MCU外设;设计ARM指令集软件代码,并整合软硬件进行系统性测试。习题2
1.简答题1)在做系统级芯片的设计规划时,需要考虑哪些主要因素?2)目前主流的SoC一般包括哪些功能模块或IP?有什么新的技术趋势值得关注?3)为SoC选择IP时主要基于什么标准或要求?如何实现差异化设计?4)当前SoC在设计验证方面遇到哪些挑战?有什么应对解决方案?2.选择题1)以下不属于嵌入式系统特点的是()。A)嵌入式系统与具体应用紧密结合,具有很强的专用性。B)嵌入式系统通常包含在非计算机设备(系统)中,具有隐蔽性。C)嵌入式系统的软硬件资源往往受到严格的限制。D)嵌入式系统性能较低,价格也比较便宜。习题22)以下不是嵌入式系统中的CPU特点的是()。A)支持实时处理。B)低功耗。C)高主频。D)集成了测试电路。3)以下关
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 温州市区玉林110千伏输变电工程环境影响报告表环境影响报告表
- 杭钱塘工出【2024】20号地块亿亿德高端精密传动装备智能智造项目环境影响报告表
- 基于行为克隆的自动驾驶运动规划研究报告
- 基于计算机视觉的纺织品瑕疵检测可行性分析
- 商务礼仪概述知识性强值得备份
- 全国注册公用设备工程师暖通空调之自动控制培训
- 2026年度直男测试终极黄冈密卷(全国)
- 2026年中高层管理人员绩效考核方案
- 周爱民《金融工程》第四章金融期货
- 事业编2026年体育岗必刷题试卷
- AI搜索时代:从GEO到AIBE的品牌新蓝图
- 2025年浙江省宁波市事业单位招聘考试卫生类药学专业知识试卷
- 2025-2030中国燃气行业反垄断监管重点与合规经营指引
- 2025 神经外科脑梗死溶栓后出血护理查房课件
- 特大排水管渠结构检测评估技术规程
- 高一2025-2026学年一年级第一学期期中考试工作方案
- 贵州贵财招标有限责任公司招聘笔试题库2025
- 2025中泰证券笔试题目及答案
- 高职新生心理健康知识讲座
- 折弯计件管理办法
- 青少年人体骨骼科普知识
评论
0/150
提交评论