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 依赖文件与目录结构

可执行文件同目录建议具备:

路径 / 文件

说明

ClbConfigTool.App.exe

主程序

chipSeries.xlsx

芯片系列与型 号表(表示当前已 包含可支持系列)

Vendor_Drivers/

驱动(如 et6x_clb.h / et6x_clb.c),用于元数据提 取与代码生成对齐

Templates/

代码生成模 板(clb_use r_config.c.tpl / .h.tpl

使用手册.pdf

本手册 (帮助菜单读取)

ClbAgentHost.exe

配套 Agent 进程(由 主程序按需调用)

1.5 运行限制说明

  • 单实例互斥:同一时间只能运行一个 GUI 实例。再次双击 exe 会提示并退出,避免多开导致硬件/配置冲突。

  • CLI 模式:使用 --cli 启动时不受 GUI 互斥锁限制(用于自动化或脚本)。

  • 系列互斥:新建项目时每次只能选择 一个 产品系列。

2 快速上手

快速配置可按下列步骤完成:

  1. 启动与欢迎界面:双击 exe,选择新建或打开工程。

  2. 新建项目与芯片选型:左侧勾选一个产品系列,右侧选择芯片型号,点击开始项目。

  3. 基础配置与模块添加:确认活动 Tile 并启用,从工具箱拖拽模块到画布。

  4. 信号连接与参数设置:选中节点,配置 Mux / 滤波 / 方程,必要时查看信号映射表。

  5. 生成代码与输出结果:点击生成并选择输出目录,获取 C 文件、工程文件与 DOT 图。

  6. 集成到 MCU 工程:将 clb_user_config.c/.h 加入工程并调用 Init 函数。

2.1 软件启动与欢迎界面

  1. 双击桌面快捷方式或 ClbConfigTool.App.exe

  2. 出现 欢迎窗口,提供 New Project / Open Project

../_images/image-20260717104118142.png

图 2.1 欢迎界面:启动软件后的初始窗口,可通过 New ProjectOpen Project 进入配置。

  1. 菜单栏提供 FileHelp 菜单:

../_images/fig_welcome_file_menu.png

图 2.2 File 菜单:欢迎界面的文件操作菜单。

  • New Project:新建工程

  • Open Project:打开已保存的工程配置文件(*.clbcg

  • Exit:退出当前软件

../_images/fig_welcome_help_menu.png

图 2.3 Help 菜单:欢迎界面的帮助菜单。

  • User Manual:打开用户手册(本文档),用于指导软件的使用

  • Feedback:链接至本公司官网 https://www.etmcu.com,可提交工具问题、Bug 或功能优化建议

2.2 新建项目与芯片型号选择

  1. 点击 New Project

  2. 左侧勾选 一个 产品系列;右侧选择具体芯片型号行。

  3. 点击 Start Project,进入主配置窗口。

../_images/image-20260717110209875.png

图 2.4 新建项目芯片选型:左侧选择产品系列,右侧选择具体芯片型号后点击 Start Project

2.2.1 打开已有项目

如果想在原有的工程基础上进行增删配置,可以选择Open Project选择原先保存的相关配置问题即可。

../_images/image-20260723134028541.png

图 2.5 选择打开项目后进行输入文件选择

2.3 基础配置与模块添加

  1. 在左侧 / 参数区确认当前 Active Tile,勾选 Enable CLB Tile

  2. 从工具箱拖拽模块到画布(如 Input、Counter、OutputLUT)。

  3. 按需配置 Enable Pipeline ModeOverriding OutputsEnable Output Delay 等 Tile 基础项。

../_images/image-20260717111408208.png

图 2.6 基础配置与模块添加:启用 Tile 后,从工具箱拖拽模块到画布并配置 Tile 基础参数。

2.4 信号连接与参数设置

  1. 在Build中选中画布节点中的 Input_1,在右侧参数面板配置 Mux、滤波、方程等。

../_images/image-20260717111821539.png

图 2.7 Input 参数配置:选中 Input 模块后在参数面板设置输入类型、Mux 源与滤波等。

  1. Input 选择 Local / Global Mux 时,可点击下拉框右侧 View signal map… 查看完整信号表;下方提示行显示当前 Tile 对应信号名。

../_images/image-20260717112102842.png

图 2.8 View signal map:打开 Global / Local 信号对照表,确认 Mux 枚举与物理信号名的对应关系。

  1. 模块之间按端口规则连线(输出可扇出,输入通常单源)。

2.5 生成代码与输出结果

  1. 工具栏点击 Generate Code,选择输出目录。

../_images/image-20260717112640712.png

图 2.9 生成代码:点击工具栏 Generate Code 并选择输出目录,校验通过后写出配置代码。

  1. 成功后可在目录中查看:

    • clb_user_config.c / clb_user_config.h

    • 工程文件(如 项目名.clbcg

    • 连接关系图 项目名.dot(可用 Graphviz 查看)

../_images/fig_generate_output_files.png

图 2.10 生成输出文件:输出目录中的 C 源文件、头文件、工程文件与 DOT 连接图。

  1. 将生成的 .c/.h 加入 MCU 工程,并链接 Vendor_Drivers 中的 CLB 驱动。

2.6 典型示例 A:GPIO 故障输入滤波 + 计数器

对应软件安装包中的 Example/CLB 示例工程思路:CLB_gpio_fault_input_filter_counter
可在工具中按下列步骤复现,并对照生成代码。

配置要点(Tile0):

步骤

工具操作

对应驱动意图

1

启用 Tile0

CLB_enableCLB(CLB_TILE0)

2

Input0:Local Mux → CLB_LOCAL_IN_M UX_INPUT0;Filter → Any Edge

滤波后的故障输入

3

Input1:Local Mux → CLB_ LOCAL_IN_MUX_INPUT1

计数器复位源

4

Counter0:Mode0=EX T_IN0,Mode1=ALWAYS_1 ,Reset=EXT_IN1;开启 Match1/2 Tap

上升计数 + 匹配输出

5

OutputLUT0/1:分别取 Counter0 Match1 / Match2,方程 0xfe

匹配结果送出

../_images/image-20260717113935264.png

图 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 编写 ADD R1, R0(或等价指令)

事件触发累加

3

HLC 寄存器 R0=0,R1=1

CLB_setHLCRegisters

4

SPI:使能 Buffer Access;Load 信号 = EXT_IN1

仅允许 一个 Tile 启用 SPI

5

启用 Tile

CLB_enableCLB

参考 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();
}
../_images/image-20260717114806364.png

图 2.12 示例 B 配置:HLC 与 SPI Buffer 协同完成数据导出的示例配置。

3 界面与操作说明

3.1 主窗口整体布局

主窗口通常包含:

区域

作用

菜单栏

文件、编辑、帮助等

工具栏

生成代码、刷新连接、撤销/重做、活动 Tile 切换

工具箱

可拖拽模块列表

画布

节点放置与连线

参数面板

当前选中节点 / Tile 基础配置

状态指示

输出 LED、覆盖掩码指示等

../_images/image-20260717134128121.png

图 3.1 主窗口布局:菜单栏、工具栏、工具箱、画布、参数面板与状态指示区的整体分布。

3.2 菜单栏与文件管理

File 菜单:

../_images/fig_main_file_menu.png

图 3.2 主界面 File 菜单:生成代码、另存工程、导出 DOT 与关闭项目等操作。

  • Generate Code:校验并生成 C 源文件、头文件与工程文件

  • Save As:另存 .clbcg 工程

  • Export DOT:导出连接关系图

  • Close:关闭当前工程

Edit 菜单:

../_images/fig_main_edit_menu.png

图 3.3 Edit 菜单:撤销、重做等编辑操作。

Help 菜单:

  • User Manual:打开用户手册(本文档)

  • Feedback:打开官网 https://www.etmcu.com 提交问题反馈与建议

3.3 工具栏与操作按钮

../_images/image-20260717134822871.png

图 3.4 工具栏:常用操作按钮与活动 Tile 切换控件。

控件

说明

Generate Code

校验通过后写出 .c/. h.clbcg.dot

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)

../_images/fig_canvas_context_menu.png

图 3.5 画布右键菜单:对选中节点执行删除等操作。

  • 旋转:针对仅单个配置的功能(SPI:raw-latex:HLC)可以进行旋转选择,用于位置放置,每次顺时针90°。

    ../_images/fig_spi.png
  • 连线:输出端口可连到多个合法输入;输入端通常只接受一个源

  • 自环连线:当某模块输入选择了同一模块自身的输出(例如 Counter 的 Reset 选 CSB_COUNTER_n_MATCH1)时,画布会绘制绕出模块外的自环连线,便于确认参数与拓扑一致。

../_images/image-20260722145659437.png

图 3.6 模块自环连线:同一模块输出回连到自身输入时的弧形连线。

  • 排布参考:画布标题区可在「编辑布局 / 排布参考」间切换。排布参考模式按推荐相对位置只读展示模块布局,便于对照规范摆放。

../_images/image-20260722145334970.png

图 3.7 排布参考视图。

3.6 状态指示灯与监控区

  • 输出 LED 反映 Overriding / 输出相关状态。当选择某路输出使能后 CLB_OUT_EN 使能为 1 时,对应模块源信号会被 CLB 接管。

  • 显示区按列排布:第一列表示输出 CLB_OUTPUT_00CLB_OUTPUT_07,每一列表示 8 路信号。

../_images/fig_output_led_indicator.png

图 3.8 输出覆盖指示灯:按列显示各输出通道的覆盖使能状态。

4 核心配置指南

4.1 Tile 全局基础设置

在未选中具体模块时,参数区显示当前 Tile 的基础配置。

../_images/image-20260717142723239.png

图 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_0031,生成 CLB_setOutputMask

  • Lock Overriding Outputs Setting:输出消隐功能,使能后屏蔽对输出使能的配置;有选中项时可锁定,避免程序运行中误修改。

4.1.4 输出延时(Enable Output Delay)

当 CLB_OUT12/13/16–23 等信号环回再作为 CLB 输入时,需配置输出延时 1 cycle 输出:

选项

对应 bit(CLB_ setOutputDelay

去向

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)设置

../_images/image-20260717144257940.png

图 4.2 Input 模块:输入类型、Mux 源、滤波与同步等参数配置面板。

4.2.1 输入类型选择 — Input Type

三种类型:

  1. Use Memory Mapped GPREG BIT:选择软件输入信号,通过 GPREG 位输入,可设 Initial Value(0/1)

  2. Use Global Mux:全局外设信号(具体信号源见 View signal map

  3. Use Local Mux:本 Tile 相关本地信号(具体信号源见 View signal map

4.2.2 全局信号映射与选择 — Mux Input Source

  1. Input Type 选 Use Global Mux

  2. Mux Input Source 下拉中选择 CLB_GLOBAL_IN_MUX_* 枚举项(下拉框宽度与其他参数项一致)。

  3. 下拉框右侧同时显示:

    • 当前选中项对应的信号提示(序号、信号名、同步/异步说明)

    • View signal map… 链接:打开完整 Global 信号对照表

  4. 生成代码会额外写入本地信号源选择全局输入 CLB_configLocalInputMux(..., CLB_LOCAL_IN_MUX_GLOBAL_IN),保证路径完整。

4.2.3 本地信号映射与选择 — Mux Input Source

  1. Input Type 选 Use Local Mux

  2. Mux Input Source 切换为 CLB_LOCAL_IN_MUX_* 列表。

  3. 下拉框右侧

    • 实时提示:[序号] TileN: 信号名 说明(随当前活动 Tile 变化)

    • View signal map…:打开 Local 对照表;表中当前 Tile 列高亮,便于确认「同一枚举序号在不同 Tile 上可能对应不同外设实例」

  4. 仅生成 CLB_configLocalInputMux

4.2.4 QEP / ETIMER 输入与 CRG 采样 bypass

当任意已启用 Tile 的某个 Input 选择了 Local Mux 中的 QEPETIMER 相关源(枚举名含 QEP / ETIMER)时,生成代码会自动:

  1. clb_user_config.h 中增加 #include "et6x_crg.h"

  2. 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

CLB_selectInputFilter

Enable Sync

异步信号同步采样(Global/Local 可见),根据输入信号源指示是同步信号还是异步信号(View 中可以确认对应信号是同步还是异步),异步信号才需要进行同步使能

CLB_enableSynchronization / disable

Input Pipeline

输入路径一级流水延拍,若对应信号为同步信号需要配置,异步信号输入不需要配置

CLB_enableInputPipelineMode / disable

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

../_images/image-20260717145856966.png

图 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_xCSB_COUNTER_x_*CSB_LUT4_x_OUTPUTCSB_ALWAYS_0/1 等。改下拉后,另一侧会同步。

4.3.3 逻辑方程与真值表

  1. Logic Equation 可直接填写十六进制真值(4 输入 → 16-bit,如 0xFFFE)。

  2. 点击 Truth Table 打开真值表对话框。Function 公式Output 勾选 为二选一:

    • Function 输入时:按 Enter 后会立即换算并刷新 Value (Hex) 与 Output 显示,输入公式请参考表上的信号描述;当前模式输入下Output / Value 不可手改(只读)。

    • Output输入时:可勾选 Output 或编辑 Value;一旦手改 Value/Output,已保存的公式会被清空,避免公式与真值不一致。

    • 关闭对话框请点 OK / Cancel(Enter 不会关闭)。

  3. 公式原文随工程保存;再次打开时 Function 会回填,并按当前变量重新校验。若在参数面板直接改了 Hex,公式同样会被清空。

Function 支持的运算符与字符:

符号

含义

|

&

^

异或

~!

非(~和!二者等价)

( )

分组

空格

可忽略

示例:e1|e0|s1|s00xFFFEin0 & ~in1!(in0 ^ in1)。非法变量、非法字符或括号不匹配时会弹出错误提示,并标红 Function 输入框。

../_images/image-20260722150448090.png

图 4.4 真值表编辑器:Hex、Function 公式与 Output 真值表联动。

../_images/image-20260722150613623.png

图 4.5 Function 公式输入错误检查。

  1. 最终写入配置与代码生成的仍是 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 输出。

../_images/image-20260717150815596.png

图 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 时会按新变量重新校验。未填写公式时可忽略。

../_images/image-20260722151331276.png

图 4.7 FSM EXT/Extra:额外外部输入 ex0/ex1 的使能与 CSB 源选择。

4.4.3 LUT 输出方程与下一状态方程

方程项

变量

位宽提示

LUT Output Equation

随 EXT0/EXT1 使能变化(工 具动态给出)

十六进制;Truth Table 支持 Function 公式

Next State 0 Equation

{ e1, e 0, s1, s0 }

十六进制;Truth Table 支持 Function 公式

Next State 1 Equation

{ e1, e 0, s1, s0 }

十六进制;Truth Table 支持 Function 公式

操作步骤:

  1. 先定 e0/e1 与是否启用 ex0/ex1。

  2. 再编辑 LUT / Next State 方程:可手填 0x…,或打开 Truth Table(Function 与 Output 二选一,规则同 4.3.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_OUT0CLB_OUT1

  • User Description:默认名为 OutputLUT + 序号;可修改备注名

  • 若该输出还要环回到 Global/Local Mux,请同时在 Tile 基础配置中检查 Enable Output Delay(CLB_OUT12/13/16–23)

../_images/image-20260717152150439.png

图 4.8 OutputLUT:三路 CSB 输入与输出逻辑方程配置。

4.5.2 三路 CSB 输入

面板项

含义

Input 0

in0

Input 1

in1

Input 2

in2

与 LUT4 相同,支持画布连线与下拉同步。未使用的输入默认为 CSB_ALWAYS_0

4.5.3 输出逻辑方程与真值表

  1. Output Logic Equation:3 输入真值,常用形如 0xFE0x55(十六进制)。

  2. Truth Table:规则同 4.3.3——Function 与 Output 二选一;Enter 刷新;手改 Value/Output 会清空公式。

  3. 生成调用:

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

../_images/image-20260717152518219.png

图 4.9 Counter:复位、事件、模式与 Load/Match 等计数器参数配置。

4.6.1 复位与事件信号源

逻辑项

说明

生成

Reset

复位信号输入 CSB

` CLB_config3CSB`CLB_sele ctCounterInputs 第 1 参

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 进行输 出。CLB_configMiscCtrlModes + CLB_initTapSel / CLB_configCounterTapSelects

Serialize / LFSR

对应 CLB_COUNTERn_SERIALIZE_EN / LFSR_EN

Pipeline Mode(Tile 级)会影响计数器加法使用 cnt_val 还是 last_cnt_val,见 4.1.2。

4.7 异步输出调节(AOC)设置

AOC 对 CLB 输出做异步调节(极性、门控、释放),每路 AOC 对应一组 Stage1–3。

../_images/image-20260717153806811.png

图 4.10 AOC:Bypass、输入模式与 Stage1~Stage3 异步输出调节配置。

4.7.1 总开关与输入模式

参数

说明

Bypass AOC

勾选表示禁用该 AOC(aocEn = DISABLE

AOC Input Mode

选择输入 AOC 进行处理的信号源,默认为 CLB OUTPUT delayed by 1 cycle 表示 OutputLUTx 对应的输出,或 CLB INPUTrawInputSel 表示 Inputx 的输出信号作为输入

4.7.2 Stage1~Stage3 配置

阶段

配置项

说明

Stage1

Stage1 Invert

Bypass / 取 反等(AOC_Lev el1_Process

Stage2

Gate Type + Gate Signal

Bypass / AND / OR / XOR;门控类型 与门控源;Gate=AOC_GATING_SW 时显示 SW Initial Value Input(默认 0)

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 信号流处理

数据路径:Raw Input → Stage1(极性)→ Stage2(Gate)→ Stage3(Release)→ 异步输出。
旁路某一级时,该级 Type 选 Bypass,信号直通下一级。

4.8 高级逻辑控制器(HLC)设置

HLC 在事件触发下执行短指令程序,并可配合 SPI Buffer、中断标签等使用。

../_images/image-20260717154228702.png

图 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)

  1. 在 Program 分区按行填写指令文本(或选择操作码/操作数)。

  2. 工具编译为打包值,生成多条 CLB_programHLCInstruction(tile, index, packed)

  3. 每事件程序长度最大仅支持 8 条指令,每个事件的指令单独配置,具体写入方式参考 Show Instruction Guide

../_images/image-20260717155120619.png

图 4.12 HLC Instruction Guide:HLC 指令语法与操作码参考对话框。

4.8.3 指令集参考

类别

示例操作码

说明

传送

HLC_OPCODE_MOV

寄存器/操作数传送

运算

HLC_OPCODE_ADD

算术逻辑

其它

et6x_clb.h

以驱动枚举为准

语法以工具编译器接受的格式为准;编译失败时生成前会报错。

4.9 串行外设接口(SPI)设置

../_images/image-20260717155357101.png

图 4.13 SPI:SPI Buffer Access、Load 触发与移位配置。

4.9.1 总线访问开启与互斥规则

  1. 勾选启用 SPI Buffer Access。

  2. 同一工程通常只允许一个 Tile 启用;多 Tile 同时启用会触发互斥校验错误。下图为在 Tile0 使能 SPI 传输的情况下,又在 Tile1 中配置了 SPI 使能,此时就会报错。

../_images/image-20260717155253414.png

图 4.14 SPI 互斥报错:多个 Tile 同时启用 SPI Buffer Access 时的校验错误提示。

  1. 生成:CLB_enableSPIBufferAccess

4.9.2 触发信号与移位配置

参数

说明

API

Load trigger

装载触发源 选择,在事件发生时产生 R0 的数据写入到 SPI 的 Rx buffer;CSB 源

` CLB_configSPIBu fferLoadSignal`

Shift

移位位数

CLB_config SPIBufferShift

可与 HLC 事件、OutputLUT 配合完成「计算 → 导出」路径(见第 2 章示例 B)。

4.10 时钟分频器(PRSTRB)设置

4.10.1 分频器启用与时钟模式选择

../_images/image-20260717155841534.png

图 4.15 PRSTRB:时钟预分频与 Strobe 模式配置。

模式

面板意图

生成 API

Clock Presca lar(仅使能 Enable Prescalar)

时钟预分频(Reset Value)

CLB_configureCloc kPrescalar(tile, reset)

Strob e(同时使能 Enable Prescalar 和 Enable Strobe Mode)

Strobe 抽点(Tap Select Bit)

CLB_configu reStrobeMode(tile, tap)

4.10.2 分频输出作为时钟源

  1. 在画布上保留 PRSTRB 输出端口。

  2. Input 选 Local,并将 Mux 选到 PRSTRB 相关项(如 CLB_LOCAL_IN_MUX_CLB_PSCLK)。

  3. 将 PRSTRB 输出连到该 Input,形成「分频时钟进 CLB」路径。

5 校验、代码生成与项目导出

5.1 错误校验机制

5.1.1 触发时机

  • 生成代码前强制校验

  • 部分界面操作会即时提示(如互斥)

5.1.2 列表解读

级别

含义

处理

Error

阻止生成

按 Location 定位模块并修正

Warning

可生成但有风险

建议处理后再交付

5.2 生成代码与输出

5.2.1 输出文件夹

  1. 工具栏点击 Generate Code

  2. 选择输出目录(建议独立 Output/,勿直接覆盖正在调试的固件目录,除非有意更新)。

  3. 确认后开始校验 → 渲染模板 → 写文件。

5.2.2 覆盖策略

  • 若目标已存在 clb_user_config.c/.h 等同名文件,按提示确认是否覆盖。

  • 建议用 Git 管理生成物,或生成前备份。

  • 手工改过的生成文件会在下次生成时被覆盖,业务逻辑应放在工程其他源文件中。

5.2.3 生成文件清单

文件

说明

clb_user_config.c

各使能 Tile 的 CLB_TileN_Init + CLB_UserConfig_Init

clb_user_config.h

对外函数声明

*.clbcg

工具工程(可再次打开编辑)

*.dot

全部已使能 Tile 的连接关系(非仅当前活动 Tile)

文件头包含工程名、芯片型号、生成时间戳(Copyright 年份与公司名由模板变量填充)。

5.2.4 集成到 MCU 工程

  1. .c/.h 加入 IDE 工程并加入编译。

  2. 确保包含路径能找到 et6x_clb.h,并编译链接 et6x_clb.c(或厂商等价驱动)。

  3. 在系统初始化中调用 CLB_UserConfig_Init()(内部会 disableLock → 各 Tile Init → enableLock;若配置了 QEP/ETIMER 输入,随后还会 unlock CRG → CRG_setCLBSampFreqBypass → lock CRG)。

  4. 按需补充:CLB_inputXBAR_init / CLB_outputXBAR_init、GPIO 复用等(本工具不生成片级 XBAR)。

  5. 若使用 SPI Buffer / 中断,在应用层补充对应中断与外设初始化。

  6. 当生成文件包含 #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 查看

  1. 安装 Graphviz

  2. 示例:dot -Tpng project.dot -o project.png

  3. 本工具不再内置导出 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 生成失败排查

现象

可能原因

处理

驱动丢失

Vendor_Drivers 路径错误

补齐 et6x_clb.h/.c

模块超限

超过硬件最大实例数

删除多余节点

校验不通过

参数非法 / 互斥

按错误列表逐项修复

模板缺失

Templates 未复制到运行目录

重新发布或从源码复制模板

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 模块