QsysLabPCIeFINALCN.docx
《QsysLabPCIeFINALCN.docx》由会员分享,可在线阅读,更多相关《QsysLabPCIeFINALCN.docx(17页珍藏版)》请在冰豆网上搜索。
QsysLabPCIeFINALCN
PCIeQsys研讨
这一设计实例深入浅出,介绍怎样产生一个Qsys子系统。
您将产生一个含有以下组成的Qsys系统:
∙在CycloneIVGX收发器入门套件上,设计带嵌入式收发器的Gen1×1硬核IP的PCIExpressIP编译器。
∙片内RAM存储器
∙模块化散射收集DMA控制器(MSGDMA)(位于lib路径中)
图1显示了Qsys怎样集成PCIExpress的IP编译器、片内SRAM,以及定制组件MSGDMA。
这一设计实例使用了一个DMA,这个DMA在片内存储器SRAM,和位于根复合模块(主机)侧的系统缓冲之间进行数据传送。
图1.Qsys生成的端点
此次研讨对以下步骤进行了讲解:
1.对设计进行准备,以进行编译
2.建立一个QuartusII工程
3.建立一个Qsys系统
4.对PCIExpress的IP编译器进行参数赋值
5.将其他组件加入Qsys系统中
6.完成Qsys中的链接
7.设定导出接口
8.设定地址分配
9.生成Qsys系统
10.编译设计
11.对器件编程
对设计进行准备,以进行编译
设计准备进行编译时,请按照以下步骤进行:
1.如果您没有看到C:
\\Qsys_workshop\PCIe_Lab路径含有表1中列出的以下文件夹和文件,请联系您的指导人员。
表1:
位于PCIe_Lab路径中的文件
名称
说明
ip文件夹
含有模块化散射收集DMA文件(msgdma)
msgdma_ctl.qsys文件
定制MSGDMA子系统。
该系统包括一个调度器、一个DMA读控制器以及一个DMA写控制器。
top.v文件
顶层打包器例化以下模块:
∙Alteraaltgx_reconfig宏功能,配置收发器。
∙Alterareconfig_pll宏功能,支持收发器的动态重新配置。
∙散射收集DMA子系统
top.sdc文件
时序约束文件
top.tcl文件
Tcl脚本,设置编译参数和引脚分配。
altgx_reconfig.v文件
重新配置控制器,用于收发器。
reconfig_pll.v文件
通用PLL,生成fixedclk。
建立一个QuartusII工程
1.在QuartusII软件中,在File菜单上,点击NewProjectWizard。
2.在Introduction页面的NewProjectWizard窗口中,点击Next。
3.在Directory,Name,TopLevelEntity页面中,输入以下信息(参见图2),点击Next。
图2.新工程向导
4.在AddFiles页面中,点击Next。
5.在Family&DeviceSettings页面中,对于器件系列,选择CycloneIVGX,点击Next。
6.在EDAToolSettings页面中,使用默认设置,点击Next。
7.在Summary页面中,点击Finish。
NewProjectWizard建立一个基本工程,top。
这一基本工程仍然没有引脚分配、综合约束、器件类型以及其他必须的设置。
这些参数设置在Tcl脚本中进行设定,您可以在编译设计一节将其应用到工程中。
建立Qsys系统
在这一节中,您构建一个Qsys系统,它包括PCIExpress的Gen1x1硬核IP编译器、msgdma_ctl子系统、以及片内SRAM。
打包器文件top.v例化剩余所需的模块,包括,altgxb_reconfig和GPLL模块,它们支持器件收发器中的失调抵消功能。
打包器文件要求您命名Qsys系统c4gx_qsys。
如果您以不同的名称命名它,那么,您的设计无法成功编译。
请按照这些步骤来建立您的Qsys系统:
1.在QuartusII软件中,在Tools菜单上,点击Qsys。
出现Qsys,显示一个Open窗口。
2.在Open窗口中,点击Cancel。
您希望建立一个新的Qsys系统,而不是打开一个已有窗口。
3.在左侧的ComponentLibrary面板(参见图3)中,在Project下面,确定您看到了Modular_DMA和System。
图3.Qsys组件库
注释:
已经为您提供了定制模块化散射收集DMA子系统。
这一SGDMA子系统名为msgdma_ctl,是含有其他三个组件的Qsys系统,包括,调度器、读主机和写主机。
4.建立全局设置时,点击ProjectSettings标签,输入表2中列出的数值。
表2.工程设置
参数
数值
DeviceFamily
CycloneIVGX
ClockCrossingAdapterType
Handshake
Limitinterconnectpipelinestagesto
4
GenerationID
0
4.在File菜单中,点击SaveAs,在Filename中,输入c4gx_qsys。
5.点击Save。
6.点击SystemContents标签,高亮显示clk_0组件,点击SystemContents标签左侧的红色X(
)按钮,从Qsys系统中去掉默认时钟clk_0。
您同步设计中的所有模块使用PCIExpress内核时钟。
7.在您的系统中加入PCIExpress的IP编译器时,在左侧的ComponentLibrary面板中,在InterfaceProtocols文件夹的PCI下面,双击IP_CompilerforPCIExpress组件。
(或者,您可以在搜索框中输入PCI,找到组件)
对PCIExpress的IP编译器进行参数赋值
PCIExpress的IP编译器参数编辑器中的粗体标题将参数列表分成几部分。
您可以使用右侧的滚动条,查看一开始没有显示出来的参数。
对PCIExpress的IP编译器进行参数赋值时,请按照这些步骤进行:
1.在SystemSettings标题下,请参照图4输入设置。
图4.系统设置
2.在PCIBaseAddressRegisters(Type0ConfigurationSpace)标题下,设定图5中的设置。
图5.PCI基本地址寄存器(0类配置空间)
您不能在PCIExpress的IP编译器参数编辑器中输入BarSize或者AvalonBaseAddress(Avalon基地址)。
您在系统中加入了所有组件后,可以在SystemContents标签中进行基本地址分配。
在这一步,您完全可以忽略PCIExpress的IP编译器参数编辑器中出现的错误消息。
3.在DeviceIdentificationRegisters标题下,设定图6中的数值。
配置好器件后,软件可以从这些只读寄存器中读取您在参数编辑器中设定的数值。
这些数值必须设置为下面的数值,该设计才能与PCIe演示驱动匹配。
图6.器件标识寄存器
4.在LinkCapabilities标题下,保留Linkportnumber的默认值1。
5.在ErrorReporting标题下,所有类型的错误报告均为off。
6.在BufferConfiguration标题下,设定图7中的设置。
图7.缓冲配置设置
Postedheadercredit、Posteddatacredit、Non-postedheadercredit、Completionheadercredit和Completiondatacredit显示的数值是只读的。
基于Maximumpayloadsize和RXbuffercreditallocation–performanceforreceivedrequests的数值来计算这些数值。
7.在Avalon-MMSettings标题下,默认设置应如图8所示。
图8.Avalon-MM设置
8.在AddressTranslation标题下,设定图9中的设置。
图9.地址翻译设置
9.忽略AddressTranslationTableContents。
10.点击Finish,在您的Qsys系统中加入PCIExpress的IP编译器组件pcie_hard_ip_0。
在这一阶段,您可以忽略Qsys产生的所有错误消息,这是因为您的系统还没有最终完成。
这些错误是由于基地址重叠和未连接时钟造成的。
将其他组件加入Qsys系统中
这一节介绍在您的Qsys系统中加入MSGDMA控制器和片内存储器。
1.在您的系统中加入MSGDMA控制器组件。
在Componentlibrary面板中,在System文件夹下面,双击msgdma_ctl组件。
2.点击Finish,在您的Qsys系统中加入MSGDMA控制器模块ctl_0。
在SystemContent标签中,右键点击例化ctl_0,并将其重新命名为dma_0。
3.在您的系统中增加片内存储器时,在组件库标签中,在On-Chip文件夹的MemoriesandMemoryControllers下,双击On-ChipMemory(RAMorROM)组件。
4.在On-ChipMemory参数编辑器中,设定图10中列出的参数。
图10.片内存储器参数
6.点击Finish,在您的Qsys系统中加入片内存储器组件。
7.对片内存储器组件重新命名时,在SystemContents中右键点击组件,选择Rename。
输入新名称onchip_memory_0。
在Qsys中进行连接(参考)
在Qsys中进行连接时,鼠标右键点击相应的接口,从界面中Connections下拉列表选中相应连接,如图11所示。
这是最快的方法,也是推荐的方法。
注释:
您可以在SystemContents标签中选择点击白点,进行连接,如图12高亮所示。
以黑点显示连接。
图11.使用鼠标右键点击菜单的连接接口实例
图12.在Connections面板中点击白点连接接口实例
完成Qsys中的链接
请按照这些步骤完成您的Qsys系统:
1.在export列中,点击clk和reset,点击键盘上的delete按键,去掉dma_0(msgdma_ctl)的默认导出时钟和复位接口。
2.通过以下过程,连接pcie_hard_ip_0bar1_0的Avalon-MM主机端口和onchip_memory_0s1的Avalon-MM从机端口:
a.右键点击bar1_0端口,然后,悬停在pcie_hard_ip_0.bar1_0Connections上,显示可能的链接。
b.点击onchip_memory_0.s1,建立一个链接。
3.重复第2步,完成表3中列出的剩余链接。
表3.Qsys连接的完整列表
链接来自:
至:
pcie_hard_ip_0pcie_core_clk
onchip_memory_0.clk1
pcie_hard_ip_0pcie_core_clk
dma_0.clk
pcie_hard_ip_0pcie_core_reset
onchip_memory_0.reset1
pcie_hard_ip_0pcie_core_reset
dma_0.reset
pcie_hard_ip_0bar1_0
onchip_memory_0.s1
pcie_hard_ip_0bar2
dma_0.modular_sgdma_dispatcher_0_csr
pcie_hard_ip_0bar2
dma_0.modular_sgdma_dispatcher_0_descriptor_Slave
pcie_hard_ip_0bar2
pcie_hard_ip_0.cra
dma_0dma_read_master_0_data_read_master
onchip_memory_0.s1
dma_0dma_read_master_0_data_read_master
pcie_hard_ip_0.txs
dma_0dma_write_master_0_data_write_master
onchip_memory_0.s1
dma_0dma_write_master_0_data_write_master
pcie_hard_ip_0.txs
4.在SystemContent标签右侧的IRQ列(您可能需要滚动到右侧)中,点击连接从dma_0的IRQ(modular_sgdma_dispatcher_0_csr)到pcie_hard_ip_0的IRQ,并输入0,如图13中所示。
在这一例子中,DMA控制器的中断发送信号连接至PCIExpress的IP编译器的比特0。
图13.在Connections标签中设置IRQ
设定导出接口
您需要导出剩余的I/O信号,在Qsys系统之外也可以见到这些信号。
每一个导出的接口都可以连接至Qsys系统之外的模块。
请按照这些步骤来导出一个接口:
1.在您希望导出的接口行中,在Export列中点击cell。
2.点击Enter,接受Export列中出现的默认名称(或者点击单元格的外部,不修改文本)。
导出表4中列出的pcie_hard_ip_0接口。
表4.pcie_hard_ip_0导出接口
接口名称
导出名称
cal_blk_clk
pcie_hard_ip_0_cal_blk_clk
Refclk
pcie_hard_ip_0_refclk
test_in
pcie_hard_ip_0_test_in
pcie_rstn
pcie_hard_ip_0_pcie_rstn
clocks_sim
pcie_hard_ip_0_clocks_sim
reconfig_busy
pcie_hard_ip_0_reconfig_busy
pipe_ext
pcie_hard_ip_0_pipe_ext
test_out
pcie_hard_ip_0_test_out
rx_in
pcie_hard_ip_0_rx_in
tx_out
pcie_hard_ip_0_tx_out
reconfig_togxb
pcie_hard_ip_0_reconfig_togxb
reconfig_gxbclk
pcie_hard_ip_0_reconfig_gxbclk
reconfig_fromgxb_0
pcie_hard_ip_0_reconfig_fromgxb_0
fixedclk
pcie_hard_ip_0_fixedclk
设定地址分配
Qsys需要您设定Qsys系统中所有Avalon-MM从机接口的基地址。
为确保设计实例能够成功对接于演示驱动器,您应该手动分配合适的基地址,如表5所示。
1.双击Base列中的基地址,输入所需的基本数值。
表5.Avalon-MM从机接口的基地址分配
模块名称
基地址
pcie_hard_ip_0txs
0x00000000
pcie_hard_ip_0cra
0x00000000
dma_0modular_sgdma_dispatcher_0_csr
dma_0modular_sgdma_dispatcher_0_descriptor_slave
0x06000000
0x06000020
onchip_memory_0s1
0x07000000
在Messages标签中,重叠地址范围的Qsys错误消息将会消失。
图14显示您分配了基地址后Qsys系统的AddressMap标签。
图14.Qsys系统地址映射
注释:
这一步之后,Qsys消息窗口中不应再出现错误消息。
图15显示了完整的Qsys系统。
图15.完整的PCIExpressQsys系统
生成Qsys系统
请按照这些步骤生成Qsys系统:
1.点击Generation标签。
2.保持默认设置。
它们应如下显示。
图16.Generation标签
3.点击标签底部的Generate按钮,当Savechanges对话框出现时,点击Save。
4.生成完成后,在GenerateCompleted对话框中,点击Close。
编译设计
请按照这些步骤来编译您的设计:
1.在QuartusII软件中,在Tools菜单上,点击TclScripts…
2.在TCLScripts窗口中,浏览并高亮显示top.tcl。
3.高亮显示top.tcl后,点击Run,执行脚本。
注释:
tcl文件含有目标CIVGX器件、引脚分配以及其他设置。
4.在Processing菜单中,点击StartCompilation来编译项目。
5.完成编译后,在QuartusII对话框中,点击OK。
祝贺,您已经在Qsys完成了PCIe设计。
附录A:
PCIe接口名称和说明
简称
说明
PCIeCRA
PCIExpress中的控制寄存器访问模块。
PCIeTXS
发送从机接口,应用层可以向主机发送存储器读或者写申请。
PCIeBar0_1/bar2
PCIe基地址寄存器,主机利用它来访问内核内部寄存器或者存储器。
PCIeRXM
PCIe主机接口,接收主机申请或者向主机返回读数据。
DMACSR
DMA控制状态寄存器
DMADescriptor
DMA输入包括控制、源和目的地址寄存器。
DMADispatcher
DMA主控制器,发出DMA读和DMA写申请。