尝试对PCIe Avalon-MM根端口nginx 配置多个端口进行仿真时,为什么会出现以下错误

基于Avalon总线的SD卡读写控制器的设计
> 基于Avalon总线的SD卡读写控制器的设计
基于Avalon总线的SD卡读写控制器的设计
0 引言 当前,人们对大数据量的高速存取需求越来越高。SD卡作为新一代数据存储设备,具有大容量,高速度的特点,很好地满足了市场的具体需求,被广泛用于便携式消费类电子设备,例如手机,数码相机、PDA和各种多媒体播放器等。在工业控制领域,同样有大量数据需要采集,存储,分析。而传统用MCU的GPIO模拟SD卡的时序实现读/写调试复杂、读/写速度慢,已经不能符合大多数应用的需求。利用FPGA自身高速并行的特点,开发一种的IP核,不但可以提高性能,而且可以简单实现IP复用,大大提高开发效率,降低成本,具有极大的应用前景。 可编程的片上系统(System on Programmable Chip,SoPC)最先由Altera公司提出,它将尽可能大而完整的电子系统,主要包括NiosⅡ嵌入式处理器、各种硬件接口、数字信号处理系统、普通数字电路逻辑在单一FPGA芯片中实现。SoPC系统中的各个外设通过相连,可简单实现IP复用,因此,系统在开发周期、体积、功耗、功能、产品升级维护等多方面实现最优化,逐渐成为电子产品设计的趋势。1 简介 是Altera公司专门为SoPC系统指定的一套总线标准,它定义了主从端口对之间通信的信号类型和时序关系。在结构上不同于传统的共享式总线:它在需要连接的每一个主从端口对之间都有点到点的连接,不同的主从端口对之间可以同时进行通信,所以大大提高了系统的性能。Altera一直在致力于为Avalon总线添加一些极其有用高级特性,简化系统设计的同时提高系统的性能。Avalon总线标准也在不断的升级完善,现在已经包含Avalon-MM接口规范和Aval-on-ST接口规范。 在Avalon总线接口的设计中,SoPC Builder提供了直观的图形用户界面,设计人员可以很方便地添加自定义外设,SoPC Builder将自定义外设和其他组件组合起来,生成对这些组件进行例化的单个系统模块,并且自动生成内部总线逻辑,按照设计人员的要求将这些外设与NiosⅡ处理器连接起来,并自动完成外设和存储器的地址映射、中断控制和总线控制等工作。本文主要阐述了SD卡读/写的AvaIon-MM总线接口和SD卡读/写控制逻辑的设计,以圾NiosⅡIDE中读/写控制程序的编写。2 SD卡的一般读/写过程 SD卡有两种读/写访问模式:SD模式和SPI模式,其中SD模式又分为1 b和4 b两种。由于DE2开发平台硬件上的原因,该设计采用的是1 b的SD模式实现SD卡的读/写。SD卡在上电初期,卡主控通过检测引脚1(DAT3)的电平来决定使用SD模式还是SPI模式。 SD总线上命令和数据的传输从一个起始位开始,以停止位终止。每个时钟周期传输一个命令或数据位。通过CMD信号线发送命令到SD卡,用于对SD卡进行相应的操作,SD卡接收到命令后,会发送相对应的响应给控制器,这些响应中包含了SD卡的一些基本信息和状态信息等。SD卡初始化完成后,进入数据传输阶段,则可以进行读/写操作。为了避免命令,数据和响应传输的错误,SD规范中采用了CRC技术,在传输命令和响应时,需要进行CRC7效验,而在传输数据时,则需要进行CRC16效验。该控制器主要采用SD的CLK,CMD,DAT0三根信号线完成SD卡的读/写。3 控制器总体工作过程 该控制器采用Verilog HDL语言编写,在SD卡就绪后,NiosⅡ处理器先向Avalon-MM Slave端口设置相关寄存器。状态控制逻辑根据寄存器中的相关位发送命令到读/写控制逻辑,再由读/写控制逻辑发送相应的命令到SD卡。命令在时钟信号CLK的上升沿经过CRC7校验后通过CMD信号线串行写入SD卡。SD规范中定义了很多命令,但这里仅用到了常用的10个命令就实现了读/写控制的功能,命令都要按一定格式顺序发送到SD卡,命令编号占6 b,每个命令必须填充开始标志,命令的参数以及CRC7校验数据以及结束标志,发送1个完整的命令需要写入48b。 SD卡在接收到命令后,会根据写入的命令执行相应的操作,并发送相应的Response给控制器,其中Re-sponse也分为几种,包含长响应和短响应,Response中的数据包含了卡的一些基本信息以及命令的执行情况等。控制器根据返回的状态的信息决定下一步操作,即发送下一个命令。控制器内部总体结构如图1所示。本文引用地址: 控制器上电后自动进行初始化,将SD卡的状态保存到状态寄存器中,在进行读/写前,应先读取SD卡的状态信息,在SD卡进入了读/写就绪状态后,即可向Avalon-MM Slave端口写入读/写控制命令,具体包括要读/写的扇区号,读出数据或写入数据的存放地址。控制器在收到开始读/写命令后,开始读/写指定的扇区,控制器一次性读/写512 B,产生一个读/写完成的中断,即可以开始读/写下一个扇区。进行读操作时,控制器将从SD卡读出的数据通过AvaIon-MM Master端口写入所指定的地址处。进行写操作时,控制器通过Avalon-MM Master端口将指定内存地址处的数据写入SD卡。控制器整个读/写过程无需CPU干预,由Master端口主动完成,CPU仅需写入相关控制命令,大大提高了CPU的利用率。
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一基于Avalon总线的SD卡读写控制器的设计 - 总线与接口 - 电子工程世界网
基于Avalon总线的SD卡读写控制器的设计
14:28:27来源: eefocus 关键字:&&&&
  0 引言
  当前,人们对大数据量的高速存取需求越来越高。作为新一代数据,具有,高速度的特点,很好地满足了市场的具体需求,被广泛用于便携式消费类电子设备,例如手机,数码相机、PDA和各种等。在领域,同样有大量数据需要采集,存储,分析。而传统用MCU的GPIO模拟SD卡的时序实现读/写调试复杂、读/写速度慢,已经不能符合大多数应用的需求。利用FPGA自身高速并行的特点,开发一种SD卡的IP核,不但可以提高性能,而且可以简单实现IP复用,大大提高开发效率,,具有极大的。
  的片上系统(System on Programmable Chip,SoPC)最先由Altera公司提出,它将尽可能大而完整的电子系统,主要包括NiosⅡ、各种硬件接口、、普通逻辑在单一FPGA芯片中实现。SoPC系统中的各个外设通过相连,可简单实现IP复用,因此,系统在开发周期、体积、功耗、功能、产品升级维护等多方面实现最优化,逐渐成为的趋势。
  1 Avalon总线简介
  Avalon总线是Altera公司专门为SoPC系统指定的一套总线标准,它定义了主从端口对之间通信的信号类型和时序关系。在结构上不同于传统的共享式总线:它在需要连接的每一个主从端口对之间都有点到点的连接,不同的主从端口对之间可以同时进行通信,所以大大提高了系统的性能。Altera一直在致力于为Avalon总线添加一些极其有用高级特性,简化系统设计的同时提高系统的性能。Avalon总线标准也在不断的升级完善,现在已经包含Avalon-MM接口规范和Aval-on-ST接口规范。
  在Avalon总线接口的设计中,SoPC Builder提供了直观的图形,设计人员可以很方便地添加外设,SoPC Builder将自定义外设和其他组件组合起来,生成对这些组件进行例化的单个系统模块,并且自动生成内部总线逻辑,按照设计人员的要求将这些外设与NiosⅡ连接起来,并自动完成外设和的地址映射、中断控制和总线控制等工作。本文主要阐述了SD卡读/写控制器的AvaIon-MM总线接口和SD卡读/写控制逻辑的设计,以圾NiosⅡIDE中读/写的编写。
  2 SD卡的一般读/写过程
  SD卡有两种读/写访问模式:SD模式和SPI模式,其中SD模式又分为1 b和4 b两种。由于DE2开发平台硬件上的原因,该设计采用的是1 b的SD模式实现SD卡的读/写。SD卡在上电初期,卡主控通过检测引脚1(DAT3)的电平来决定使用SD模式还是SPI模式。
  SD总线上命令和数据的传输从一个起始位开始,以停止位终止。每个时钟周期传输一个命令或数据位。控制器通过CMD信号线发送命令到SD卡,用于对SD卡进行相应的操作,SD卡接收到命令后,会发送相对应的响应给控制器,这些响应中包含了SD卡的一些基本信息和状态信息等。SD卡完成后,进入数据传输阶段,则可以进行读/写操作。为了避免命令,数据和响应传输的错误,SD规范中采用了CRC技术,在传输命令和响应时,需要进行CRC7效验,而在传输数据时,则需要进行CRC16效验。该控制器主要采用SD的CLK,CMD,DAT0三根信号线完成SD卡的读/写。
  3 SD卡读写控制器总体工作过程
  该控制器采用Verilog HDL语言编写,在SD卡就绪后,NiosⅡ处理器先向Avalon-MM Slave相关。状态控制逻辑根据寄存器中的相关位发送命令到读/写控制逻辑,再由读/写控制逻辑发送相应到SD卡。命令在时钟信号CLK的上升沿经过CRC7校验后通过CMD信号线串行写入SD卡。SD规范中定义了很多命令,但这里仅用到了常用的10个命令就实现了读/写,命令都要按一定格式顺序发送到SD卡,命令编号占6 b,每个命令必须填充开始标志,命令的参数以及CRC7校验数据以及结束标志,发送1个完整的命令需要写入48b。
  SD卡在接收到命令后,会根据写入的命令执行相应的操作,并发送相应的Response给控制器,其中Re-sponse也分为几种,包含长响应和短响应,Response中的含了卡的一些基本信息以及命令的执行情况等。控制器根据返回的状态的信息决定下一步操作,即发送下一个命令。控制器内部总体结构如图1所示。
  控制器上电后自动进行初始化,将SD卡的状态保存到状态寄存器中,在进行读/写前,应先读取SD卡的状态信息,在SD卡进入了读/写就绪状态后,即可向Avalon-MM Slave端口写入读/写控制命令,具体包括要读/写的扇区号,读出数据或写入数据的存放地址。控制器在收到开始读/写命令后,开始读/写指定的扇区,控制器一次性读/写512 B,产生一个读/写完成的中断,即可以开始读/写下一个扇区。进行读操作时,控制器将从SD卡读出的过AvaIon-MM Master端口写入所指定的地址处。进行写操作时,控制器通过Avalon-MM Master端口将指定处的数据写入SD卡。控制器整个读/写过程无需CPU干预,由Master端口主动完成,CPU仅需写入相关控制命令,大大提高了CPU的。
  4 Avalon-MM
  为了实现数据在Avalon总线上的传输,必须实现Avalon总线相关信号和时序逻辑,主要包括数据、地址、读/写控制、中断、时钟复位等信号。
  Avalon-MM Master端口主要用来将读/写控制逻辑部分读到的数据写入内存,或者将内存中的数据写入读/写控制逻辑,其接口信号如表1所示。
  Avalon-MM SIave端口主要用来接收相关控制命令,即通过这个端口实现控制器内部寄存器的访问,其接口信号如表2所示。
  该控制器内部有6个寄存器,也可以根据需要实现更多,通过软件设置相关寄存器即可进行读/写SD卡的操作,寄存器功能描述如表3所示。
  5 系统
  为了验证SD卡读写控制器,在DE2开发平台上搭建了最基本的硬件系统,主要包括:NiosⅡ处理器,PLL,片上RAM,JTAG UART和自定义的SD卡读写控制器。NiosⅡ作为系统主控制器,PLL用来产生SD卡读/写所需的时钟信号,片上RAM用来存储代码和数据,JTAG UART主要用来调试,打印数据到控制台验证写入的数据和读出的数据是否相同。
  硬件系统的建立主要利用Altera公司QuartusⅡ以及其集成的SoPC Builder完成的,关键在于如何用SoPC Builder将SD卡读写控制器添加到元件列表中。在SoPC Builder提供的图形化的界面下,添加控制器Verilog后,设置控制器中各信号在Avalon-MM总线中的信号类型等,图2即为添加好的SD卡读写控制器。
  图2中,各引脚的描述如下:
  base_clock:控制器输入时钟,该设计采用PLL产生的25MHz时钟信号;
  clk_to_SD:SD卡时钟信号输入;
  cmd_SD:SD卡命令,响应输入/输出信号;
  data_SD:SD卡数据信号。
  根据SD控制器的寄存器映射,在Nios IDE中编写C程序控制SD卡控制器进行读/写操作,下面代码为写SD卡的一段程序,读SD卡的的过程与其类似。
  读/写完一个扇区后,控制器会产生一个中断,此时即可进行下一次读/写操作。由于SD卡读/写有比较时序要求,命令、响应众多,在设计的初期,采用Modelsim做了各方面的功能仿真,功能仿真完成后采用QuartusⅡ自带的SignalTapⅡ来测试分析内部逻辑的工作状态,SignalTapⅡ使用简单方便,更重要的是可以实时观测内部信号变化,而且可以设置触发条件,大大提高了开发的效率。图3是用SignalTapⅡ逻辑捕捉到的波形。
  图3中,status_reg为状态寄存器,表明卡已处于就绪状态,control_reg为控制寄存器,H表明已经开始了一次对扇区0的写传输,mread的上升沿即开始了Master端口的读传输,这里的读指的是将内存中buf数组中的数据读入控制器,再由控制器写入SD卡中,wait为等待信号,高电平时无法进行数据传输,waitrequest无效后可以很明显地看到000000DFH由Master端口读入控制器,再由读写控制逻辑写入SD卡。
  6 结语
  该设计采用SoPC技术实现了SD卡读写控制器,通过NiosⅡ处理器控制实现了SD卡读/写。由于该控制器根据Avalon接口规范进行开发,可以很方便以IP核的形式集成到其他SoPC系统中,简单实现SD卡的读/写,大大降低了开发成本和难度。本文所设计的SD卡读写控制器还有一大优点就是具有Master端口,可以自主完成数据的读/写,无需CPU的干预,另外采用了中断,降低了响应延时,提高了读/写速率。该设计满足了大部分数据存储需求,适用于工业监测控制,一般消费类电子产品等。
