表10 Address 0x0040 interrupt status register
我们用到的是配置空间里面地址为0x0040寄存器中的第16bit,也就是说,本设计的Qsys系统最多只能支持16个中断。该地址寄存器是只读寄存器,也即cpu 通过配置空间的该寄存器获取当前中断的状态。
表11 interrupt enable register
本设计中,使用的是Qsys的中断方式,配置空间中的该地址寄存器的低16bit是中断使能寄存器,该寄存器与地址寄存器0x0040中Qsys系统下的中断是一一对应的。
配置空间里面的这两个地址寄存器是产生虚拟pcie中断的前提,在配置空间里面还有
个寄存器需要设置:
表12 Command Register (Offset 04h)
这个寄存器是控制pcie产生INTX中断的。
表12 Status Register (Offset 06h)
从这个寄存器的状态,可以获知当前有没有INTx类型的虚拟中断产生。
只有把以上有关中断相关的寄存器都设置对了,才能正确的将fpga fabric产生的中断通过pcie接口反馈到cpu端。
以上内容补充了CRA,地址转换,中断等相关内容,下面补充下如何创建自己的component.
启动Qsys,双击左上角的New Componet或者File->New Component,如下图所示:
图16 new component示意图
双击New Componet,弹出的页面如17,
图17 new component参数页面
Component type下各参数含义如下: -Name
Component的名字,可以以任何你喜欢的名字命名,英文字母在前,可以有下划线。 -Display Name
component对外显示的名称,最好与Name一样。 -Version
版本号,方便维护 -Group
图18 Group分类选项
Component的分类,可根据实际用途选择类别。 -Description
对当前Component的描述,比如功能啥的。 -Icon
Component图标,可空白。 -Document
当前Component的参考文档,可以空白。
Files下各参数含义如下:
图19 Files页面示意图
这个页面要求用户选择需要创建component的verilog/VHDL源文件。这个源文件可以使用该页面最上面的Templates选项来选择,如图20所示:
图20 Templates选项
这里面有好多现成的例子可用,只要选中对应列即可。 另外一种方法是自己写源文件,然后点击图21中左下角的+号,选择文件的位置即可。
图21 源文件选择页面 当选则了源文件之后,“Analyze Synthesis Files”这个选项就变成黑色的了,如图22所示:
图22 选择文件之后的页面 选择的文件是自己是写的源代码,代码结构如下:
源文件是带有中断的slave module,其中各信号说明如下: Address :地址总线,位宽根据需要来定 Read :读命令 Readdata :读数据 Write :写命令 Writedata :写数据 Waitrequest :反馈信号 Clk :时钟 Reset :复位信号 ins_irq0_irq :中断信号
以上信号中,时钟是必须的,其余的最好都留着,且这些信号都必须符合Avalon总线的时序要求。但对于各信号的定义,除了时钟信号,复位信号,中断信号是有固定还以外,其余各信号可以根据需要自己定义,随意使用,只要满足Avalon总线时序即可。
在选择好了文件以后,必须进行的一项工作是综合,即点击图22中的“Analyze Synthesis Files”按钮,让Qsys系统先分析下源文件,以确定各信号的含义以及属性。至于后面的