为什么换成nios ii ide下载/f 地址映射

君,已阅读到文档的结尾了呢~~
本教程较为详细地介绍了nios ii如何建立工程到应用实例,非常适合于初学者使用
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
nios ii 新手入门教程
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口ERROR: READ TIMEOUTERROR: READ TIMEOUT
Mon, 19 Jun :18 GMT (taikoo/BC197_dx-jiangsu-yancheng-2-cache-3)NIOS II功能模块说明(三)_电子技术_中国百科网
NIOS II功能模块说明(三)
    存储器和I/O组织
NIOS II在存储器和I/O组织方面与贸易微控制器相比更为灵活,由于NIOS II核可配置,其存储器和外围设备也与其他微控制器不同,从而导致存储器和I/O的组织也存在不同。EDA中国门户网站
一个NIOS II核使用了一个或多个如下的存储器和I/O单元:
&&&&2& 主指令端口 ― 通过系统互联结构连接指令存储器的AvalON-MM(Avalon Memory-Mapped)主端口。
&&&&2& 指令缓存 ― 在NIOS II核内部的快速缓存。
&&&&2& 主数据端口 ― 通过系统互联结构连接数据存储器的Avalon-MM(Avalon Memory-Mapped)主端口。
&&&&2& 数据缓存 ― 在NIOS II核内部的快速缓存。
&&&&2& 紧耦合指令或数据存储端口 ― 在NIOS II核外部的快速存储器接口。
&&&&l& 指令与数据总线:
?& 存储器与外围设备接进:
NIOS II架构提供了存储器映射的I/O接进方式。数据存储器和外围设备都映射到主数据端口的地址空间中。NIOS II架构是有字节存储顺序的。字和半字被存储时,最有效的字节被存储在高位地址空间。
NIOS II结构并不区分存储器和外围设备,包括数目、类型等,甚至能答应高速片上存储器和低速片外存储器混合使用。
?& 指令端口:
NIOS II指令总线是由一个32位的Avalon-MM端口来实现,指令端口完成一个功能:使指令送进处理器执行,因此指令端口不能完成任何写操纵。
指令端口是一个流水线的Avalon-MM端口,它能将使同步存储器的流水延时减到最小,同时使系统的最高频率得以提升。指令端口能在前面的请求数据未返回时就发出新的读取请求。处理器能预先获取连续指令,并且完成分支程序以使指令管道尽可能的保持在激活状态。
指令端口经常重读32位的数据,它依靠于包含在系统连接框架中的动态总线逻辑。由于动态总线宽度可变的优点,每个指令发布的是全指令字,因此可以忽略目标存储器的总线宽度。正由于如此,程序无需了解NIOS II系统中存储器的数据宽度。
NIOS II架构同时支持片上缓存以进步均匀指令读取性能,从而避开低速存储器对性能的影响。
?& 数据端口:
NIOS II数据总线是由一个32位的Avalon-MM端口来实现的,该端口完成两个功能:
2& 当处理器执行载进指令(load)时,从存储器或外围设备中读取数据。
2& 当处理器执行存储指令(STore)时,将数据写进存储器或外围设备。
在端口上的字节使能信号在存储指令操纵时指定四个字节中的哪个被写。当NIOS II核被配置为数据缓存总线宽度大于四字节时,数据端口进行流水线的Avalon-MM传输。当NIOS II核被配置为数据缓存总线宽度即是四字节时,任何存储器流水线延迟都会被数据端口理解为等待状态。当数据端口被连接到零等待状态的存储器时,载进和存储操纵都能在单一时钟周期完成。
NIOS II架构同时支持片上缓存以进步均匀数据传输性能,从而避开低速存储器对性能的影响。
?& 指令与数据共享存储器
通常指令和数据端口共享一个单独的,能同时存储指令和数据的存储器。当处理器拥有独立的指令和数据总线时,整个处理器对外部世界呈现的是一个单一的共享指令和数据总线。从外部看,NIOS II处理器依靠于系统中的存储器和外围设备,以及系统互联网络结构。
数据和指令端口不会导致总线阻塞。但在指令和数据共享存储器中分配给数据端口较高优先级属性能使性能得到进步。
l& 缓冲存储器:
NIOS II架构在指令接口和数据接口都支持缓冲存储器。缓冲存储器作为一个NIOS II处理器内核的一部分存在,位于FPGA片内。缓冲存储器能进步存储器均匀访问速度,特别是当NIOS II处理器系统使用类似于SDRAM等低速的外部存储器来作为程序和数据存储时。
指令和数据缓存需要在运行前使能,但软件提供的算法能旁路缓存,以便在对外围设备进行访问时不用进行数据缓冲。缓存的治理是由软件来执行的,NIOS II指令集提供了缓存治理的相关指令。
?& 缓存选项的可配置性
缓冲存储器是可选的。对于高性能存储的需要是依应用情况而定的。多数应用仅需要最小化的处理器核,并且在性能和尺寸方面进行平衡。
一个NIOS II处理器核可能需要一个数据或者指令缓存,也可能两个都需要,甚至两者都不需要。因此,对于提供数据和/或指令缓存的内核,缓存的尺寸是可配置的。是否配置缓存对程序并无影响,但会影响处理器调用指令和存储/读取数据的速度。
?& 缓存的有效使用
缓存是否能有效进步性能,基于以下使用原则:
2& 常规存储器位于片外,并且访问时间比片内存储器长
2& 最大的、对性能影响明显的指令循环比在指令缓存小
2& 最大的、对性能影响明显的数据块比在数据缓存小
尽管可以人为使缓存在整个应用程序范围都有效,但最佳的缓存配置还是依具体应用来确定。例如,假设一个NIOS II处理器系统仅包括快速的片上存储器(即系统未连接低速片外存储器),指令或数据缓存对性能提升没有任何帮助。又如,程序中的一个关键循环有2K字节大小,当指令缓存大小是1K字节时,指令缓存是无法提升执行速度的。事实上,在这种情况下,指令缓存反而会降低性能。
假如一个应用需要某些由于性能原因而存储在缓存中的数据或者代码段,紧耦合存储器提供了一个更合适的解决方案。
?& 缓存旁路的方法
NIOS II架构提供了如下方法来旁路数据缓存:
2& I/O的读取和存储指令
2& Bit-31缓存旁路
I/O读取和存储指令是使用ldio和stio指令旁路数据缓存并且强制Avalon-MM传输数据到指定的地址。
Bit-31缓存旁路方法,即使用数据端口的第31位比特来标记处理器是否适用数据缓存。对需要控制对某些地址需要缓存,某些地址需要旁路的软件而言,这样操纵是方便的。软件能在函数间将地址作为参数传递,而不必指定更多的信息来描述地址是否被缓存。
& l& 紧耦合存储器:
紧耦合存储器为性能要求严格的应用提供了低延迟存储器访问的性能保障,对比缓存,紧耦合存储器拥有如下优点:
2& 性能与缓存接近
2& 软件为存储在紧耦合存储器中的对性能要求严格的代码或数据提供了性能保障
2& 没有载进、失效和刷新等实时操纵的缓冲开销EDA中国门户网站*J/J4r9~GR8z
物理上,紧耦合存储端口与数据和指令端口一样在NIOS II内核上有独立的端口。一个NIOS II内核可以没有紧耦合存储端口,也可以有一个或多个紧耦合存储端口。在NIOS II架构上,支持指令和数据访问的紧耦合存储器。每个紧耦合存储端口能直接连接一个固定的低延迟存储器,而该存储器通常使用片上存储器,也可使用外部的存储器。
?& 访问紧耦合存储器
紧耦合存储器象其他通过系统网络互联结构连接的存储设备一样占用普通地址空间,其地址范围由系统在产生是定义。
软件通过规则的载进和存储指令访问紧耦合存储器,从软件的角度看,访问紧耦合存储器与访问其他存储器一样,并没有区别。
?& 紧耦合存储器的有效使用
一个系统能使用紧耦合存储器来达到在访问特定代码和数据段时获得最佳性能的目的。例如,中断敏感的应用可以将异常句柄代码放到紧耦合存储器中,以便减少中断延迟。类似的,对计算敏感的数字信号处理应用可将数据缓冲到紧耦合存储器中以进步数据访问速度。
若应用的对存储器大小的需求足够小且适合整体放到片内,那么使用专为程序和数据使用紧耦合存储器就成为可能。较大的应用程序必须仔细选择哪些部分应包含在紧耦合存储器中,以便使心能价格比达到最优。
Copyright by ;All rights reserved.基于FPGA+DSP的多串口数据通信的实现
基于FPGA+DSP的多串口数据通信的实现
发布: | 作者:-- | 来源: -- | 查看:265次 | 用户关注:
摘要:& 串口传输常用于基于FPGA和DSP结构的信号处理板和外部设备之间的数据交换。以GPS RTK定位应用为基础,针对单个串口全双工传输不足以应对多种数据类型同时输入输出的情形,设计并实现了一种面向多串口不同类型数据的传输方案。该方案通过增加串口控制寄存器实现单个中断信号即可控制所有串口,采用乒乓交替读写实现数据持续高速输入。测试表明该方案可独立对各串口进行配置,可同时实现GPS定位
摘要:& 串口传输常用于基于FPGA和DSP结构的信号处理板和外部设备之间的数据交换。以GPS RTK定位应用为基础,针对单个串口全双工传输不足以应对多种数据类型同时输入输出的情形,设计并实现了一种面向多串口不同类型数据的传输方案。该方案通过增加串口控制寄存器实现单个中断信号即可控制所有串口,采用乒乓交替读写实现数据持续高速输入。测试表明该方案可独立对各串口进行配置,可同时实现GPS定位结果、差分GPS修正数据与外界的交换以及用户控制命令的输入,并且可减少硬件调试时间,节约硬件资源。
  通用异步接收/发送器(UART)是一种通用串行数据总线,用于异步通信,可以实现全双工通信。UART IP核是用在外部设备和Atera FPGA芯片上的SOPC间进行串行通信的一种实现方式。它可以替代RS-232实现芯片与外设的输入/输出(I/O)操作。
  GPS RTK(Real Time Kinematic)可以即时提供厘米级的定位解。在进行动态定位时,基准站将精确已知的GPS坐标和观测数据实时用微波链路传给流动站,在流动站实时进行差分处理,得到基准站和流动站坐标差;坐标差加上基准站坐标得到流动站每个点坐标。基准站向终端用户接收机提供的信息包括对GPS卫星钟、星历数据、用户测量伪距和载波相位等参数的修正。
  本文所用的信号处理板可以作为GPS RTK基站使用,可以与其他基站组网接收差分修正数据定位或者本身的高精度单点定位输出定位结果和差分修正数据。作为基准站,不仅要实时输出精确定位信息,而且需要与外界进行差分数据交换。由于同一时间需要大量持续差分数据的输入与输出和用户控制指令的输入,设计采用了3个串口。
  1 硬件结构
  信号处理板为FPGA+DSP结构,具有多路A/D、D/A转换器件。中频信号经A/D采样后进入FPGA完成去载波,PRN码相关运算,IQ变换等操作后由DSP芯片进行定位解算。通过串口输入的用户控制指令任意选择串口对GPS定位结果的输出和GPS差分修正数据的输入输出。
