在接触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处理器)的接口。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
图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
ilove314_323192455 2015-2-25 21:18
用户362470 2015-2-25 10:32
用户1373959 2010-2-11 21:06