TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册

文章目录

  • 概述
    • 输入
    • 输出
    • The CLB Tile
  • 特性
    • 静态开关块 Static Switch Block
    • 计数器块 Counter Block
    • 有限状态机块 FSM Block
    • LUT4 Block
    • Output LUT Block
    • 高级控制器 High Level Controller (HLC)
  • 使用教程和示例
  • 参考文献

概述

C2000可配置逻辑块(CLB)是可配置块的集合,可使用软件互连以实现自定义数字逻辑功能。CLB能够通过一组X-bar连接来增强现有的外围设备,如ePWM、eCAP、eQEP。X-bar还允许CLB连接到外部GPIO引脚,通过这种方式,CLB可以被配置为与外设交互以执行小的逻辑功能,例如简单的PWM发生器,或者实现定制的串行数据交换协议。

支持文档在:C:\ti\c2000\C2000Ware_3_01_00_00\utilities\clb_tool\clb_syscfg\doc

280049C有4个可配置的实例。

输入

每个CLB实例都看到一组公共的72个输入信号,称为全局输入信号。此外,每个CLB实例都有一组特定的25个输入信号,这些信号对每个实例都是唯一的,称为本地输入信号。CLB的八个输入中的每一个都可以从全局输入信号或本地输入信号中选择。具体见[1]的表29-1。
TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册_第1张图片
为了使用gpio作为CLB的输入,用户必须使用输入X-BAR和CLB X-BAR。

输出

CLB的8个输出被复制为16个输出信号。这16个输出中的每一个都有一个单独的使能位定义在CLB 输出使能寄存器,CLB_OUT_EN_REG.中。CLB输出到设备中的ePWM、eCAP、eQEP和X-bar。这允许用户增强这些模块的功能。

The CLB Tile

CLB tile的目的是提供CLB的逻辑重构能力。CLB tile包含以下子模块:

  • Counter:计数器子模块可以配置为加法器、计数器或移位器。当用作加法器时,它可以加减。当用作计数器时,它可以向上或向下计数。当它作为移位器时,可以左移或右移。计数器事件输入和复位输入可以自由地连接到同一实例中的任何其他子模块。每块实例上有三个计数器。
  • LUT4:LUT4子模块具有4输入查找表功能,并且能够实现最多4个输入的任意布尔方程。每个CLB实例中有三个LUT4子模块。
  • FSM:有限状态机(FSM)子模块可以配置为单个四状态有限状态机,也可以配置为两个独立的两状态有限状态机。FSM接受两个外部输入,并生成两个状态输出和一个组合输出。当不用作状态机时,FSM子模块可以接受两个外部输入并作为4输入LUT工作。每个CLB实例中有三个FSM子模块。
  • Output LUT:输出LUT是一个三输入查找表子模块,能够实现最多三个输入的任意组合布尔方程。在CLB tile中有八个这样的块,每个块都与其中一个tile输出相关联。
  • High Level Controller:高级控制器(HLC)子模块是一个事件驱动块,最多可以处理四个并发事件。事件可以是任何其他块输出上的活动。当每个事件发生时,将执行一组预定义的操作。HLC还为CPU子系统提供数据交换和中断机制。有四个工作寄存器(R0、R1、R2和R3)可用于基本操作,并修改或设置三个计数器块的值。与其他子模块不同,每个tile中只有一个HLC。
  • Configurable Switch Block:可配置交换块在上面列出的所有块之间提供动态连接。子模块可以由用户连接,唯一的限制是它们不能在tile中形成循环。

CLB tile由三组计数器块、FSM和LUT4、一个高级控制器和八个输出LUT块组成,如下图所示:
TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册_第2张图片

特性

静态开关块 Static Switch Block

静态开关块提供CLB tile中的子模块之间的可配置连接。所有子模块的输出和八个外部输入都连接到tile内的公共内部总线。每个输入端口都有一个32对1多路复用器和一个相关的5位选择值,允许用户选择总线上的一个输入。唯一的限制是某些信号(如下[1]表29-4),这些信号在设计中被捆绑在一起,以防止意外的组合循环的产生。
静态开关块允许用户定义输入连接,其来自上述输出表中任何子模块的任何输出。因此,很容易构成一个循环。为了防止这种情况,在每个子模块的输入路径中都会断开某些路径。这些端口位置锁定到“0”,如表29-6所示。

