接着博客“FPGA名词相关Ⅰ”,零星地总结一些关于FPGA的名词。 1.FPGA内部资源 2.FPGA功耗 3.8B/10B编码 1.FPGA内部资源 FPGA内部资源有7类:可编程输入输出单元(IOB)、可配置逻辑单元(CLB)、时钟管理单元、丰富的布线资源、嵌入式RAM(BRAM)、底层内嵌功能单元和内嵌专用硬核。 可编程输入输出单元(IOB) 芯片与外部电路的接口部分,FPGA的IOB被划分成若干个bank,每个bank的接口标准与其接入电压VCCO决定,每个bank只能有一个VCCO; 可配置逻辑块(CLB) Slice由两个4输入LUT、进位逻辑、算数逻辑、存储逻辑和函数复用器组成; 时钟管理单元 V4—DCM数字时钟管理器,核心是延迟锁定环DLL; V5—PLL锁相环,模拟时钟管理器。更精确的频率生成,可同时生成多路时钟,但是具有微小的相移; V6—MMCM混合模式时钟管理器。一个PLL,其中小部分DCM进行精细相移,,混合模式:PLL是模拟的,相移是数字的; 7-Series—MMCM/PLL; 丰富的布线资源 长线资源、短线资源等; 嵌入式RAM(BRAM) 具有很高的灵活性,常用于配置单口RAM,双口RAM和FIFO,RAMB18/RAMB36; 底层内嵌功能块 DSP,DLL,PLL等; 内嵌专用硬核 Serdes收发器,PCIe硬核等; 2.FPGA功耗 上图可以看出,GTP_x1高速通道0.176W、PCIe硬核0.042W以及设备静态功耗0.110W都是固定不能更改的,我们对图中黄色的动态功耗进行分析,而动态功耗主要体现在时钟、存储器,时钟管理单元和I/O消耗的功耗。 优化BRAM功耗 a) 使用“NO CHANGE”模式:在BRAM配置成True Dual Port时,需要选择端口的操作模式:“Write First”,“Read First” or “NO CHANGE”,避免读操作和写操作产生冲突,如图6所示;其中“NO CHANGE”表示BRAM不添加额外的逻辑防止读写冲突,因此能减少功耗,但是设计者需要保证程序运行时不会发生读写冲突。 b) 控制“EN”信号:BRAM的端口中有clock enable信号,如图8所示,在端口设置中可以将其使能,模块例化时将其与读/写信号连接在一起,如此优化可以使BRAM在没有读/写操作时停止工作,节省不必要的功耗。 优化时钟管理单元 上图中,我们使用了33%(2/6)的混合模式时钟管理单元(MMCM):1)在顶层利用MMCM混合模式时钟管理单元将200M晶振输入,输出两路时钟,均为125M,一个用于RGMII接口,一个用于接收、发送模块内部逻辑处理;2)在PCIe模块利用MMCM混合模式时钟管理单元将100M晶振输入,输出六路时钟。后期可以优化,只使用单个MMCM原语块,这样资源和功耗在时钟管理这块可以减半。 3.8B/10B编码 前边几篇博客也都提及了8B/10B编码,这项由IBM提出的数据传输编码标准被广泛应用在高速串行总线上,如SATA、PCIe、RapidIO及USB3.0,其目的是保证直流平衡,足够密集的电平转换。 8bit数据可以划分成两部分,低5位EDCBA(十进制xx),高3位HGF(十进制y),那么该8bit数据可以记为Dxx.y。另外还有12个控制字符,作为帧起始,帧结束,传输空闲等状态表示,控制字符记为Kxx.y。在8B/10B编码中,将K28.1/K28.5/K28.7作为K码的控制字符,称为“comma”,comma字符只作为控制字符出现,不会出现在数据负荷上,一次可以作为帧开始/结束标志。 “不一致性”用于描述编码后“1”和“0”的差值,只允许“+2”(0比1多两个)、“0”、“-2”; “当前运行不一致性”,PCIe链路发送端有个CRD状态位,仅会有“+1”(1比0多),“-1”两种状态。如果是CRD状态为正,则进行CRD+编码,否则CRD-编码以维持DC平衡 注意:经过8B/10B编码后,连续的1/0不超过5个,除非这是comma控制字符;参考“PCIe体系结构导读”一书,物理层中K27.7/K29.7分别为TLP包起始/结束comma控制字符。 |
|