基于Avalon总线IP核的创建1设计概述SOPC Builder提供了一个组件编辑器,用来创建和编辑自己的SOPC Builder 组件即IP核一个典型的1P核组件由以K几个部分组成:•硬件文件——描述IP核硬件HDL模块•软件文件——一个定义IP核寄存器映像的C语言头文件,软件控制IP核所 需的驱动程序• IP核描述文件(class.ptf)——定义IP核的结构,为SOPC Builder提供将IP核 集成到系统的信息,IP编辑器自动地创建这个文件,它是基于所提供的硬件、 软件及在编辑器GUI中指明的参数而创建的描述IP核的硬件和软件文件创建之后,使用IP核编辑器将这些文件封装成 一个SOPC Builder元件,以后也可以利用编辑器对定制的IP核进行修改2 IP核开发流程2.1典型的设计步骤这里以包含从接口的IP核的开发步骤为例介绍典型的IP核设计步骤,对于 含有主端门的IP核设计过程与此类似•指明硬件功能和控制硬件的AH•基于软件和硬件的需求,定义Avalon接口,提供相应的控制机理和适当的 吞吐量性能•用Verilog或荠VHDL语言描述硬件的API,并完成验证测试工作•编写定义硬件级寄存器映像的C头文件。
•使用编译器封装硬件和软件文件为•一个组件,并添加到SOPC Builder系统模 块•根据功能需求,反复修改软硬件方面的设计,对最终定制好的IP核进行编 译和系统级认证2.2硬件设计IP核的功能确定后,开始其硬件开发,编写HDL代码是一个反复的过程 典型的IP核结构由以下功能块组成.•• Task Logic——实现组件的基本功能,它取决于设计• Register File一一为从任务逻辑内部到外部的通信信号提供路径寄存器文件 将内部节点映射到可寻址的偏移地址,Avalon接口可以对它进行读写• Avalon Interface 为寄存器文件捉供标准的Avalon前端,接口可以使用传送数据的宽度:数据传送对吞吐率的需求;数据传送是间歇性的还是突发性 的;与系统中其他组件比较,硬件相对快些还是慢些2.3软件设计如果希望用处理器控制组件,则必须提供相应的软件至少必须对每个处理 器要访问的从接口定义寄存器的映像,可在编辑器中队IP核定义一个C头文件, 这个头文件定义了硬件的软件窗口典型地,头文件相对于被指定到IP核的一个符号基地址,对读写每个IP核 寄存器的宏进行声明软件驱动程序将IP核的硬件细节进行抽象,以使软件能 在上层访问IP核,驱动函数为软件提供访问硬件的API。
软件需求取决于IP核 的需要最常用的驱动程序是硬件初始化、读数据和写数据驱动程序与H标处 理器有关利用IP核编辑器,可以很容易地为Nios II处理器开发工具使用HAK 软件驱动程序进行封装要提供其他处理器的驱动程序,必须适应目标处理器开 发工具的需要3基于7段数码管的IP核设计本节通过一个7段数码管的IP核设计为例来说明创建一个IP核的大致步骤, 具体流程如卜:• 了解设计实例的组成•将设计文件封装成SOPC Builder组件即IP核•将IP核添加到系统•编译硬件设计下载到目标板•用Nios II软件对硬件进行验证3.1 IP核硬件部分的创建首先,我们要构建一个符合Avalon-MM Slave接U规范的可以实现7段数码 管功能的时序逻辑,在这里,我们利用Verilog语言来编写在程序中会涉及到 Avalon信号,相关信号如下所示HDL中的信号Avalon信号类型宽度方向描述elkelk1input同步时钟信号reset_nreset一n1input复位信号,低电平有效chipselectchipselect1input片选信号addressaddress2input2位地址,译码后确定寄存器oHsetwritewrite1input写使能信号writedatawritedata32input32位写数据值readread1input读时能信号byteenablebyteenable1input字节使能信号readdatareaddata32output32位读数据值此外,程序还包含两个输出信号SEG和COM,它们不属于Avalon信号。
数码管IP核软件主要含三个模块:1主模块,实现基木的功能2寄存器模 块,为从任务逻辑内部到外部的通信信号提供路径3 Avalon接口模块,使用 任何Avalon信号类型,支持任务逻辑所需传送的类型用Verilog语言编写数码 管IP核,使得硬件描述语言包含上述三个模块,然后保存为seg.v文件,放在需 要用7段数码管IP核的工程0录下3.2 IP核软件部分的创建接下来,我们就通过SOPC Builder,来建立数码管IP核模块了首先,打开Quartus软件,进入SOPC Builder进入后,点击•下图红圈处点击后,如下图所示,点击Next, 0点击后,如下图所示,点击下图红圈处,将我们刚才建立的seg.v加进来 (将seg.v文件放到了工程目录下的tese_l文件夹下)加入后,系统会对seg.v文件进行分析,如下图所示,出现红圈处的文字, 说明分析成功,点击close,关闭对话框0然后点击Next,如下图所示,通过下图,我们可以看到,seg.v中的信号都 出现在这里面了我们可以根据我们的功能要求来配置这些信号,其中,Interface 是 Avalon 接口 类型,仑包括 Avalon-MM、Avalon-ST、Avalon Memory Mapped Tristate Interface等等。
Signal Type指的是各个Avalon接门类型卜的信号类型这里我们需耍改动的是将下图红圈处seg_data和seg_com这W个信号的Interface 接口改为 New Conduit, Signal Type 改为 export 即可File TemplatesIntroduction HDL Files Signals interfaces Component Wizard► About SignalsNameInterfaceSignal TypeWidthDirectionelkelkelk1inputreset 一nelkreset 一n1inputseg_datacondu找一 endexport8outputseg comcondurt end 1MB MBexport4outputchipselectavalon_slave_0chipselect1inputwrite 一navalon_slave_0write 一n1inputread—navalon 一slave—0read—n1inputaddressavalon.slave.Oaddress2inputwritedataavalon 一slave 一0writedata8inputreaddatareaddata8output处,将上面的选项都设置好以后,点击Next,如下图所示,点击下图红 没有信号的接口去掉。
Name: avalon_steve_0_export InfoBlock DiagramclkP"reseLn0-elkelk⑴ reseLn [1 ]"avalon 一slave J^export “ (Conduit)Block Diagramavalon slave 0 exportfl
双击seg,打开我们建立seg模块,如 下图所示点击Finish,完成建立这里还需要设置一步,点击下图红圈处点-击后,如下图所示,点击IP Serarch Path,然后点击Add,添加seg.v所在 位置的路径***** **4i□添加后,如下图所示点击Finish完成设置这个选项是为了让SOPC Builder可以找到seg.v的位 置不然就会出现卜次你进入SOPC Builder的时候seg模块无效的问题3.3利用Nios验证数码管IP核将我们创建的7段数码管IP核添加到SOPC Builder创建的系统中,然后对 Quartus进行编译,编译过后将程序下载到FPGA中(具体步骤可参考以前的文档 《Nios使用解析》)打开Nios IDE,创建一个新的IDE工程,将以下测试代码写入到main函数中去include#include#include#include#include#includensystem.hnITalt_types. hIT"sys/alt_irq.h"naltera_avalon_pio_regs.hn,!altera_avalon_timer_regs • h"#define seg *(volatile unsigned long *) SEG_0_BASE //数码管IP的基地址 unsigned char contl,cont2;static void timer_interrupt (void* context, alt—u32 id) //timer 计时Is中断contl++;if( contl==60)contl=0;cont2(con-if(cont2==60)cont2= 0;IOWR_ALTERA_AVALON_TIMER_STATUS (TIMER_0_BASE, 0) ; //洁楚中断溢出位cont1=0;cont2=0;alt_irq_register (TIMER_0_IRQ, 0, timer_interrupt)。