图1 信号处理板框图
  FPGA芯片上配置了3个串口,分别为UART0、UART1、UART2,由SOPC Builder分配相对应的存储映射空间和中断请求。每个模块均使用默认的基地址,并分别设定UART0、UART1、UART2的数据输入中断请求号为IRQ1,IRQ2,IRQ3。另外,DSP芯片可能在任意时刻通过3个串口发送不同数据。
  如果DSP对每个串口发送数据时均向NIOS II CPU发出中断申请,则需要3根PIO管脚,占用太多针脚资源。本实现方案通过增加个串口控制寄存器,仅占用1根PIO管脚。
  同时,对和DSP芯片进行交互控制的PIO信号分配中断请求号为IRQ0。
  每个UART口都有输入、输出两块RAM作为缓存,数据位宽为16bits。其中,串口输入缓存命名为ReadFromMemInterface,串口输出缓存命名为WriteToMemIntedace(见图2)。需要注意的是实际传输数据时,外部设备的串口参数的数据位长度设置为8 bits,因此需要在串口的软件处理进行字与字节的转换。
图2 NIOS II CPU的地址映射
  图3是NIOS II CPU在Quatus中的连线示意图,即位于中心的inST6模块。该CPU主要管脚定义如表1所示。
图3 NIOS II CPU在Quatus中的连线示意图
表1 CPU主要管脚定义
  值得说明的是,ts_clk输入时钟20.46 MHz即为NIOS IICPU的时钟频率,串口波特率为115 200 bps,可由该时钟分频得到。DSP6713的EMIF为输入输出双向32位,在本设计中串口部分仅使用低16位,使用三态门来控制数据流向。三态门输入输出的使能信号是dsp给出的ce空间使能信号ce_6713。
  串口输入数据先由NIOS II CPU写入每个串口的输入缓存,当满足条件时由out_pio管脚向dsp发出中断,用以告知其可以读取相应串口的数据了,缓存的数据由dspread0传递至三态门tri_16.dsp读取时三态门为dsp输入方向,dsp的EMIF数据线evm_D随即出现数据,配合EMIF地址线evm_A即可完成串口输入数据向dsp传递;当dsp有数据要经串口输出时,数据由dsp的EMIF数据线evm_D输入,dsp通过in_pio向NIOS II CPU发出中断信号,请求发送数据。详细的发送接收流程见下文。
  2 软件设计
  NIOS II CPU的控制代码部分分为主函数和各种中断响应函数。在主函数里完成寄存器初始化、各串口数据输出的任务。串口的中断响应函数则主要完成数据的输入任务。
  为了便于FPGA和DSP之间的控制信息交换,每个串口设有地址固定的长度各为32位(4字节)的输入和输出两个控制寄存器。通过对各标志位的读写操作即可实现系统对各串口的控制。串口的输入控制寄存器定义见表2,输出控制寄存器与之类似。
  由于用户控制指令(包括信号处理板配置参数、输出数据类型控制等)与差分修正数据的数据长度和数据持续性有很大区别,在常规数据传输方式之外对每个串口增设数据块传输模式。数据块传输模式可用于持续性大量数据的输入,采用每个串口对两块RAM进行乒乓读写操作的来方案实现。是否采用数据块传输模式由串口的控制寄存器中的第14位(P_flag)决定。对于非数据块输入模式中缓存大小需要根据常规数据最大长度来设定,过小会导致部分数据丢失。当有数据需要输出时,由DSP向NIOS II CPU的RAM写入各UART输出控制寄存器的设定值,并通过GPIO向其发出中断信号。可在NIOS II CPU的main函数中设置一个循环检测是否有由DSP输入的中断信号,若有再检测各UART的输出控制寄存器。输出流程图如图4所示。
