定制AVALON外设参考.docx
- 文档编号:2342709
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:22
- 大小:745.65KB
定制AVALON外设参考.docx
《定制AVALON外设参考.docx》由会员分享,可在线阅读,更多相关《定制AVALON外设参考.docx(22页珍藏版)》请在冰点文库上搜索。
定制AVALON外设参考
本节讲述开发一个定制的SOPCBuilder元件的设计流程,从创建定制外设、集成外设到系统中,最后将其下载到硬件。
讲述定制外设的开发流程之后,以Altera公司提供的一个设计实例作为练习。
该实例展示了开发一个只具有Avalon从接口的外设。
用户使用Altera提供的HDL设计,将其打包到成一个SOPCBuilder元件,然后在系统中例化它。
然后将工程编译下载到开发板上。
最后介绍怎样共享用户定制外设,这样用户设计的外设可以为其它的系统和设计者使用。
SOPCBuilder提供元件编辑器使用户可以创建和编辑自己的SOPCBuilder元件。
∙典型地,一个元件有下面的部分构成:
∙硬件文件:
描述元件硬件的HDL模块。
∙软件文件:
定义元件寄存器映射的C语言的头文件,元件的驱动程序。
元件描述文件(class.ptf):
定义元件的结构,提供给SOPCBuilder将该元件集成到系统中必要的信息。
元件编辑器根据用户提供的软件和硬件文件以及用户在元件编辑器的图形用户界面指定的参数自动产生这个文件。
在创建完描述元件的硬件和软件文件之后,用户使用元件编辑器将这些文件打包成一个SOPCBuilder元件。
如果用户更新了硬件或软件文件,用户还可以使用元件编辑器对这个元件进行再次的编辑。
8.2.1元件开发流程
本节介绍元件开发流程,包括硬件和软件两方面,这里介绍只有一个Avalon从接口的元件设计流程,而其设计流程的步骤可以很容易地推广到具有主端口的元件或者多个主端口和从端口的元件。
从外设的典型的设计顺序包括如下的步骤:
1.指定硬件功能。
2.如果微处理器要控制该元件,指定访问和控制该硬件的应用程序接口(API)。
3.根据硬件和软件的要求,定义一个Avalon接口,该接口要提供:
a.正确的控制机制。
b.足够的吞吐量性能。
4.采用Verilog或者VHDL编写硬件设计。
.
5.单独测试元件的硬件,验证操作的正确性。
6.编写C头文件,为软件定义硬件层次的寄存器映射。
7.使用元件编辑器将硬件和软件文件打包成一个元件。
8.例化元件为一个SOPCBuilder系统的模块。
9.使用NiosII处理器来测试对元件的寄存器级的访问,用户可以执行硬件的测试,或者是进行HDL仿真。
10.如果微处理器要控制该元件,编写元件的驱动程序。
11.根据元件的在系统的行为,反复改进元件的设计:
a.硬件的改进和调整。
b.软件的改进和调整。
c.使用元件编辑器更新元件。
12.编译完整的含有一个或多个该元件的SOPCBuilder系统。
13.执行系统级的验证,如果必要进行进一步的反复改进。
14.完成元件的设计,发布该元件,其他设计者可以重用该元件。
主外设的设计的过程与之类似,只是软件开发方面有所差异。
8.2.2硬件设计
同任何的逻辑设计过程一样,SOPCBuilder元件的硬件开发在需求分析阶段之后开始。
当用户根据需求说明编写和验证HDL逻辑时,其过程是一个迭代的过程。
典型元件的结构包括下面的功能模块:
∙任务逻辑(TaskLogic)——任务逻辑实现元件基本的功能。
任务逻辑是和设计相关的。
∙寄存器文件(RegisterFile)——寄存器文件为任务逻辑内部的信号同外部通信提供了一条通路,反之亦然。
寄存器文件映射内部的节点为可寻址的地址偏移量,Avalon接口可对其进行读写访问。
∙Avalon接口——Avalon接口提供标准的寄存器文件的Avalon前端。
接口可以使用任意的Avalon信号类型,以访问寄存器文件和支持任务逻辑所需要的传输。
下面的因素影响Avalon接口:
要传输的数据宽度是多少?
数据传输需要的吞吐量的要求是多少?
该接口主要是为了控制还是数据?
即传输是零星的,还是连续的突发传输?
硬件相对系统中其它的元件是快速还是低速元件?
图8-16为一个具有一个Avalon从端口的典型元件的原理图。
8.2.3软件设计
如果用户想要微处理器来控制用户的元件,用户则必须提供软件文件,软件文件定义了该元件的软件视图。
在最小化的软件设计中,用户必须定义每个从端口的寄存器映射,以便处理器可以访问。
元件编辑器允许用户将C语言的头文件和元件打包在一起以定义硬件的软
件视图。
典型情况下,头文件声明读和写元件寄存器的宏函数,寄存器的地址相对于分配给元件的符号化的基地址。
下面的例子是从Altera提供的用于NiosII处理器的UART元件的寄存器映射摘录的一部分。
例:
元件的寄存器映射
#include
#defineIOADDR_ALTERA_AVALON_TIMER_STATUS(base)__IO_CALC_ADDRESS_NATIVE(base,0)
#defineIORD_ALTERA_AVALON_TIMER_STATUS(base)IORD(base,0)
#defineIOWR_ALTERA_AVALON_TIMER_STATUS(base,data)IOWR(base,0,data)
#defineALTERA_AVALON_TIMER_STATUS_TO_MSK(0x1)
#defineALTERA_AVALON_TIMER_STATUS_TO_OFST(0)
#defineALTERA_AVALON_TIMER_STATUS_RUN_MSK(0x2)
#defineALTERA_AVALON_TIMER_STATUS_RUN_OFST
(1)
#defineIOADDR_ALTERA_AVALON_TIMER_CONTROL(base)__IO_CALC_ADDRESS_NATIVE(base,1)
#defineIORD_ALTERA_AVALON_TIMER_CONTROL(base)IORD(base,1)
#defineIOWR_ALTERA_AVALON_TIMER_CONTROL(base,data)IOWR(base,1,data)
#defineALTERA_AVALON_TIMER_CONTROL_ITO_MSK(0x1)
#defineALTERA_AVALON_TIMER_CONTROL_ITO_OFST(0)
#defineALTERA_AVALON_TIMER_CONTROL_CONT_MSK(0x2)
#defineALTERA_AVALON_TIMER_CONTROL_CONT_OFST
(1)
#defineALTERA_AVALON_TIMER_CONTROL_START_MSK(0x4)
#defineALTERA_AVALON_TIMER_CONTROL_START_OFST
(2)
#defineALTERA_AVALON_TIMER_CONTROL_STOP_MSK(0x8)
#defineALTERA_AVALON_TIMER_CONTROL_STOP_OFST(3)
软件驱动程序抽象了元件的硬件细节,所以软件可以在一个高的层次上访问元件。
驱动函数,提供给软件访问硬件的API。
软件的要求根据元件的需要而有不同。
最普遍的函数类型初始化硬件、读数据和写数据。
驱动程序和目标处理器是相关的,元件编辑器允许用户方便地打包软件驱动程序到
HAL,NiosII处理器开发工具将使用HAL。
提供驱动程序给其它的处理器,用户必须满足目标处理器的开发工具的需要。
为NiosIIHAL编写驱动程序的更多信息,参阅NiosIISoftwareDeveloper'sHandbook。
查看Altera提供的元件的软件文件也是很有帮助的。
NiosII开发包提供很多元件,用户可以用作参考。
路径为
8.2.4验证元件
当用户完成越来越多的设计,用户可以以增量方式验证元件。
通常,用户首先以一个单元来验证硬件逻辑(这可能包括很多小的验证阶段),然后在系统中验证元件。
单元验证
单独测试任务逻辑模块,用户使用喜欢的验证方法,如行为级或寄存器传输级(RTL)的仿真工具。
类似地,用户使用自己擅长的验证工具来验证所有的元件逻辑,包括寄存器文件和Avalon接口。
在使用元件编辑器将HDL文件打包成一个元件之后,NiosII开发包提供一个易用的方法来仿真元件的读和写的操作。
使用NiosII处理器的强大的仿真环境,用户可以编写C代码让NiosII处理器向用户的元件发起读写传输。
结果可以在ModelSim仿真器或是硬件上看到,如Nios开发板。
读者可以参阅AN351:
SimulatingNiosIIEmbeddedProcessorDesigns获取更多的信息。
系统级的验证
当用户将HDL文件打包成一个元件之后,用户可以在系统中例化该元件,并且验证整个系统模块的功能。
SOPCBuilder对RTL仿真器系统级的验证提供支持,如ModelSim。
当SOPCBuilder为系统级验证产生一个测试平台,仿真环境性能主要取决于系统中包含的元件。
8.2.5设计实例:
脉宽调制器从外设
本节介绍脉冲宽度调制器(PWM)的设计实例,来介绍在系统中创建和例化元件的步骤。
该元件只有一个Avalon从端口。
下面将介绍如下的步骤:
∙安装设计文件。
∙查看设计实例的说明。
∙将设计文件打包成一个SOPCBuilder元件。
∙在硬件上例化元件。
∙在QuartusII中编译硬件设计,然后下载设计到目标板上。
∙使用NiosII软件测试硬件。
1.安装设计文件
首先安装NiosII开发工具,并且从Altera网站下载PWM设计实例。
本节中使用的硬件设计是基于NiosII开发工具包中的standard硬件设计实例。
当安装设计文件时,不要在目录名中使用空格。
如果路径包含有空格,SOPCBuilder可能不能访问设计文件。
建立设计环境要做如下的工作:
1.解压PWM压缩文件到一个目录。
本节用
2.在用户的本地计算机文件系统中,进入目录:
每个开发板都有VHDL和Verilog版本的设计。
3.拷贝standard目录到一个新的位置。
这样可以避免,破坏原始的设计。
本节通过
2.查看设计的说明
本部分讨论PWM设计实例的设计说明,会给出如下主题的细节:
∙PWM设计文件。
∙功能说明。
∙PWM任务逻辑。
∙寄存器文件。
∙Avalon接口。
∙软件API。
典型的设计流程中,是由设计者来制定元件的行为。
PWM设计文件
表8-4列出了
功能说明
PWM元件输出调制占空比的方波,基本的脉宽波形如图8-17。
本例中的PWM的功能有如下的要求:
∙任务逻辑按照一个单时钟同步工作。
∙任务逻辑使用32位的计数器提供PWM周期和占空周比的一个合适的范围。
主处理器负责设置PWM周期和占空比的值。
这就需要对控制逻辑有一个读/写接口。
∙寄存器单元来保存PWM周期和占空比。
∙主处理器可以使用使能控制位来停止PWM的输出。
PWM任务逻辑
∙PWM的任务逻辑具有如下的特征:
∙PWM任务逻辑包含一个输入时钟(clk),一个输出信号(pwm_out),一个使能位,一个32bit的模n的计数器,一个32位的比较器。
∙clk驱动32位的模n计数器建立pwm_out信号的周期。
∙比较器比较模n计数器的当前值与占空比来决定pwm_out的输出。
∙当计数器的当前值小于或等于占空比的值,pwm_out输出逻辑0;否则输出逻辑1。
图8-18给出了PWM任务逻辑的结构
寄存器文件提供对使能位、模n的值和占空比的值的访问。
如图8-18。
设计将每个寄存器映射到一个Avalon从端口地址空间中唯一的偏移地址。
每个寄存器具有读和写访问,这意味着软件可以读取之前写入寄存器中的值。
这种选择是以牺牲硬件资源为代价来获得软件上的便利。
用户也可以设计寄存器为只是可写的,这会节省片上的逻辑资源,但是软件就不能读取寄存器的值。
表8-5给出了寄存器文件和偏移量映射。
为了支持3个寄存器,要求两位的地址编码。
这将导致第四个寄存器为保留。
要读写寄存器只需要一个时钟周期,这影响Avalon接口的等待周期。
Avalon接口
PWM元件的Avalon接口需要一个从端口,使用了Avalon信号中的一个小的信号集合来处理寄存器的读和写的传输。
元件的Avalon从端口具有如下的特性:
∙PWM从端口是与Avalon从端口时钟同步的。
∙PWM的从端口是可读和可写的。
∙PWM从端口的读写传输具有零等待周期,因为寄存器能够在一个时钟周期内相应传输。
∙PWM的从端口读写传输没有建立时间和保持时间的要求。
∙PWM从端口没有读延迟的要求,因为所有的传输可以在一个时钟周期内完成。
∙PWM从端口使用本地地址对齐方式,因为从端口是连接到寄存器而不是存储设备。
表8-6列出了实现传输属性需要的信号类型,也列出了在HDL文件中定义的信号名
软件API
PWM设计实例提供定义寄存器映射的头文件和PWM在NiosII处理器系统中的驱动程序。
表8-4列出了这些文件,表8-7给出了驱动函数。
3.打包设计文件为SOPCBuilder元件
这部分,用户使用SOPCBuilder元件编辑器将设计文件打包成一个SOPCBuilder元件。
用户要执行如下的操作:
(一)打开QuartusII工程,启动元件编辑器。
(二)配置元件编辑器每个页面的设置。
(三)保存元件。
(一)打开QuartusII工程,启动元件编辑器。
执行如下的步骤:
1.启动QuartusII软件。
2.打开
3.选择Tools菜单中的SOPCBuilder。
出现SOPCBuilder图形用户界面,显示一个现成的包含一个NiosII处理器和一些元件的设计实例。
4.在File菜单中选择NewComponent。
元件编辑器的图形用户界面出现,显示的是Introduction页,如图8-19。
在Introduction页面中,介绍了元件编辑器的工具,创建元件需要的文件,将元件用于其它工程的方法,以及获得元件编辑器更多细节的方法。
(二)配置元件编辑器每个页面的设置。
a.HDL文件页面
这部分是将HDL文件同元件联系起来。
执行下面的步骤:
1.在图8-19中点击HDLFiles页,出现图8-20的页面。
元件编辑器的每个页面上都提供在屏幕的信息,介绍怎样使用每一个页面。
点击页面左上角的三角形来查看使用指导。
2.点击AddHDLFile。
3.切换到
三个Verilog的HDL文件存放这个目录。
4.选中这三个HDL文件,点击Open。
返回HDLFiles页。
元件编辑器立即分析每一个文件,从每个文件读取I/O信号和参数信息。
5.确保所有文件的Simulation和Synthesis复选框都已被选中,如图8-21。
这表示每个文件都适于仿真和综合的设计流程。
6.选择pwm_avalon_interfave.v:
pwm_avalon_interface在TopLevelModule下拉框中,来指定顶层模块,如图8-21。
此时,元件编辑器图形用户界面会显示错误消息,暂时忽略这些信息,后面的步骤会解决这些问题。
b.信号页面
对于顶层HDL模块中的每个I/O信号,用户必须将其信号名映射到一个有效的Avalon信号类型。
这些工作在Signals页中进行。
元件编辑器自动填写其在顶层HDL文件中发现的信号信息。
如果一个信号名同Avalon信号类型同名(如write或address),则元件编辑器自动分配信号的类型。
如果元件编辑器不能判断信号类型,则将信号分配成export类型。
执行如下的步骤进行元件I/O信号的定义:
1.点击Signals页,顶层HDL模块pwm_avalon_interface中的所有I/O信号自动出现。
2.如图8–22所示来分配所有信号的类型。
要改变某个值,点击SignalType单元格,显示一个下拉列表,选择一个新的信号类型。
在图8-22中,将pwm_out信号分配为export类型,因为它不是Avalon信号。
它是SOPCBuilder系统的一个输出信号。
当正确地分配每个信号类型之后,错误信息就应该消失了。
c.接口页面
接口页使用能够户配置元件上所有的Avalon接口的属性。
PWM元件只有一个Avalon接口。
执行下面的步骤进行Avalon从端口的配置:
1.点击Interfaces页tab。
元件编辑器显示一个默认的Avalon从端口,该端口是元件编辑器基于元件设计的顶层I/O信号创建的。
2.在Name域中键入control_slave重命名该从端口,当用在SOPCBuilder中户例化该元件时,该端口名出现在SOPCBuilder图形用户界面中。
3.如表8-8所示修改control_slave接口的设置。
图8-23给出了正确的设置的Interfaces页。
d.软件文件页
SWFiles页使用户将软件文件同元件联系起来,并指定它们的使用方法。
PWM设计实
例提供了定义寄存器映射的头文件和驱动程序。
执行下面的步骤将软件文件引入到元件中:
1.点击SWFiles页。
2.点击AddSWFile,出现打开对话框。
3.切换到
4.选择altera_avalon_pwm_regs.h文件,点击Open。
5.点击altera_avalon_pwm_regs.h的Type单元格,改变文件类型。
下拉列表中,选择Registers(inc/)。
6.重复2~5的步骤,添加
7.重复2~5的步骤,添加
图8–24显示了SWFiles页的正确的设置。
e.元件向导页
元件向导页允许用户控制在SOPCBuilder例化元件时,添加向导的样式。
执行下面的步骤配置元件向导的样式:
1.点击ComponentWizard页。
2.对于本例,不改变元件名,元件版本和元件组的默认值。
3.在Parameters栏中,在clock_divide_reg_init的Tooltip单元格键入:
InitialPWMPeriodAfterReset。
4.在clock_cycle_reg_init的Tooltip单元格中键入:
InitialDutyCycleAfterReset。
如图8-25
5.点击PreviewtheWizard预览元件SOPCBuilder例化时的元件向导的样式,如图8-26所示。
6.关闭预览窗口。
(三)保存元件
执行下面的步骤保存元件,并且退出元件编辑器:
1.在图8-25中点击Finish,出现对话框,提示为元件创建文件,如图8-27。
2.点击Yes保存文件。
元件编辑器保存这些文件到
元件编辑器关闭,返回SOPCBuilder图形用户界面。
3.在Unkown组中可用的元件列表中找到pwm_avalon_interface新元件。
用户可以在SOPCBuilder系统中例化该元件。
4.例化元件
此时,新的元件已经可以在SOPCBuilder系统中例化了。
元件的使用是和设计相关的,是基于系统的需要的。
剩下的步骤演示例化和测试元件的一种可能的方法。
然而,该元件在系统中使用方法数目是没有限制的这部分用户将添加新的PWM元件到系统中,重新编译硬件设计,重新配置FPGA。
包括如下的步骤:
1.添加一个PWM硬件到SOPCBuilder系统,重新生成系统。
2.修改QuartusII设计,连接PWM输出到FPGA的一个引脚。
3.编译QuartusII设计,使用新的硬件镜像文件配置FPGA。
添加PWM元件到SOPCBuilder系统,执行下面的步骤建立SOPCBuilder的元件搜索路径:
1.在SOPCBuilder图形用户界面中,在File菜单中选择SOPCBuilderSetup。
2.在Component/KitLibrarySearchPath中输入
如果已经有一些路径存在,使用"+"来分隔这些路径。
如图8-28所示。
3.点击OK。
上面的这些步骤使得元件的软件文件对NiosIIIDE可见。
这些步骤对QuartusII软件v4.2和NiosIIIDEv1.1是必须的。
执行下面的步骤将PWM元件添加到SOPCBuilder系统:
1.在SOPCBuilderSystemContents页,在Unkown组中选择pwm_avalon_interface,然后点击Add。
PWM元件的配置向导出现,如图8-26。
如果用户需要,可以修改配置界面中的参数。
参数会影响PWM控制寄存器的复位状态。
2.点击Finish。
返回到SOPCBuilderSystemContents页,元件pwm_avalon_interface_0出现在活动的外设的列表中。
3.右键单击pwm_avalon_interface_0,选择Rename,键入z_pwm_0的名字,然后按Enter键,如图8-29。
4.点击Generate开始生成系统。
5.系统生成成功之后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 定制 AVALON 外设 参考