吴明

失控----FPGA去中心化设计

0
阅读(211) 评论(5)

上一篇TDL博客,先暂停更新,因为我在考虑其中的一个关键技术点(模块间是不是可以完全不用裸的reg wire 来连接,只用interface,这样能大大降低模块间的耦合度,其实本博客基本就能找到答案了)。

最近在看KK的《失控》,KK的观点刚好切合FPGA目前的发展------去中心化设计。这篇文章就来讲讲去中心化设计。


假设一个项目:

一、拥有的外设:4路SPI分别接外MCU,4路I2C分别接外总线,4路UART分别接4个PC,1路网口(只UDP),1路Qflash,2个LED,2个数码管。

二、设计要求:只有一个,所有外设都是两两相通的,比如任意SPI,都能把数据推送到任意UART,也有从任意I2C接收数据,任意接口都能控制数码管。


可能的设计思路

挂个U核,各个外设,接口都做成标准总线slaver口IP,外加中断控制,由CPU统一对这些IP进行调度控制,这是现在FPGA SoC的设计方法,也是ARM 集成的方式。

纯逻辑控制,各种状态机控制不同外设,在这个项目中这种实现方式难度相当大。 

(曾经看过一篇博文提到FPGA实现TCP,指出无非两种方式,一种嵌CPU,用U去跑协议棧,另一种是写大的状态机)


莫老师说用Noc(network on chip),我确实是使用这种方法。

只是个人不是很喜欢noc这个词,因为network会让人偏离关注点,其实纵观整套代码,net是隐藏的,没有哪个模块来表示net,也没有统一的net protocol,外设决定protocol,外设的设计重要性会被net分散掉;再者我也不喜欢这么狭义专业的叫法,更喜欢范特西的,有想象力的词,用《失控》里面的一个高频词“生态系统”EoC,各个模块的关系就像一个自恰的生态系统。

SOC图

CPU.png

EoC Noc图

NET.png

总线其实是没有一个总的实体的(interconnect),是由发布的多个interconnect组成,当然也可以设计成一个实体,但是弊大于利。所以更像下面的图LINE.png

-----------------------------------------------------------------------------------------------------------------------------------------

特性对比

1、SOC接入设备是有限的,大大受限于中断数量,一个CPU挂上千个slaver,有上千个中断(也并不是每个都有中断,LED就没有,有中断的还是多数),那是很可怕的,当然现在的也没有看见那个SOC挂这么多的。EoC NoC没有这个限制,可以接入任意数量的设备。

2、外设设备可以看成资源,CPU其实也是资源,SOC会出现资源过度占用,因为每一次外设的交互都会叠加在CPU这个宝贵的资源上,所以也会造成CPU性能越来越高(我们真的需要这么高么),EOC NOC也会出现资源过度占用,但是不会出现,SPI过度占用会影响I2C的情况。

3、SOC接口和协议相对简单除了CPU是master 其余都是slaver,协议只有一种就是CPU规定的(地址多少位,数据多少位这些)。EOC NOC设备可以只有其一任意接口,也可以两种都有,协议更是每一个设备的协议可以不一样,控制LED的bus协议就和SPI的bus协议可以不一样。

4、分布独立性,SOC方面如果UART想控制LED,必须在CPU没有再处理Ethernet的时候才能完成,EOC NOC没有这种限制,只有请求的设备都是重叠。所以可以做到全部设备满负荷运行,SOC如果一直在处理大规模的Ehernet数据,则可能没有时间来处理SPI,其余设备就会处于被动空闲状态。

5、设计难度,EOC NOC在于net路由,设备的master,slaver接口的设计,SOC 因为已经有现成的Bus和IP,设计基本都在C环境。

6、Bus区别,EOC NOC是轻量的BUS,不会有优先级,中断,因为设备master根本没有能力处理优先级(也不需要),SOC基本是全功能的BUS。

 

    由于一篇博文有字数限制,所以请看下篇

  1. 以前做过STM32的程序,有类似的东西,把所有的通信的东西都推送到UART

  2. @老莫   

    如果是全直连,不叫NoC。中间要有多级交换,独立仲裁才是。

    中间是有多级仲裁和交换,我是图省事没话出来而已,画出来会有点复杂

  3. @吴明   

    哈哈 我还真查了一下NoC

    如果是全直连,不叫NoC。中间要有多级交换,独立仲裁才是。

  4. @老莫   

    快使用NoC,哼哼哈嘿!

    哈哈 我还真查了一下NoC

  5. 快使用NoC,哼哼哈嘿!