图4 串口数据输出流程
  图4中SET_EN用于设置个串口的输入模式(是否乒乓输入及乒乓输入时缓存的大小)和串口使能等操作,输入控制寄存器的默认值在系统初始化时由DSP写入。
  当数据输入时,NIOS II CPU检测到来自串口的中断请求,进入对应的中断响应程序。首先对数据传输模式进行判断,P_flag默认值为0,表示非数据块输入模式。该模式下输入的数据有特定的结尾标志符组合,一旦检测到结束标志则发送已缓存的数据并完成状态清零以便下次接收;P_flag为1则为连续数据块输入,当Half_BAM0或Half_RAM1其中一块写满时即向DSP发出中断信号,DSP即进入中断服务程序读取数据。程序流程图如图5所示。
图5 程序流程图
  3 结束语
  采用Altera FPGA芯片上的NIOS II CPU控制串口的优点是充分使用硬件资源,可以减轻DSP芯片的计算量。测试表明,NIOS II CPU工作频率为20.46 MHz,串口波特率设置为115 200,数据位为8 bit,各串口可以同时正常输入输出。多串口可以同时输入输出数据,由指令可以灵活配置传输模式,以适应不同数据传输类型的需求。
  本文解决了单串口传输不能满足GPS高精度接收机对多种数据同时输入输出的要求,实现了GPS定位结果、RTK差分数据与外界的实时交换以及用户控制命令的输入。本方案的优点是通过增加各串口的输入/输出控制寄存器,使DSP芯片可以仅以两个GPIO资源实现原本需要3个串口输入/输出功能相对应的6个中断操作;采用NIOS II CPU进行多串口控制可以减少硬件调试时间,节约FPGA片内资源。不足之处是未实现串口波特率、数据位等实时配置。
