Qsys简析
0赞自Altera在Quartus II 10.1推出Qsys这个新工具,就对这个Qsys充满了好奇,起初只是简单的认为它只是SOPC Builder的简单升级,就简单地在界面上复杂化了一下,不过经过进一步学习发现,它还是很有“内涵”的。
在QuartusII 11.0中就正式使用Qsys作为主要的SOPC工具,当然SOPC Builder还保留,可以通过tools->SOPC Builder打开,据说在12.0后就完全把SOPC builder去掉了。为了探究Altera到底对Qsys做了哪些改进,首先咱分别在SOPC Builder和Qsys中建了一个最小系统,只包含了几个主要组件:NiosII Processor、onchip_memory、jtag_uart和pio。如图1所示为熟悉的SOPC Builder界面。
图1 SOPC Builder界面
如图2所示为在Qsys中的系统界面,与SOPC Builder对比可以发现,首先在connection这一栏明显复杂了许多,并且多出了一个clk source时钟组件,这两个变化也是这次改进的主要部分,下面分别说明一下:
图2 Qsys界面
(一)时钟
在图2中所示的时钟组件是建立系统时默认就有的,也是必须的,在组件中有clock input和clock output,clock input就是外部时钟输入引脚,可以在图中看到有输入引脚的输入接口,在Qsys中加入了这个输入输出引脚的视图功能,这个还是比较人性化的。这个时钟改进并不仅是简简单单地在界面上加入的这个时钟组件,还包括一些跨时钟域方面的优化。如图3所示为Qsys中的各种功能标签:SystemContents、Address Map、Clock Settings、Project Settings、System Inspector、HDL Example和Generation,至于各标签功能大家可以自己简单摸索一下。其中在Project Settings标签中有一个Clock crossing adapter type选项,这个是在SOPC Builder中没有的,在Qsys系统中,如果要处理跨时钟域的数据传输时,在系统生成时会自动加入一个clock crossing adaptor,而无需手动加入(clock crossing adaptor在component列表中也有)。其中在选项下拉菜单中有三个选择项:Handshake、FIFO和Auto。
Hankshake:采用简单的握手协议处理跨时钟域数据传输,在这种模式下耗用的资源比较少,适用于数据吞吐量比较少时的情况;
FIFO:采用了双时钟的FIFO做同步处理,这种模式下可以处理吞吐量比较大的数据传输,但是总体延时是handshake的两倍,适用于吞吐量比较大的存储器映射的数据传输;
Auto:这种模式下同时采用Hankshake和FIFO方式的连接,在突发连接中使用FIFO方式,其它情况下使用Handshake方式。
图3
(二)互连
可以在图3中看到Limit interconnect pipeline stage to的选项,这个也是在SOPC Builder中没有的。这也是Qsys的改进之一,在Qsys中对用户开放了一部分的总线信息。如图4所示为一个Avalon-MM接口的互连系统,在以前的系统结构中,开放给用户的只有Avalo- MM接口master与slave交互的简单协议,并没有给出Interconnect中的交互协议。因此,在以前咱们自以为能轻松驾驭Avalon接口,其实咱们只会用而已,并不知道Avalon在底层是怎么工作的。
图4
关于Interconnect的具体资料可以查阅官方资料,此处注意一下,这个互连只针对Avalon-MM接口,而对于Avalon-ST接口的信息其实早已公布。下面咱就把重点部分简单说明一下。其中Interconnect内部组成如图5所示,总体可分为Command和Response两条链路:
Command链路:Master Network Interface连接Avalon-MM master接口,通过Command Switch打包数据(实质采用Avalon-ST接口协议打包数据)进行传输,经过Slave Network Interface输出数据给Avalon-MM slave;
Response链路:Slave Network Interface连接Avalon-MM slave接口,通过Response Switch打包数据进行传输,经过Master Network Interface输出数据给Avalon-MM master。
图5
进一步剖析,可以对Master Network Interface和Slave Network Interface这两个接口进行进一步分解,其中Master Network Interface如图6所示,主要由Translator、Agent、Router和Limiter这5部分组成,Translator主要将Avalon-MM接口协议转换成更简单、更适用于这个Qsys Network的形式;Agent用于打包数据;Router决定包数据的传输方向;limiter保证包数据按顺序输入或者输出。
图6
Slave Network Interface如图7所示,其中包含Agent和Translator两部分,它们的功能与在Master Network Interface中类似,此处不再重复说明了,具体可参考手册,里面有详尽的解释。
图7
很遗憾,关于互连的信息只公开到这个层次,并没有对Translator、Agent、Router和Limiter的工作协议做详细说明,不过庆幸的是,在Qsys中将这些模块加入到component列表中了,如图8所示,用户将这些组件加入到系统中。
图8
现在对Qsys处于学习阶段,还没应用到项目中,相信真正用了才会知道它的好!
听说Altera也要嵌ARM核了,这个也是比较值得期待的……