关键字:&&&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
关注eeworld公众号快捷获取更多信息
关注eeworld服务号享受更多官方福利
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。使用Qsys快速创建ALTERA PCIe设计介绍 - daya984的博客 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
使用Qsys快速创建ALTERA PCIe设计介绍
热度 2已有 1464 次阅读 09:48
使用Qsys快速创建ALTERA PCIe设计介绍
从网上看到的,觉得很有用处,谢谢前辈!使用Qsys快速创建一个基于Avalon-MM流程的PCI-e设计,尽量通过手把手以step-by-step的方式展现使用Qsys进行关于pcie的Quartus II工程的创建过程。这里使用Qsys系统时候没有使用到任何软核或者硬核。
项目设计介绍
&&&&&&&& 这里以一个简单的pcie工程进行介绍,该pcie实例属于PCI Express endpoint,如图1所示为该端点在PCIe系统架构中的示意图。
图1:PCIe系统架构举例
我们的设计就是位于图1所示的“Custom Endpoint”位置,它的框图如图2所示,我们这里以Cyclone IV GX器件为例来进行实例演示,从图中我们可以看到该实例具体包含了以下一些模块:
&PCIE硬核,实现了协议层。提供了PCIe链路和连接到Qsys里元件之间所有互连,例化硬核的时候自动使用GXB模块。
&DMA模块,在片内存储器和PCIe硬核之间传输数据。DMA的控制端口被映射到了PCIe的存储器空间,因为它可以被PCIe根端口控制而用于建立和配置数据传输。
&片内RAM模块,用于存储从PCIe链路接收来的数据和需要通过该链路发送的数据。和DMA一样,片内RAM模块也被映射到了PCIe的存储空间,所以可以被PCIe系统访问。
&Qsys互连,Qsys工具用于将FPGA内元件连接在一起的逻辑,这样有利于数据和命令它们之间传输。
图2:Qsys PCIe端口框图
PCIe端点可以按照以下方式来使用:
从高速链路接收到PCIe写请求,然后将数据写入并保存到片内RAM中。
从高速链路接收到PCIe读请求,然后从片内RAM读出数据,并经PCIe链向请求方返回读出的数据。
从PCIe接收到DMA写或者读请求,然后DMA自动传输数据,数据传输结束后,DMA会向PCIe硬核触发一个中断请求。
注意上述DMA操作,只要启动,DMA可以从片内RAM读出数据并将其写入到PCIe硬核,PCIe将此操作转化为对系统其它地址空间的写请求。或者,DMA可以从PCIe硬核读数据,这个操作会被转化为向PCIe发送一个读请求,PCIe会返回数据和对应的完成包,这些数据被自动写入到片内RAM。
一步一步地完成设计
我们可以按照以下流程一步步地完成这个PCIe端点设计,首先第一步是创建Quartus II工程。
&&&&步骤一:创建Quartus II工程
1.& 从电脑的开始菜单里启动Quartus II软件。
2.& 从Quartus II软件的File菜单里选择“New Project Wizard”。
3.& 当“Introduction”页面出现时,点击下一步。
4.& 在新建工程的第一页,指定新建工程的路径、名称和顶层设计入口。
5.& 在“What is the name of this project”下输入“civgx_gen1x4_qsys_top”来指定设计的顶层设计入口,如图3所示。
图3:指定工程路径、名字以及设计顶层入口
6.& 点击“Next”进入第一页。
7.& 在第二页,即“Add Files”,可以点击 按钮找到存放源文件的目录,然后添加相应的源文件(由于一开始没有设计文件,也可以略过此步)。
a)&& 这里我们选择三个设
i. civgx_gen1x4_qsys_top.v
ii.&altgxb_rconfig.v
iii.&gpll.v
b)&& 点击“Open”加入这些设计文件到工程
8.& 同上一步,可以通过改变文件类型,我们可以给工程添加SDC文件。
9.& 点击“Next”进入第三页。
10.& 在第三页(Family & Device Settings),选择Cyclone IV GX
11.& 指定器件具体型号,按一下方式滤出需要的器件型号
a)&& 选择FBGA封装
b)&& 选择672引脚数
c)&& 速度等级选择6
12.& 最终选择EP4CGX50DF27C6,如图4所示。
图4:为工程指定具体FPGA型号
13.& 剩下使用默认设置,所以直接点击“Finish”完成工程创建
步骤二:启动Qsys工具
1.& 从Quartus II工具菜单下选择“Qsys”打开Qsys工具,或者直接在Quartus II工具栏里点击XX&按钮打开。这是Qsys工具开始打开并启动其初始化流程。
2.& 移除系统默认添加的clk_0元件,在System Contents下高亮选中“clk_0”然后点击XXX&按钮。此时,我们有了一个空的Qsys系统,本例,时钟将由PCIe硬核产生,所以时钟源元件在这里是不需要的。
3.& 从Qsys工具的File菜单下选择save as,在保存文件名设置为civgx_gen1x4_qsys,然后选择save。
步骤三:使用PCI Express IP Compiler加入PCIe硬核到系统
1.& 在Qsys工具里找到Component Library,展开里面的Interface Protocol,然后找到PCI并展开,最后高亮选择“IP Compiler for PCI Express”,如图5所示。
图5:添加PCIe硬核到系统
2.& 如图5所示,点击Add开始添加PCIe硬核到系统,并启动PCIe参数编辑界面。
此时我们会看到一个名为“pcie_hard_ip_0”的模块被添加到了系统,同时IP_Compiler for PCI Express的参数编辑也被立即打开。PCIe硬核的所有参数设置都在这页界面可以找到,如果就算你对于PCIe协议不是很熟悉也没有关系,以下我们会详细介绍如何配置PCIe硬核。这时候忽略系统给出的任何错误,因为当我们连接PCIe硬核IP到系统时,这些错误都将会解决。
3.& PCIe硬核通用配置,在PCIe参数编辑器里选择“System Settings”来进行与系统相关的设置,如图6所示。
a)&& 为“Lane”选择x4。
b)&& 为“Reference clock frequency”选择100MHz。
c)&& 为“Testout width”选择64bits。
d)&& 不勾选“Gen2 Lane Rate Mode”和“Enable 62.5MHz application clock”。
图6:PCIe相关系统设置
4.& 到“PCI Base Address Register(Type 0
Configuration Space)”区域安照图7所示,设置PCIe的基地址寄存器(BARs)。
a)&& 确认BAR0(第一行)设置为64 bit Prefetchable。
这时候BAR1显示为“1-Occupied”
b)&& 点击BAR2(第三行)的BAR Type区域,从下拉菜单里选择“32-bit Non-Prefechable”。
c)&& 保持BAR Size和Avalon Base Address区域为其默认值不变。
图7:设置PCIe端点的BAR
如图7所示,这些设置用于控制链路如何产生针对内部Avalon-MM地址空间的PCIe事务,当使用Qsys工具时,图中这些BARSize和Avalon基地址列在设备连接的时候添加。
5.& 为PCIe端点配置只读寄存器,在“Device Identification Register”框下按照图8所示,进行设置。
a)&& 为Vendor ID设置0x1172。
b)&& 为Device ID设置0xE001.
c)&& 为Revision ID设置0x01.
d)&& 为Class code设置0xFF0000.
e)&& 为Subsystem vendor ID设置0x1172.
f)&& 为Subsystem ID设置0x0004.
图8:设置设备ID寄存器
6.& “Link Capabilities”和“Error Reporting”保持默认设置。
7.& “Buffer Configuration”按照图9所示进行设置。
a)&& 最大载荷尺寸(Maximum Payload Size),从下拉框里选择256字节。
b)&& “Desired performance for
received requests”选择设置为“High”。
图9:缓冲器配置
8.& 到Avalon-MM Settings框下配置Avalon-MM接口,按照以下要求设置,设置的界面如图10所示。
a)&& 在“Peripheral Mode”下拉框下选择“Requester/Completer”。
b)&& 使能“Control Register Access(CRA) Avalon slave”端口选项。
c)&& 其它勾选项保持不使能状态。
图10:设置Avalon-MM接口
9.& 到“Address Translation”框下按照以下要求设置Avalon地址转换,设置好的界面如图11所示。
a)&& 为地址转换表配置选择动态转换表。
b)&& 地址页选择2.
c)&& 每页地址范围选择1MByte-20 bits。
图11:Avalon地址转换配置
这些设置控制Avalon-MM到PCI Express的地址转换,意味着Qsys系统内部的数据传输是如何转换为PCI Express的请求的。由于地址转换设置为动态转换,所以IP_Compiler for PCI Express编辑器的最后一项设置,即“Address Translation Table Contents”不需要编辑设置。
10.& 点击“Finish”关闭PCIe参数设置页面,返回到Qsys系统。
这样一个名为“pcie_hard_ip_0”的PCIe硬核已经加入到了Qsys系统,它共有20种不同的接口(其中许多为管道接口,conduits),我们需要根据如何使用该硬核来连接这些接口,后面我们会对这些接口进行连接,图12显示了这时候Qsys系统界面,我们看到在消息窗口显示了以下错误,这时候我们不用理会这些错误,后面我们会处理这些错误的。
图12:只加入PCIe硬核后Qsys系统界面
&&&&步骤4:添加剩下的设备到Qsys系统
接着我们把剩下的DMA和片内RAM添加到Qsys系统,来完成这个PCI Express端点设计。
在Qsys工具的设备库下找到Bridges,展开在其下面找到DMA并展开找到DMA控制器,如图13所示。
图13:在Qsys工具元件库里找到DMA控制器
2.& 点击Add按钮开始添加DMA控制器,并打开DMA控制器的参数设置界面。
和之前添加PCIe硬核类似,这时候我们可以看到一个名字叫“dma_0”的设备已经被自动添加到了Qsys系统,同时一个参数编辑界面展现在我们面前,并允许我们对此DMA控制进行参数配置。
3.& 按照如下要求对DMA控制进行配置,配置好的界面如图14所示(Advanced保持默认设置即可)。
a)&& 为DMA的长度寄存器选择位宽为13 bits,该参数定义了我们启动DMA传输的最大数据尺寸,也即8191 (213&– 1)。
b)&& 在突发事务下选择使能突发传输,该参数允许DMA使用Avalon-MM的突发处理机制来提供系统性能。
c)&& 设置突发尺寸为128个字。
图14:配置DMA控制
4.& 点击完成按钮关闭DMA控制器参数设置编辑界面。
这样添加到Qsys的名为dma_0的DMA控制器已经配置完成,它有两个Avalon master接口来分别启动系统内的读和写传输,还有一个名为control_port_slave的Avalon salve接口,该接口用户对DMA的编程配置,一个名为clk的时钟输入接口和一个名为reset的复位输入接口。
5.& 在Qsys工具的设备库下找到存储器和存储控制器,展开其下面的On-Chip,然后找到并高亮选择On-Chip Memory(RAM or ROM),如图15所示。
图15:添加On-Chip Memory到Qsys系统
6.& 点击Add按钮,开始添加On-Chip Memory到Qsys并打开其参数编辑界面。
7.& 按照如下要求配置片内存储器:(配置好的界面如图16所示)
a)&& 在存储器类型选项下选择RAM(Writable)。
b)&& 在Block类型下选择Auto。这样设置让编译器自己为这个片内存储器自动选择片内RAM类型,因为大部分器件内部都有多种片内RAM块类型。
c)&& 数据宽度选择64,这是因为PCIe硬核使用了64-bit数据总线。
d)&& 为其配置总的存储尺寸为4096字节,这样就在系统内部创建一个512x64的RAM来用于存储传输的数据。
e)&& 去使能掉初始化存储器内容选项。存储器的内容在系统操作期间将总是处于可写状态。
图16:配置On-Chip 存储器
8.& 点击完成按钮关闭并完成片内RAM配置界面。
9.& 按照以上规律,为该片内RAM重命名为onchip_memory_0。
RAM块只有一个Avalon salve接口用于访问其内部地址空间,同时只有一个时钟和复位输入接口。这时候我们可以看到Qsys系统如图17所示。
图17:所有设备添加完毕后的Qsys
步骤5:将设备连接起来
下面我们开始在图17所示System Contents下的“connections”列内完成各个设备之间的连接。
& & 1.将PCIe的输出时钟pcie_core_clk连接到片内RAM的clk1端口,如图18所示。
图18:连接PCIe的输出时钟到RAM时钟输入端口
2.& 按照下表所示完成剩下的设备连接。
元件(设备)
元件(设备)
pcie_hard_ip_0
pcie_core_clk
pcie_hard_ip_0
pcie_core_reset
on-chip_memory_0
pcie_hard_ip_0
pcie_core_reset
pcie_hard_ip_0
on-chip_memory_0
pcie_hard_ip_0
control_port_slave
pcie_hard_ip_0
pcie_hard_ip_0
read_master
on-chip_memory_0
read_master
pcie_hard_ip_0
write_master
on-chip_memory_0
write_master
pcie_hard_ip_0
& &当按照表1所示完成连接后,Qsys系统如图19所示。这将显示系统的时钟和复位信号都是来源于PCIe硬核模块。针对BAR1:0的PCIe事务将直接转换为对片内RAM元件的操作,而针对BAR2的PCIe事务将直接转换为针对DMA控制器或者片内RAM的操作,这取决于该事务的地址偏移。DMA控制的两个master接口能在片内RAM和PCIe链路之间传输数据,可以通过PCIe硬核的发送(TXs)接口访问PCIe链路。
作者的其他最新博客
评论 ( 个评论)
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司}

我要回帖

更多关于 nginx端口转发配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信