特权同学

集成NIOS2自定义组件

0
阅读(2298)

在接触SOPC之前,天真的以为 这玩意对于用户而言没啥技术含量,只不过是设定恩多GUI而已,多看看datasheet研究研 究各个选项就完事。仔细深入后,发现不是这么回事,也没这么简单。

刚开始接触SOPC时,Avalon-MM、Avalon-ST总线接口的时序规范看得都有些头大,很枯燥的东西,虽然要看懂并不难,但是要记牢摸透可真没有那么 简单。当时也只是浏览了一遍,也没太当回事。这回需要集成自定义组件才发现这个时序规范派上用尝了。

所谓自定义组件,用官方的一个图解释就如图1所示。NIOS2处理器是一个Master,这个Master可以连接很多Slave,Altera会提供很多常用的Slave,如GPIO、UART、SDRAM controller等等。如图1所示,Component Logic是用户自定义的逻辑,可以就着Avalon-MM或Avalon-ST接口规 范与NIOS2处理器通信,从而达到自定义逻辑与处理器访问的无缝连接。这个自定义组件一方面有和FPGA外部器件的接口(一般是使用FPGA的IO口),另一方面也有和SOPC组件连接(一遍指NIOS2处理器)的接口。


图1

因此,在设计这个组件的verilog模块时,用 户在顶层不仅需要给出和外部器件的接口,也需要给出符合Avalon-MM或Avalon-ST的接 口。特权同学的一个adc控制器组件就使用了如图2所示的一些接口。Clk和rst_n是系统时钟和复位,可以独立于前面所说的与外部器件的接口以及符合总线规范的接口;adc_data,adc_cs_n,adc_clk是用于与外部串行ADC通信的接口;sys_rddata,sys_cs_n,sys_rd_n是一组简单的符合Avalon-MM规范的 接口,Master(NIOS2处理器)与该组件就是通过这些接 口进行通信。


图2

通过一些简单的建立保持时间(以时钟周期为单位)的设置,可以看到在用户自定义模块中需要设计一个 满足下列读写时序的可访问寄存器时序逻辑。

图3

Baidu
map