CLB 配置工具使用说明
- Author:
成都翌创微电子有限公司
- Date:
2026-07-22
- Version:
1.0.0
目录
1 概述与准备工作
1.1 软件简介与主要功能
CLB 配置工具用于可视化配置芯片内的 Configurable Logic Block(CLB),并将配置一键生成为可集成到 MCU 工程的 C 源文件与头文件。
主要功能:
按芯片系列 / 型号创建工程,自动匹配 Tile 数量与系列配置(Profile)
画布拖拽添加 Input、OutputLUT、LUT4、FSM、Counter、AOC、HLC、SPI、PRSTRB 等模块
参数面板配置 Mux、滤波、真值表(支持布尔公式)、HLC 指令等
配置校验、生成
clb_user_config.c/.h、导出.dot连接图、保存.clbcg工程
1.2 版本说明与修订记录
1.3 系统运行环境
项目 |
要求 |
|---|---|
操作系统 |
Windows 10 / 11(x64) |
运行时 |
.NET 8(若使用 自包含发布包,通常无需单独安装) |
架构 |
当前正式发布以 x64 为主;ARM 需以实际发布包为准 |
其他 |
部分环境可能需要 Visual C++ 运行库 ;若启动失败请检查系统更新与依赖 |
1.4 依赖文件与目录结构
可执行文件同目录建议具备:
路径 / 文件 |
说明 |
|---|---|
|
主程序 |
|
芯片系列与型 号表(表示当前已 包含可支持系列) |
|
驱动(如
|
|
代码生成模
板( |
|
本手册 (帮助菜单读取) |
|
配套 Agent 进程(由 主程序按需调用) |
1.5 运行限制说明
单实例互斥:同一时间只能运行一个 GUI 实例。再次双击 exe 会提示并退出,避免多开导致硬件/配置冲突。
CLI 模式:使用
--cli启动时不受 GUI 互斥锁限制(用于自动化或脚本)。系列互斥:新建项目时每次只能选择 一个 产品系列。
2 快速上手
快速配置可按下列步骤完成:
启动与欢迎界面:双击 exe,选择新建或打开工程。
新建项目与芯片选型:左侧勾选一个产品系列,右侧选择芯片型号,点击开始项目。
基础配置与模块添加:确认活动 Tile 并启用,从工具箱拖拽模块到画布。
信号连接与参数设置:选中节点,配置 Mux / 滤波 / 方程,必要时查看信号映射表。
生成代码与输出结果:点击生成并选择输出目录,获取 C 文件、工程文件与 DOT 图。
集成到 MCU 工程:将
clb_user_config.c/.h加入工程并调用 Init 函数。
2.1 软件启动与欢迎界面
双击桌面快捷方式或
ClbConfigTool.App.exe。出现 欢迎窗口,提供 New Project / Open Project。
图 2.1 欢迎界面:启动软件后的初始窗口,可通过 New Project 或 Open Project 进入配置。
菜单栏提供 File 与 Help 菜单:
图 2.2 File 菜单:欢迎界面的文件操作菜单。
New Project:新建工程
Open Project:打开已保存的工程配置文件(
*.clbcg)Exit:退出当前软件
图 2.3 Help 菜单:欢迎界面的帮助菜单。
User Manual:打开用户手册(本文档),用于指导软件的使用
Feedback:链接至本公司官网 https://www.etmcu.com,可提交工具问题、Bug 或功能优化建议
2.2 新建项目与芯片型号选择
点击 New Project。
左侧勾选 一个 产品系列;右侧选择具体芯片型号行。
点击 Start Project,进入主配置窗口。
图 2.4 新建项目芯片选型:左侧选择产品系列,右侧选择具体芯片型号后点击 Start Project。
2.2.1 打开已有项目
如果想在原有的工程基础上进行增删配置,可以选择Open Project选择原先保存的相关配置问题即可。
图 2.5 选择打开项目后进行输入文件选择
2.3 基础配置与模块添加
在左侧 / 参数区确认当前 Active Tile,勾选 Enable CLB Tile。
从工具箱拖拽模块到画布(如 Input、Counter、OutputLUT)。
按需配置 Enable Pipeline Mode、Overriding Outputs、Enable Output Delay 等 Tile 基础项。
图 2.6 基础配置与模块添加:启用 Tile 后,从工具箱拖拽模块到画布并配置 Tile 基础参数。
2.4 信号连接与参数设置
在Build中选中画布节点中的 Input_1,在右侧参数面板配置 Mux、滤波、方程等。
图 2.7 Input 参数配置:选中 Input 模块后在参数面板设置输入类型、Mux 源与滤波等。
Input 选择 Local / Global Mux 时,可点击下拉框右侧 View signal map… 查看完整信号表;下方提示行显示当前 Tile 对应信号名。
图 2.8 View signal map:打开 Global / Local 信号对照表,确认 Mux 枚举与物理信号名的对应关系。
模块之间按端口规则连线(输出可扇出,输入通常单源)。
2.5 生成代码与输出结果
工具栏点击 Generate Code,选择输出目录。
图 2.9 生成代码:点击工具栏 Generate Code 并选择输出目录,校验通过后写出配置代码。
成功后可在目录中查看:
clb_user_config.c/clb_user_config.h工程文件(如
项目名.clbcg)连接关系图
项目名.dot(可用 Graphviz 查看)
图 2.10 生成输出文件:输出目录中的 C 源文件、头文件、工程文件与 DOT 连接图。
将生成的
.c/.h加入 MCU 工程,并链接Vendor_Drivers中的 CLB 驱动。
2.6 典型示例 A:GPIO 故障输入滤波 + 计数器
配置要点(Tile0):
步骤 |
工具操作 |
对应驱动意图 |
|---|---|---|
1 |
启用 Tile0 |
|
2 |
Input0:Local Mux →
|
滤波后的故障输入 |
3 |
Input1:Local Mux →
|
计数器复位源 |
4 |
Counter0:Mode0=EX T_IN0,Mode1=ALWAYS_1 ,Reset=EXT_IN1;开启 Match1/2 Tap |
上升计数 + 匹配输出 |
5 |
OutputLUT0/1:分别取
Counter0 Match1 /
Match2,方程 |
匹配结果送出 |
图 2.11 示例 A 配置:GPIO 故障输入滤波与计数器示例在画布与参数面板中的完整配置。
参考手写配置(便于对照工具生成结果):
Example 中关于 CLB 配置的代码部分:
static void CLB_configure(void)
{
uint32_t mode0 = 0, mode1 = 0;
uint32_t reset = 0;
uint32_t tapsel = 0;
/* clb inputxbar gpio / output — 在 MCU 工程侧完成 XBAR 初始化 */
CLB_inputXBAR_init();
CLB_outputXBAR_init();
CLB_disableLock();
CLB_configLocalInputMux(CLB_TILE0, CLB_IN0, CLB_LOCAL_IN_MUX_INPUT0);
CLB_configLocalInputMux(CLB_TILE0, CLB_IN1, CLB_LOCAL_IN_MUX_INPUT1);
CLB_selectInputFilter(CLB_TILE0, CLB_IN0, CLB_FILTER_ANY_EDGE);
/* counter: up */
mode0 = CLB_config3CSB(CSB_EXTERNAL_INPUT_0, CSB_ALWAYS_0, CSB_ALWAYS_0);
mode1 = CLB_config3CSB(CSB_ALWAYS_1, CSB_ALWAYS_0, CSB_ALWAYS_0);
reset = CLB_config3CSB(CSB_EXTERNAL_INPUT_1, CSB_ALWAYS_0, CSB_ALWAYS_0);
CLB_selectCounterInputs(CLB_TILE0, reset, 0, mode0, mode1);
CLB_configMiscCtrlModes(CLB_TILE0, CLB_COUNTER0_MATCH1_TAP_EN | CLB_COUNTER0_MATCH2_TAP_EN);
tapsel = CLB_initTapSel(2, 0, 0, 4, 0, 0);
CLB_configCounterTapSelects(CLB_TILE0, tapsel);
CLB_configOutputLUT(CLB_TILE0, CLB_OUT0,
CLB_getOuputLUT(CSB_COUNTER_0_MATCH1, CSB_ALWAYS_0, CSB_ALWAYS_0, 0xfe));
CLB_configOutputLUT(CLB_TILE0, CLB_OUT1,
CLB_getOuputLUT(CSB_COUNTER_0_MATCH2, CSB_ALWAYS_0, CSB_ALWAYS_0, 0xfe));
CLB_enableCLB(CLB_TILE0);
}
下面为根据工具配置生成的代码:
void CLB_Tile0_Init(void)
{
/* --- Input Mux / Filter / Sync / Pipeline --- */
/* Input 0 : Input1 */
CLB_configLocalInputMux(CLB_TILE0, CLB_IN0, CLB_LOCAL_IN_MUX_INPUT0);
CLB_selectInputFilter(CLB_TILE0, CLB_IN0, CLB_FILTER_ANY_EDGE);
CLB_enableSynchronization(CLB_TILE0, CLB_IN0);
CLB_disableInputPipelineMode(CLB_TILE0, CLB_IN0);
/* Input 1 : Input2 */
CLB_configLocalInputMux(CLB_TILE0, CLB_IN1, CLB_LOCAL_IN_MUX_INPUT1);
CLB_selectInputFilter(CLB_TILE0, CLB_IN1, CLB_FILTER_NONE);
CLB_disableSynchronization(CLB_TILE0, CLB_IN1);
CLB_disableInputPipelineMode(CLB_TILE0, CLB_IN1);
/* --- Counter --- */
CLB_selectCounterInputs(CLB_TILE0,
CLB_config3CSB(CSB_EXTERNAL_INPUT_1, CSB_ALWAYS_0, CSB_ALWAYS_0),
CLB_config3CSB(CSB_ALWAYS_0, CSB_ALWAYS_0, CSB_ALWAYS_0),
CLB_config3CSB(CSB_EXTERNAL_INPUT_0, CSB_ALWAYS_0, CSB_ALWAYS_0),
CLB_config3CSB(CSB_ALWAYS_1, CSB_ALWAYS_0, CSB_ALWAYS_0));
/* Counter 0 : Counter1 */
CLB_configCounterLoadMatch(CLB_TILE0, CLB_CTR0, 0U, 0U, 0U);
CLB_configCounterTapSelects(CLB_TILE0,
CLB_initTapSel(2, 0, 0, 4, 0, 0));
CLB_configMiscCtrlModes(CLB_TILE0, CLB_COUNTER0_LOAD_DIS | CLB_COUNTER0_MATCH1_TAP_EN | CLB_COUNTER0_MATCH2_TAP_EN);
/* --- Output LUT --- */
/* OutputLUT 0 : OutputLUT1 */
CLB_configOutputLUT(CLB_TILE0, CLB_OUT0,
CLB_getOuputLUT(CSB_COUNTER_0_MATCH1, CSB_ALWAYS_0, CSB_ALWAYS_0, 0xFE));
/* OutputLUT 1 : OutputLUT2 */
CLB_configOutputLUT(CLB_TILE0, CLB_OUT1,
CLB_getOuputLUT(CSB_COUNTER_0_MATCH2, CSB_ALWAYS_0, CSB_ALWAYS_0, 0xFE));
CLB_enableCLB(CLB_TILE0);
}
void CLB_UserConfig_Init(void)
{
CLB_disableLock();
CLB_Tile0_Init();
CLB_enableLock();
}
> 说明:CLB_inputXBAR_init / CLB_outputXBAR_init
属于片级 XBAR,不在本工具生成的 clb_user_config.* 内,需在 MCU
工程中另行调用。
2.7 典型示例 B:SPI 数据导出(HLC + SPI Buffer)
对应软件安装包中的 Example/CLB 示例:CLB_spi_data_export。
配置要点(Tile0):
步骤 |
工具操作 |
对应驱动意图 |
|---|---|---|
1 |
Input0/1:Local → INPUT0 / INPUT1 |
外部事件与 SPI 相关触发 |
2 |
HLC:Event0 = EXT_IN0;Program0 编写 |
事件触发累加 |
3 |
HLC 寄存器 R0=0,R1=1 |
|
4 |
SPI:使能 Buffer Access;Load 信号 = EXT_IN1 |
仅允许 一个 Tile 启用 SPI |
5 |
启用 Tile |
|
参考 Example 中关于 CLB 相关的配置:
CLB_disableLock();
CLB_configLocalInputMux(CLB_TILE0, CLB_IN0, CLB_LOCAL_IN_MUX_INPUT0);
CLB_configLocalInputMux(CLB_TILE0, CLB_IN1, CLB_LOCAL_IN_MUX_INPUT1);
/* HLC trigger event (CLB_OUT0 path via event sel) */
CLB_configHLCEventSelect(CLB_TILE0,
CLB_config4CSB(CSB_EXTERNAL_INPUT_0, CSB_ALWAYS_0, CSB_ALWAYS_0, CSB_ALWAYS_0));
CLB_programHLCInstruction(CLB_TILE0, 0,
CLB_getHLCInst(true, HLC_OPCODE_ADD, HLC_OPCODE_R1, HLC_OPCODE_R0));
CLB_setHLCRegisters(CLB_TILE0, 0, 1, 0, 0);
CLB_configSPIBufferLoadSignal(CLB_TILE0, CSB_EXTERNAL_INPUT_1);
CLB_enableSPIBufferAccess(CLB_TILE0);
CLB_enableCLB(CLB_TILE0);
工具生成代码:
void CLB_Tile0_Init(void)
{
/* --- Input Mux / Filter / Sync / Pipeline --- */
/* Input 0 : Input1 */
CLB_configLocalInputMux(CLB_TILE0, CLB_IN0, CLB_LOCAL_IN_MUX_INPUT0);
CLB_selectInputFilter(CLB_TILE0, CLB_IN0, CLB_FILTER_ANY_EDGE);
CLB_enableSynchronization(CLB_TILE0, CLB_IN0);
CLB_disableInputPipelineMode(CLB_TILE0, CLB_IN0);
/* Input 1 : Input2 */
CLB_configLocalInputMux(CLB_TILE0, CLB_IN1, CLB_LOCAL_IN_MUX_INPUT1);
CLB_selectInputFilter(CLB_TILE0, CLB_IN1, CLB_FILTER_NONE);
CLB_disableSynchronization(CLB_TILE0, CLB_IN1);
CLB_disableInputPipelineMode(CLB_TILE0, CLB_IN1);
/* --- HLC --- */
CLB_configHLCEventSelect(CLB_TILE0, CLB_config4CSB(CSB_EXTERNAL_INPUT_0, CSB_ALWAYS_0, CSB_ALWAYS_0, CSB_ALWAYS_0));
CLB_setHLCRegisters(CLB_TILE0, 0U, 1U, 0U, 0U);
CLB_programHLCInstruction(CLB_TILE0, 0U, CLB_getHLCInst(true, HLC_OPCODE_ADD, HLC_OPCODE_R1, HLC_OPCODE_R0));
/* --- SPI Buffer --- */
CLB_enableSPIBufferAccess(CLB_TILE0);
CLB_configSPIBufferLoadSignal(CLB_TILE0, CSB_EXTERNAL_INPUT_1);
CLB_configSPIBufferShift(CLB_TILE0, (uint16_t)0);
CLB_enableCLB(CLB_TILE0);
}
void CLB_UserConfig_Init(void)
{
CLB_disableLock();
CLB_Tile0_Init();
CLB_enableLock();
}
图 2.12 示例 B 配置:HLC 与 SPI Buffer 协同完成数据导出的示例配置。
3 界面与操作说明
3.1 主窗口整体布局
主窗口通常包含:
区域 |
作用 |
|---|---|
菜单栏 |
文件、编辑、帮助等 |
工具栏 |
生成代码、刷新连接、撤销/重做、活动 Tile 切换 |
工具箱 |
可拖拽模块列表 |
画布 |
节点放置与连线 |
参数面板 |
当前选中节点 / Tile 基础配置 |
状态指示 |
输出 LED、覆盖掩码指示等 |
图 3.1 主窗口布局:菜单栏、工具栏、工具箱、画布、参数面板与状态指示区的整体分布。
3.2 菜单栏与文件管理
File 菜单:
图 3.2 主界面 File 菜单:生成代码、另存工程、导出 DOT 与关闭项目等操作。
Generate Code:校验并生成 C 源文件、头文件与工程文件
Save As:另存
.clbcg工程Export DOT:导出连接关系图
Close:关闭当前工程
Edit 菜单:
图 3.3 Edit 菜单:撤销、重做等编辑操作。
Help 菜单:
User Manual:打开用户手册(本文档)
Feedback:打开官网 https://www.etmcu.com 提交问题反馈与建议
3.3 工具栏与操作按钮
图 3.4 工具栏:常用操作按钮与活动 Tile 切换控件。
控件 |
说明 |
|---|---|
Generate Code |
校验通过后写出
|
Refresh Connections |
按当前参数重建连线显示 |
Undo / Redo |
编辑历史 |
Active Tile |
切换当前编辑的 Til e,每个系列可能包含不同的Tile个数 |
3.4 工具箱与元件面板
常见模块:Input、OutputLUT、LUT4、FSM、Counter、AOC、HLC、SPI、PRSTRB 等。 每种模块有固定数量上限(由硬件 / 元数据决定),超出时校验会报错。
3.5 画布与节点交互
放置:从工具箱拖到画布
选中:单击节点;空白处取消选中
删除:右键菜单删除,删除选择仅针对多个模块的功能(Input、OutputLUT、LUT4、FSM、Counter、AOC)
图 3.5 画布右键菜单:对选中节点执行删除等操作。
旋转:针对仅单个配置的功能(SPI:raw-latex:HLC)可以进行旋转选择,用于位置放置,每次顺时针90°。
连线:输出端口可连到多个合法输入;输入端通常只接受一个源
自环连线:当某模块输入选择了同一模块自身的输出(例如 Counter 的 Reset 选
CSB_COUNTER_n_MATCH1)时,画布会绘制绕出模块外的自环连线,便于确认参数与拓扑一致。
图 3.6 模块自环连线:同一模块输出回连到自身输入时的弧形连线。
排布参考:画布标题区可在「编辑布局 / 排布参考」间切换。排布参考模式按推荐相对位置只读展示模块布局,便于对照规范摆放。
图 3.7 排布参考视图。
3.6 状态指示灯与监控区
输出 LED 反映 Overriding / 输出相关状态。当选择某路输出使能后 CLB_OUT_EN 使能为 1 时,对应模块源信号会被 CLB 接管。
显示区按列排布:第一列表示输出
CLB_OUTPUT_00~CLB_OUTPUT_07,每一列表示 8 路信号。
图 3.8 输出覆盖指示灯:按列显示各输出通道的覆盖使能状态。
4 核心配置指南
4.1 Tile 全局基础设置
在未选中具体模块时,参数区显示当前 Tile 的基础配置。
图 4.1 Tile 基础配置:启用 Tile、流水线模式、输出覆盖与输出延时等全局选项。
4.1.1 命名与启用控制(Enable CLB Tile)
Name:显示名,可写入生成注释
Enable CLB Tile:全局使能信号,勾选后该 Tile 会进入
CLB_UserConfig_Init,并调用CLB_enableCLB
4.1.2 流水线模式(Enable Pipeline Mode)
控制计数器 pipelining:关闭时加法为
load+cnt_val;开启时为load+last_cnt_val,并在下一拍写入计数器寄存器。这是 Tile 级的流水线模式配置。生成代码中调用接口
CLB_enablePipelineMode进行配置。
4.1.3 输出覆盖与锁定(Overriding Outputs / Lock)
Overriding Outputs:用于选择当前输出使能配置。选择对应信号后表示该输出会覆盖某个外设的输出,具体对应源见 View overriding signal map,表中加黑的部分有效。多选
CLB_OUTPUT_00…31,生成CLB_setOutputMaskLock Overriding Outputs Setting:输出消隐功能,使能后屏蔽对输出使能的配置;有选中项时可锁定,避免程序运行中误修改。
4.1.4 输出延时(Enable Output Delay)
当 CLB_OUT12/13/16–23 等信号环回再作为 CLB 输入时,需配置输出延时 1 cycle 输出:
选项 |
对应
bit( |
去向 |
|---|---|---|
CLB_OUT12 |
bit0 |
CLB_XBAR(local 源可选回环) |
CLB_OUT13 |
bit1 |
CLB_XBAR(local 源可选回环) |
CLB_OUT16 … CLB_OUT23 |
bit2 … bit9 |
C LB_Global_signal_mux |
在 CLB_setOutputMask / CLB_enableCLB 之前 调用
CLB_setOutputDelay。
4.2 输入模块(Input)设置
图 4.2 Input 模块:输入类型、Mux 源、滤波与同步等参数配置面板。
4.2.1 输入类型选择 — Input Type
三种类型:
Use Memory Mapped GPREG BIT:选择软件输入信号,通过 GPREG 位输入,可设 Initial Value(0/1)
Use Global Mux:全局外设信号(具体信号源见 View signal map)
Use Local Mux:本 Tile 相关本地信号(具体信号源见 View signal map)
4.2.2 全局信号映射与选择 — Mux Input Source
Input Type 选 Use Global Mux。
在 Mux Input Source 下拉中选择
CLB_GLOBAL_IN_MUX_*枚举项(下拉框宽度与其他参数项一致)。下拉框右侧同时显示:
当前选中项对应的信号提示(序号、信号名、同步/异步说明)
View signal map… 链接:打开完整 Global 信号对照表
生成代码会额外写入本地信号源选择全局输入
CLB_configLocalInputMux(..., CLB_LOCAL_IN_MUX_GLOBAL_IN),保证路径完整。
4.2.3 本地信号映射与选择 — Mux Input Source
Input Type 选 Use Local Mux。
Mux Input Source 切换为
CLB_LOCAL_IN_MUX_*列表。下拉框右侧:
实时提示:
[序号] TileN: 信号名 — 说明(随当前活动 Tile 变化)View signal map…:打开 Local 对照表;表中当前 Tile 列高亮,便于确认「同一枚举序号在不同 Tile 上可能对应不同外设实例」
仅生成
CLB_configLocalInputMux。
4.2.4 QEP / ETIMER 输入与 CRG 采样 bypass
当任意已启用 Tile 的某个 Input 选择了 Local Mux 中的 QEP 或
ETIMER 相关源(枚举名含 QEP / ETIMER)时,生成代码会自动:
在
clb_user_config.h中增加#include "et6x_crg.h"在
CLB_UserConfig_Init完成各 Tile 初始化并CLB_enableLock之后,写入:
CRG_unlockClockConfig();
CRG_setCLBSampFreqBypass(/* bit0=ETIMER, bit1=QEP */);
CRG_lockClockConfig();
说明:CLB 时钟为 100MHz,对 QEP/ETIMER 输入需 bypass
采样链路,避免丢沿。仅在配置中实际用到对应外设时才会生成对应
bit;两者都用到时 bypass 值为 0x3。
4.2.5 信号过滤与同步配置
参数 |
作用 |
生成 API |
|---|---|---|
Input Filter |
边沿/电平滤波类型选择 CLB_FILTER_NONE CLB_FILTER_RISING_EDGE CLB_FILTER_FALLING_EDGE CLB_FILTER_BOTH_EDGE |
|
Enable Sync |
异步信号同步采样(Global/Local 可见),根据输入信号源指示是同步信号还是异步信号(View 中可以确认对应信号是同步还是异步),异步信号才需要进行同步使能 |
|
Input Pipeline |
输入路径一级流水延拍,若对应信号为同步信号需要配置,异步信号输入不需要配置 |
|
4.3 LUT4 模块设置
LUT4 为 4 输入查找表,每个 Tile 可放置多个实例(当前最多为 3 个 LUT4 模块可选)。选中画布上的 LUT4 节点后,在右侧参数面板配置。
4.3.1 模块说明与实例
工具箱拖入 LUT4,实例号与硬件索引对应(如 LUT4_1 → 内部打包索引 0)。
LUT User Description:默认为 LUT4 + 序号;可手动修改,写入生成代码注释进行说明。
多个 LUT4 的输入选择会汇总进
CLB_selectLUT4Inputs/CLB_configLUT4Function。
图 4.3 LUT4 模块:四路 CSB 输入选择与逻辑方程配置。
4.3.2 四路 CSB 输入选择
面板项 |
含义 |
说明 |
|---|---|---|
Input 0 |
LUT 输入 in0 |
CSB 枚举,可与画布连线联动 |
Input 1 |
LUT 输入 in1 |
同上 |
Input 2 |
LUT 输入 in2 |
同上 |
Input 3 |
LUT 输入 in3 |
同上 |
常见源:CSB_EXTERNAL_INPUT_x、CSB_COUNTER_x_*、CSB_LUT4_x_OUTPUT、CSB_ALWAYS_0/1
等。改下拉后,另一侧会同步。
4.3.3 逻辑方程与真值表
Logic Equation 可直接填写十六进制真值(4 输入 → 16-bit,如
0xFFFE)。点击 Truth Table 打开真值表对话框。Function 公式 与 Output 勾选 为二选一:
Function 输入时:按 Enter 后会立即换算并刷新 Value (Hex) 与 Output 显示,输入公式请参考表上的信号描述;当前模式输入下Output / Value 不可手改(只读)。
Output输入时:可勾选 Output 或编辑 Value;一旦手改 Value/Output,已保存的公式会被清空,避免公式与真值不一致。
关闭对话框请点 OK / Cancel(Enter 不会关闭)。
公式原文随工程保存;再次打开时 Function 会回填,并按当前变量重新校验。若在参数面板直接改了 Hex,公式同样会被清空。
Function 支持的运算符与字符:
符号 |
含义 |
|---|---|
|
或 |
|
与 |
|
异或 |
|
非(~和!二者等价) |
|
分组 |
空格 |
可忽略 |
示例:e1|e0|s1|s0 →
0xFFFE;in0 & ~in1;!(in0 ^ in1)。非法变量、非法字符或括号不匹配时会弹出错误提示,并标红
Function 输入框。
图 4.4 真值表编辑器:Hex、Function 公式与 Output 真值表联动。
图 4.5 Function 公式输入错误检查。
最终写入配置与代码生成的仍是 Hex;方程非法或格式错误时,生成前校验会报错。
生成对应:
CLB_selectLUT4Inputs(tile, in0_pack, in1_pack, in2_pack, in3_pack);
CLB_configLUT4Function(tile, fn10, fn2);
4.4 FSM 模块设置
FSM 为状态机查找表输出,每个 Tile 可放置多个实例(当前最多为 3 个 FSM 模块可选)。选中画布上的 FSM 节点后,在右侧参数面板配置。FSM 结合外部输入、额外外部输入与状态方程,产生下一状态与 LUT 输出。
图 4.6 FSM 模块:外部输入 e0/e1 与 LUT / 下一状态方程配置。
4.4.1 外部输入 e0 / e1
面板项 |
含义 |
|---|---|
External Input 0 (e0) |
主外部输入 0 的 CSB 源 |
External Input 1 (e1) |
主外部输入 1 的 CSB 源 |
生成时打包为 CLB_selectFSMInputs
的前两路(CLB_config3CSB)。
4.4.2 额外外部输入 ex0 / ex1
面板项 |
含义 |
|---|---|
Enable EXT0 External Input |
不勾选时 FSM 的事件源采用 s0 输出作为输入;勾选后使能 Extra0, 对应信号选择外部信号输入 |
Extra External Input 0 (ex0) |
Extra0 的 CSB 源(未使能时下拉禁用) |
Enable EXT1 External Input |
不勾选时 FSM 的事件源采用 s1 输出作为输入;勾选后使能 Extra1, 对应信号选择外部信号输入 |
Extra External Input 1 (ex1) |
Extra1 的 CSB 源(未使能时下拉禁用) |
使能后,LUT 方程可用变量集会变化(见下方)。生成中 Extra 路进入
CLB_selectFSMInputs 后两参数,并使能对应
CLB_FSMn_EXTRA*_EXTRA_EXT_INx。
注意: 切换 EXT0/EXT1 使能会改变 LUT Output 可用变量名。若已填写过 LUT Output 的 Function 公式,工具会弹出提示,请按新变量修改公式;再次打开 Truth Table 时会按新变量重新校验。未填写公式时可忽略。
图 4.7 FSM EXT/Extra:额外外部输入 ex0/ex1 的使能与 CSB 源选择。
4.4.3 LUT 输出方程与下一状态方程
方程项 |
变量 |
位宽提示 |
|---|---|---|
LUT Output Equation |
随 EXT0/EXT1 使能变化(工 具动态给出) |
十六进制;Truth Table 支持 Function 公式 |
Next State 0 Equation |
|
十六进制;Truth Table 支持 Function 公式 |
Next State 1 Equation |
|
十六进制;Truth Table 支持 Function 公式 |
操作步骤:
先定 e0/e1 与是否启用 ex0/ex1。
再编辑 LUT / Next State 方程:可手填
0x…,或打开 Truth Table(Function 与 Output 二选一,规则同 4.3.3)。确认画布连线与 CSB 下拉一致(含自环场景)。
生成对应:
CLB_selectFSMInputs(tile, ext0, ext1, extra0, extra1);
CLB_configFSMLUTFunction(tile, lut_fn10, lut_fn2);
CLB_configFSMNextState(tile, ns0, ns1, ns2);
4.5 OutputLUT 模块设置
OutputLUT 将最多 3 路 CSB 输入经查找表组合后送到
CLB_OUTn,是对外输出的常用出口。
4.5.1 模块说明与输出编号
工具箱拖入 OutputLUT,实例号对应
CLB_OUT0、CLB_OUT1…User Description:默认名为 OutputLUT + 序号;可修改备注名
若该输出还要环回到 Global/Local Mux,请同时在 Tile 基础配置中检查 Enable Output Delay(CLB_OUT12/13/16–23)
图 4.8 OutputLUT:三路 CSB 输入与输出逻辑方程配置。
4.5.2 三路 CSB 输入
面板项 |
含义 |
|---|---|
Input 0 |
in0 |
Input 1 |
in1 |
Input 2 |
in2 |
与 LUT4 相同,支持画布连线与下拉同步。未使用的输入默认为
CSB_ALWAYS_0。
4.5.3 输出逻辑方程与真值表
Output Logic Equation:3 输入真值,常用形如
0xFE、0x55(十六进制)。Truth Table:规则同 4.3.3——Function 与 Output 二选一;Enter 刷新;手改 Value/Output 会清空公式。
生成调用:
CLB_configOutputLUT(tile, CLB_OUTn,
CLB_getOuputLUT(in0, in1, in2, function));
4.6 计数器(Counter)设置
每个 Tile 最多 3 个计数器(Counter0–2)。参数面板按实例配置
Load/Match,而 Reset/Event/Mode 等选择会汇总到 Tile 级
CLB_selectCounterInputs。
图 4.9 Counter:复位、事件、模式与 Load/Match 等计数器参数配置。
4.6.1 复位与事件信号源
逻辑项 |
说明 |
生成 |
|---|---|---|
Reset |
复位信号输入 CSB |
`
CLB_config3CSB`
→
|
Event |
事件 /装载触发事件相关 CSB |
第 2 参 |
Mode0 / Mode1 |
计数模式控制 CSB |
第 3、4 参 |
4.6.2 匹配值(Match1/2)与加载值
参数 |
说明 |
|---|---|
Load |
装载值 |
Match1 / Match2 |
匹配比较值 |
Event Action(Load/Add/Subtract/Shift left/Shift right) |
计数器的行为选择 |
生成:CLB_configCounterLoadMatch(tile, CLB_CTRn, load, match1, match2)。
4.6.3 高级设置(LFSR / Tap / Serialize)
选项 |
效果 |
|---|---|
Match1/2 Tap Enable + Tap Bit |
当 match
的输出
信号不选择匹配值输出时,可以选择
tap 输出模式,此时就需要使能 tap
并配置哪一 bit
进行输
出。 |
Serialize / LFSR |
对应
|
Pipeline Mode(Tile 级)会影响计数器加法使用 cnt_val 还是
last_cnt_val,见 4.1.2。
4.7 异步输出调节(AOC)设置
AOC 对 CLB 输出做异步调节(极性、门控、释放),每路 AOC 对应一组 Stage1–3。
图 4.10 AOC:Bypass、输入模式与 Stage1~Stage3 异步输出调节配置。
4.7.1 总开关与输入模式
参数 |
说明 |
|---|---|
Bypass AOC |
勾选表示禁用该
AOC( |
AOC Input Mode |
选择输入 AOC
进行处理的信号源,默认为
|
4.7.2 Stage1~Stage3 配置
阶段 |
配置项 |
说明 |
|---|---|---|
Stage1 |
Stage1 Invert |
Bypass /
取
反等( |
Stage2 |
Gate Type + Gate Signal |
Bypass / AND / OR
/
XOR;门控类型
与门控源;Gate= |
Stage3 |
Release Type + Release Signal |
Bypass / Clear / Set / D elay;Release=` AOC_RELEASE_SW` 时显示 SW Initial Value Input(默认 0) |
软件初值规则(与硬件一一对应):
仅当选择 SW 且初值为 1 时,生成写寄存器调用;初值为 0 时不写(不生成
false)。AOCn 对应:
CLB_writeSWGateControl(tile, CLB_SW_GATE_CTRLn, true)CLB_writeSWReleaseControl(tile, CLB_SW_RLS_CTRLn, true)
4.7.3 AOC 信号流处理
4.8 高级逻辑控制器(HLC)设置
HLC 在事件触发下执行短指令程序,并可配合 SPI Buffer、中断标签等使用。
图 4.11 HLC:事件源、寄存器初始化与 Program 指令配置。
4.8.1 事件与寄存器配置
每个 Event:
左侧 |
右侧 |
|---|---|
Event N Source Select (ALTSEL) 复选框 |
Event N 事件源下拉 |
未勾选 ALTSEL:HLC 事件源选择
CSB_Sel表。勾选 ALTSEL:HLC 事件源选择事件备用表作为输入(如
CLB_OUT_*/CLB_ASYNC_OUT_*),生成时附带CLB_TILE_HLC_EVT_N_ALTSEL_EN。R0–R3:初始化通用寄存器值配置,
CLB_setHLCRegisters。FIFO 初始化,向 pull FIFO 的寄存器写入初始值。
4.8.2 程序指令编辑(Program 0–3)
在 Program 分区按行填写指令文本(或选择操作码/操作数)。
工具编译为打包值,生成多条
CLB_programHLCInstruction(tile, index, packed)。每事件程序长度最大仅支持 8 条指令,每个事件的指令单独配置,具体写入方式参考 Show Instruction Guide。
图 4.12 HLC Instruction Guide:HLC 指令语法与操作码参考对话框。
4.8.3 指令集参考
类别 |
示例操作码 |
说明 |
|---|---|---|
传送 |
|
寄存器/操作数传送 |
运算 |
|
算术逻辑 |
其它 |
见 |
以驱动枚举为准 |
语法以工具编译器接受的格式为准;编译失败时生成前会报错。
4.9 串行外设接口(SPI)设置
图 4.13 SPI:SPI Buffer Access、Load 触发与移位配置。
4.9.1 总线访问开启与互斥规则
勾选启用 SPI Buffer Access。
同一工程通常只允许一个 Tile 启用;多 Tile 同时启用会触发互斥校验错误。下图为在 Tile0 使能 SPI 传输的情况下,又在 Tile1 中配置了 SPI 使能,此时就会报错。
图 4.14 SPI 互斥报错:多个 Tile 同时启用 SPI Buffer Access 时的校验错误提示。
生成:
CLB_enableSPIBufferAccess。
4.9.2 触发信号与移位配置
参数 |
说明 |
API |
|---|---|---|
Load trigger |
装载触发源 选择,在事件发生时产生 R0 的数据写入到 SPI 的 Rx buffer;CSB 源 |
` CLB_configSPIBu fferLoadSignal` |
Shift |
移位位数 |
|
可与 HLC 事件、OutputLUT 配合完成「计算 → 导出」路径(见第 2 章示例 B)。
4.10 时钟分频器(PRSTRB)设置
4.10.1 分频器启用与时钟模式选择
图 4.15 PRSTRB:时钟预分频与 Strobe 模式配置。
模式 |
面板意图 |
生成 API |
|---|---|---|
Clock Presca lar(仅使能 Enable Prescalar) |
时钟预分频(Reset Value) |
|
Strob e(同时使能 Enable Prescalar 和 Enable Strobe Mode) |
Strobe 抽点(Tap Select Bit) |
|
4.10.2 分频输出作为时钟源
在画布上保留 PRSTRB 输出端口。
Input 选 Local,并将 Mux 选到 PRSTRB 相关项(如
CLB_LOCAL_IN_MUX_CLB_PSCLK)。将 PRSTRB 输出连到该 Input,形成「分频时钟进 CLB」路径。
5 校验、代码生成与项目导出
5.1 错误校验机制
5.1.1 触发时机
生成代码前强制校验
部分界面操作会即时提示(如互斥)
5.1.2 列表解读
级别 |
含义 |
处理 |
|---|---|---|
Error |
阻止生成 |
按 Location 定位模块并修正 |
Warning |
可生成但有风险 |
建议处理后再交付 |
5.2 生成代码与输出
5.2.1 输出文件夹
工具栏点击 Generate Code。
选择输出目录(建议独立
Output/,勿直接覆盖正在调试的固件目录,除非有意更新)。确认后开始校验 → 渲染模板 → 写文件。
5.2.2 覆盖策略
若目标已存在
clb_user_config.c/.h等同名文件,按提示确认是否覆盖。建议用 Git 管理生成物,或生成前备份。
手工改过的生成文件会在下次生成时被覆盖,业务逻辑应放在工程其他源文件中。
5.2.3 生成文件清单
文件 |
说明 |
|---|---|
|
各使能 Tile 的 |
|
对外函数声明 |
|
工具工程(可再次打开编辑) |
|
全部已使能 Tile 的连接关系(非仅当前活动 Tile) |
文件头包含工程名、芯片型号、生成时间戳(Copyright 年份与公司名由模板变量填充)。
5.2.4 集成到 MCU 工程
将
.c/.h加入 IDE 工程并加入编译。确保包含路径能找到
et6x_clb.h,并编译链接et6x_clb.c(或厂商等价驱动)。在系统初始化中调用
CLB_UserConfig_Init()(内部会disableLock→ 各 Tile Init →enableLock;若配置了 QEP/ETIMER 输入,随后还会 unlock CRG →CRG_setCLBSampFreqBypass→ lock CRG)。按需补充:
CLB_inputXBAR_init/CLB_outputXBAR_init、GPIO 复用等(本工具不生成片级 XBAR)。若使用 SPI Buffer / 中断,在应用层补充对应中断与外设初始化。
当生成文件包含
#include "et6x_crg.h"时,请确保 MCU 工程能找到对应 CRG 头文件与实现。
5.3 项目保存
5.3.1 格式
.clbcg:工具原生工程(JSON 结构)可用 Save As 复制工程
5.3.2 另存为
菜单 File → Save As,选择新路径即可。
5.4 配置图表导出(DOT)
5.4.1 使用场景
文档、评审、对比多 Tile 互联关系。菜单/工具栏导出 .dot 时导出
所有已使能 Tile(与生成代码时的 .dot 一致)。
5.4.2 使用 Graphviz 查看
安装 Graphviz
示例:
dot -Tpng project.dot -o project.png本工具不再内置导出 PNG
6 典型场景与常见故障排查
6.1 典型使用示例
6.1.1 单 Tile 独立逻辑:见 2.6
6.1.2 多 Tile 协作:分别启用多个 Tile,通过 Local/Global Mux 与 OUT 环回(注意 Output Delay)互联
6.2 常见互斥警告处理
6.2.1 SPI 总线互斥
仅保留一个 Tile 的 SPI Access,关闭其余 Tile 的 SPI 使能。
6.2.2 Tile 数量不匹配
打开旧工程时若芯片 Tile 数变化,按提示调整启用 Tile 或更换型号。
6.2.3 跨层级依赖不合法
检查 CSB / Mux 是否引用了未配置模块或越界端口,按校验 Location 修正。
6.3 生成失败排查
现象 |
可能原因 |
处理 |
|---|---|---|
驱动丢失 |
|
补齐 |
模块超限 |
超过硬件最大实例数 |
删除多余节点 |
校验不通过 |
参数非法 / 互斥 |
按错误列表逐项修复 |
模板缺失 |
|
重新发布或从源码复制模板 |
7 附录
7.1 专业术语表
术语 |
说明 |
|---|---|
CLB |
Configurable Logic Block,可配置逻辑块 |
Tile |
CLB 内的逻辑单元组 |
Mux |
多路选择器(Global / Local / GP) |
Pipeline |
流水线延拍 |
LUT |
查找表逻辑 |
FSM |
有限状态机 |
HLC |
High-Level Controller,高级逻辑控制器 |
AOC |
Asynchronous Output Conditioner,异步输出调节 |
CSB |
内部信号总线选择 |
PRSTRB |
预分频 / Strobe 模块 |