本页面信息由华强电子网用户提供,如果涉嫌侵权,请与我们客服联系,我们核实后将及时处理。
应用与方案分类
&&& 目前,处理器性能的主要衡量指标是时钟NIOS II/f Data Cache and Tightly-Coupled Memory - CrazyBingo - 博客园
Learn to walk first before you want to run…
这个问题困扰了我n久n久了(2天)...
上篇博文中我提出了问题,对于
#define&&& LED_DATA&&& *(volatile unsigned char*)& LED_PIO_BASE
直接操作没有效果,但后面加一句printf()后可执行,一直想不通这个问题,现在终于解决了&
最后在牙缝哥哥的&不情愿&的教导下,又baidu google了一下,加上手册和书,我终于悟出来了。。。。。
下面我图文并茂,handbook+ZLG_BOOK+BMP+txt 来解决问题
在SOPC创建CPU的时候,nios/e、nios/s、nios/f有个地方有所不同:
下面是nios/e、nios/s的 ,
Data Cache被屏蔽了,不存在Data Cache(数据缓存)的问题
下面是nios/f的 (可以在这里把它关掉,防止后面的一系列问题)
nios/f为CPU开辟了2KB的32字节的Date Cache(数据缓存),问题就出在这里
Data Cache 数据缓存相当于电脑的一级缓存,二级缓存,是为了提高系统速度,因为这样就可以一直发送数据,一直接收数据了。
根据Nios II Processor Handbook 上关于Cache and Tightly-Coupled Memory的解说:
可见,ldio/stio类指令明确指明了第31位地址对旁路数据缓存提供了一个可选的方法
如果第31为地址被拉高- 1 -:数据缓存区被旁路
如果第31为地址被拉低- 0 -:数据缓存区被打开
因此在nios/f中又可以通过软件的方法吧Data Cache关掉
第31位地址只能在处理器内部使用,所以最大的地址空间只有31位,及2G寻址空间
后面又说到,对于nios/e、nios/s也是31位及2G寻址空间,这样便于不同等级的NIOS II核之间的代码移植
下面摘录ZLG的《SOPC嵌入式系统基础教程》P68、P69中的几句话:
&NIOS II结构的指令主端口和数据主端口都支持高速缓存
高速缓存使用片内存储器
nios/f中指令和数据高速缓存在运行时移植使能,但可以使用软件方法来旁路数据高速缓存
NIOS II处理器出城部分的高速缓存在SOPC Bulider中式可选的,取决于用户对系统欧冠存储性能的要求
NIOS II处理器 数据指令缓存 可有可无
NIOS II 高速缓存改善心梗的功效基础
(1)常规存储器位于片外,方为时间&片内存储器
(2)循环执行的、最大的、关键性能的指令序列长度小于指令高速缓存
(3)关键性能数据的最大规模小于数据高速缓存
NIOS II 高速缓存缺点
(1)只有片内存储器时,高速缓存没优势
(2)程序循环2KB,高速缓存1KB,没作用(上述(3))
(3)使得程序执行时间不可预测
NIOS II处理器内核支持一种称作31为高速缓存旁路的机制,根据最高有效位的值来旁路高速缓存
NIOS II内核地址都限制在31为,及2G地址空间
至此,我恍然大悟,记得当年我的另外一块开发板因为画的是在太戳了,nios/f跑步起来,所以一直用的是nios/e、nios/s,我一直这样写
以前这样写从没出现过问题是因为nios/e,nios/s不存在数据缓存区,Bit31无效
但nios/f存在数据缓存区,Bit31有效,所以如果要直接通过地址映射操作,必须把最高位屏蔽掉
#define&&& LED_DATA&&& *(volatile unsigned int*)& (LED_PIO_BASE| (1&&31)) //把Bit31拉高
这样就能操作了
而上述我在LED_DATA = 1;后面加了一句printf()就可以了原因,
因为把给LED_DATA发出的数据放在了数据缓存区,没有及时处理,
个人觉得printf是电脑在执行操作,这个同事刚好FPGA CPU空闲,所以缓存区释放,IO有效(如果有不到之处,看到的人请提出,谢谢)
下面放映一下我Master的SPI 寄存器映射方法
在nios/f中& 要寄存器映射都必须bypass cache,否则会出错,这个要铭记了。。。
。。。。。。。。。
#define&&& LED_DATA&&& *(volatile unsigned int*)& (LED_PIO_BASE| (1&&31))
int main(){&&& unsigned char table[]={0x00,0x01,0x02,0x03};&&&&&& printf("Time is flying...\n");&&& printf("我要吐血了。。。\n");&&& while(1)&&& {&&&&&&& for(i=0;i&4;i++)&&&&&&& {&&&&&&&&&&& LED_DATA = table[i];&&&&&&&&&&& Delay_Ms(500);&&&&&&& }&&& }&&& return 0;}
但是Cache存在缺陷,就是 不能及时处理数据,执行代码时间变的不可确定,降低了实时性
在此,有更好的解决方案,那就是Tigtly-Coupled Memory,紧耦合锁存器:是一种紧挨着内核的快速SRAM
(1)可以改善系统系能
(2)保证装在和存储指令或数据的时间确定
紧耦合所存器使NIOS II性能提高,又能获得可预测的实时响应,有以下特点:
(1)性能类似于高速缓存
(2)软件能够保存讲关键性能的代码或数据存放在紧耦合存储器中
(3)代码执行的确定性&&装载和存储指令或者数据的时间是可预测的
NIOS II节后指令和数据访问都支持耦合存储器
如果应用程序和存储器需要组后小,能够完全在片内实现,可以使用专门针对代码和数据的紧耦合器,可是怎么用捏???
反正,问题都解决, 静态地址 主端和从端的地址映射也差不多知道了。。。。
养成对Cache Bit31位操作的习惯,便于移植
总结出一点,好好看handbook!!!
发现问题--问问题--无果--看handbook--while(1){冷静,问题总能被解决的&&&}
随笔 - 189
评论 - 447

我要回帖

更多关于 nios ii 的文章

 

随机推荐