计数器块 Counter Block

计数器块是一个复杂的功能子模块,可以配置为计数器、加法器或移位器。除了正常的操作控制外,该块还有一个专用的EVENT输入,它可以触发加法、减法或移位操作,或将数据加载到计数器寄存器中。计数器的输入如下图所示。
TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册_第3张图片
计数器块的核心是32位计数寄存器。这个寄存器可以在计数开始前静态加载,也可以在运行时动态加载。计数器子模块的操作由下面描述的输入决定。注意,每个输入都可以连接到CLB tile中任何其他块的输出。这些连接是通过配置可配置开关块来实现的。
计数器输入如下:

  • RESET:这是最高优先级的输入,优先于所有其他输入。输入是电平敏感的,只要保持高电平,计数器将在下一个时钟周期重置为0。
  • MODE_0:该输入是计数器的使能。只有当该输入为高时,计数器才开始计数(增减取决于MODE_1的设置)。如果该输入低,则不进行计数。
  • MODE_1:该输入是计数方向控制。如果该输入为高,每个时钟周期递增。如果该输入低,则每一个时钟周期的递减。计数时,计数器在0xFFFFFFFF之后环绕到0x00000000。倒计时时,计数器在0x0000000之后返回到0xFFFFFFFF。唯一的例外是事件同时发生,导致不同的值加载到计数器中。
  • EVENT:定义此输入是为了根据某些事件触发计数器中的操作。事件本身可以是其他块的任何输出或tile的外部输入。计数器的静态控制输入定义了计数器在活动事件上的行为。活动事件定义为事件输入的上升沿。计数器可以配置为执行以下操作之一:
    – 将预定义的32位值从加载值寄存器加载到计数寄存器;
    – 将计数器寄存器的内容向左或向右移动预定义的0到31之间的量;
    – 添加或减去预定义的32位值。加法和减法被视为32位无符号运算,并且不存在饱和。
    请注意,上升沿对事件输入的影响仅持续一个周期。在下一个循环中,计数器操作将基于模式0、模式1和复位输入继续。

MATCH1 REF和MATCH2 REF是用于生成MATCH1和MATCH2输出的32位参考值。每当计数器寄存器值与32位MATCH1 REF值匹配时,MATCH1输出变为高激活状态。MATCH2与MATCH2 REF寄存器表现出相似的行为。MATCH1和MATCH2的参考值可以在运行开始之前设置一次,也可以动态修改。高级控制器可以将所需值加载到MATCH1 REF和MATCH2 REF寄存器中。
注意,计数器加载和匹配寄存器不是内存映射的。详见表29-12。

计数器块的三个逻辑输出如下:

  • ZERO:只要计数器寄存器为零,此输出就变高。
  • MATCH1:只要计数器寄存器等于MATCH1 REF输入寄存器,该输出就变高。
  • MATCH2:只要计数器寄存器等于MATCH2 REF输入寄存器,该输出就变高。

计数器块的操作由CFG_MISC_CTRL寄存器控制。此寄存器的以下三位与每个计数器相关。下面的“x”表示计数器实例;0、1或2。有关详细信息,请参阅第29.6节中的CFG_MISC_CTRL控制寄存器说明。
TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册_第4张图片

有限状态机块 FSM Block

有限状态机(FSM)块提供了构建最多具有四种状态的可编程有限状态机的能力。它有两个寄存器位和两个外部输入,可编程为两个2状态机或一个4状态机。为了增加灵活性,有两个辅助输入(EXTRA_EXT_IN0和EXTRA_EXT_IN1),可以通过放弃状态功能来创建更大的组合函数。FSM的结构如下图所示。
TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册_第5张图片
FSM块的信号和功能描述如下:

  • EXT_IN0和EXT_IN1:这两个外部输入可用于控制输出FSM_LUT_OUT或状态S0和S1中的任何一个。
  • S0S1是具有独立状态控制方程的两个状态位。
  • 16位S0方程定义一个函数(EXT_IN1,EXT_IN0,S1,S0)。按定义顺序的四位用作16位寄存器的索引,以决定S0的下一个状态。
  • 16位S1方程定义一个函数(EXT_IN1,EXT_IN0,S1,S0)。按定义顺序的四位用作16位寄存器的索引,以决定S1的下一个状态。
  • 16位输出方程定义一个函数(EXT_IN1,EXT_IN0,S1,S0)。按定义顺序的四位用作16位寄存器的索引,以确定FSM_LUT_OUT的输出值。提供了额外的可配置级别,使得FSM_LUT_OUT可以在状态S0和S1未使用的情况下使用额外的输入。
    一个额外的位用于选择EXTRA_EXT_IN0,而不是S0。一个额外的位用于选择额外的EXTRA_EXT_IN1而不是S1。利用这些,通过分别放弃一个或两个状态比特,可以有效地为FSM LUT OUT构建3输入或4输入LUT。
    CFG_MISC_CTRL寄存器控制FSM块的操作。该寄存器中的两位用于每个FSM块,以确定FSM输出LUT函数是使用状态变量S0/S1,还是使用相应的外部输入信号FSM_EXTRA_EXT_INx。“0”表示使用状态位,“1”表示使用FSM_EXTRA_IN0/FSM_EXTRA_IN1信号。
    TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册_第6张图片

LUT4 Block

这是一个简单的四输入查找表(LUT)块,输入为IN0、IN1、IN2和IN3。任何使用四个输入的组合布尔方程都可以通过编程与每个LUT4块相关联的16位控制寄存器来实现。有关更多信息,请参阅第29.6节中的LUT4寄存器说明。

Output LUT Block

输出LUT块在功能上与LUT4块非常相似,只是它有三个输入。与其他子块不同,这些块的输出意味着离开tile,因此它们不能被tile内的任何其他块使用。三个输入的任何组合函数都可以通过输出LUT块来实现。有关更多信息,请参阅第29.6节中的输出LUT寄存器说明。
TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册_第7张图片

高级控制器 High Level Controller (HLC)

高级控制器(HLC)执行两个主要功能:

  • 提供与设备其余部分通信和数据交换的方式。
  • 提供可编程、基于事件的动作系统,可执行计算、逻辑功能操作和数据移动。换句话说,可以将事件配置为触发CLB tile中的预定义操作集,或与设备其余部分的初始化数据交换。

HLC的体系结构如图29-14所示。它是一个基于事件的系统,能够处理多达四个同时发生的事件,这些事件可以从tile内其他块的任何输出或外部输入中选择。
TMS320F280049C 学习笔记3 可配置逻辑块 Configurable Logic Block (CLB) 技术手册_第8张图片
四个HLC事件中的每一个都有一个执行指令的专用地址。事件0是最高优先级,事件3是最低优先级。从表29-8所示的一组信号中选择事件。编号最低的事件(事件0)具有最高优先级,编号最高的事件(事件3)具有最低优先级。

指令内存最多支持每个事件8条指令。每个指令序列在相应事件的上升沿被触发。HLC内存支持每个事件最多8条指令,从表29-9中所示的固定地址范围开始。在相应事件的上升沿上触发指令序列。如果两个或多个事件同时发生,则关联的指令序列将按优先级顺序依次执行。

使用教程和示例

这部分内容在文献[3]中有详细的介绍,之后将在其他博文中总结。

参考文献

  1. TMS320F28004x Microcontrollers Technical Reference Manual
  2. TI官方英文论坛C2000™ microcontrollers forum
  3. CLB Tool User’s Guide
  4. Designing With the C2000™ Configurable Logic Block (CLB)
  5. 使用 C2000™可配置逻辑块 (CLB) 进行设计
  6. 如何将 FPGA/CPLD 中的自定义逻辑迁移至 C2000™微控制器
  7. TMS320F28388D: CLB application for intervention PWM signal output
  8. TMS320F280049C: CLB can only interface with EPWM1-4?
  9. 这是一个关于clb的bug吗

你可能感兴趣的:(TI,DSP学习)