This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDSCNCD28379D:如何使用 SysConfig 正确配置 CLB?

Guru**** 2332530 points
Other Parts Discussed in Thread: SYSCONFIG, TMS320F28379D, TMDSCNCD28379D, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1476765/tmdscncd28379d-how-to-configure-the-clb-properly-using-sysconfig

器件型号:TMDSCNCD28379D
主题中讨论的其他器件:SysConfigTMS320F28379D、、 C2000WARE

工具与软件:

您好!

我试图使用 CLB 工具来生成非常简单的逻辑、但对我来说很难。 请帮帮我。

我有5个来自5个 GPIO 的信号、比如 GPIO1、GPIO2、GPIO3、GPIO4、 GPIO5.我尝试使用 CLB 使它们与一个 GPIO (例如 GPIO6)进行"或"运算。 在 SysConfig 中、我找到了5个与 CLB 相关的项目、但不知道它们是如何相互连接的。

步骤1:CLB INPUTXBAR 输入下的输入 GPIO 配置

1.1:CLB INPUTXBAR 输入的数量=输入 GPIO 的数量?

步骤2:CLBXBAR 下的信号配置

2.1:CLBXBAR 数= GPIO 数?

2.2:辅助信号输入选择:8个 AUXSIGx 中的一个、我应该选择其中一个。 它看起来是 CLB X-BAR 架构中显示的 CLB 输出。 这是信号输入的名称。 该信号连接了什么、本例中的一个输入 GPIO? 在何处确认连接?

步骤3:CLB 下的逻辑块设计

3.1:我需要为 i0、i1、i2、i3选择什么? 它们应该是来自 GPIO 的信号。

3.2:我要处理来自5个 GPIO 的5个信号。 由于每个 CLB 都有三个4输入 LUT、我是否只能有1个 CLB?

LUT0公式:i0 | i1| i2 | i3 = LUT 0输出。 i0来自 GPIO0、i1来自 GPIO1、i2来自 GPIO2、i3来自 GPIO3。

LUT1公式:i0 | i1 | i2 = LUT 1输出。 i0来自 GPIO4、i1来自 GPIO5、i2来自 LUT 0输出。

步骤4:CLB OUTPUTXBAR 下的输出 GPIO 配置

4.1:CLB OUTPUTXBAR 的数量=输出 GPIO 的数量?

4.2:如何确认 LUT 1输出是否已连接至指定的输出 GPIO、比如本例中的 GPIO6?

谢谢!

洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hongmei:

    是否在 SysConfig 中选择了正确的器件。 在 F28379D 器件上、您无法访问 CLB OUTPUXBAR 或 CLB INPUTXBAR。  

    GPIO 输入必须来自 INPUTXBAR + CLBXBAR。 GPIO 输出将通过 OUTPUTXBAR。

    您可以参阅 C2000 Academy 教程中的"CLB"一章、有一个专门介绍通过 CLB 的 GPIO 输入和 GPIO 输出的部分、我认为这会对您非常有帮助。

    您应该为每个 GPIO 配置一个 INPUTXBAR + CLBXBAR 组合、并将它们作为 CLB 模块的边界输入。 请参阅下面的示例以路由 GPIO0

    输入所需的所有 GPIO 后、您可以将逻辑块配置附加到 CLB 并配置 LUT0。

    使用单个4输入 LUT、一次只能同时使用或4个 GPIO。 因此、您需要使用2个 LUT (LUT0和 LUT1)。

    您提供的 LUT 公式是正确的。 示例如下

    请注意、边界输入0是指上面配置为 CLB 输入0的内容。

    对于 CLB 的输出、您需要使用输出 LUT、特别是 OUTLUT4或 OUTLUT5、因为这是唯一可通过 OUTPUTXBAR 访问的 LUT

    最后、您可以配置 OUTPUTXBAR。 从 Source 中选择 Auto Enable Mux Settings (自动启用多路复用器设置)、然后在 Source Signals 中选择 CLB1 OUT4会很有帮助。 这来自具有 OUTLUT4公式输出的 CLB1外设

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    首先感谢您宝贵的时间和详细的解释,这帮了我很多。 现在、我切换到了 TMS320f28379D。 我们使用 TMDSCNCD28379D 控制卡、并且 CLB 的设置是相同的、对吗?

    对于 C2000 Academy 教程中的 CLB 一章、您是否参考了这4个视频?  https://www.ti.com/video/series/C2000-configurable-logic-block.html?keyMatch=C2000%20Academy%20tutorial%20clb&tisearch=universal_search。是的、对您有所帮助。

    我仍然对路由感到困惑、因为名称不同、我不确定我是否正确理解。 您能回答以下问题吗?

    在 INPUTXBAR 输入下:GPIO 传递给 XBAR_Input1

    XBAR_Input1、... XBAR_INPUT14。 那么、我可以处理14个 GPIO、对吧?

    2.在 CLBXBAR 下:INPUTXBAR1 (MUX01)传递到 AUXSIG0

    INPUTXBAR1 (MUX01)是否引用了#1中的 XBAR_INPUT1?

    XBAR_INPUT1、...XBAR_INPUT6。 如果 XBAR_INPUTx=INPUTXBARx、则实际上只能处理6个 GPIO、对吗?

    3.在 CLB 下:CLB X-BAR AUXSIG0传递到 CLB 输入0

    CLB X-BAR AUXSIG0是否指上文#2中的 AUXSIG0?

    4.在逻辑块下:边界输入 x 指 CLB 输入 x。我是否正确理解您?

    BOUNDARY INPUT 0 = CLB INPUT 0、...BOUNDARY INPUT 7 = CLB INPUT 7。

    谢谢!

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hongmei:

    我指的是这个链接: https://dev.ti.com/tirex/local?id=source_c2000_advanced_topics_c2000_configurable_logic_block&packageId=C28X-ACADEMY

    [报价用户 id="267327" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1476765/tmdscncd28379d-how-to-configure-the-clb-properly-using-sysconfig/5671256 #5671256"]

    在 INPUTXBAR 输入下:GPIO 传递给 XBAR_Input1

    XBAR_Input1、... XBAR_INPUT14。 那么、我可以处理14个 GPIO、对吧?

    [报价]

    是的、正确、 有14个 INPUTXBAR。 不过、请注意、这些 INPUTXBAR 不仅用于 CLB、还可以路由到 EPWMXBAR 和 OUTPUTXBAR、eCAP 和 ADC、因此在分配资源时请记住这一点。

    [报价用户 id="267327" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1476765/tmdscncd28379d-how-to-configure-the-clb-properly-using-sysconfig/5671256 #5671256"]

    INPUTXBAR1 (MUX01)是否引用了#1中的 XBAR_INPUT1?

    XBAR_INPUT1、...XBAR_INPUT6。 如果 XBAR_INPUTx=INPUTXBARx、则实际上只能处理6个 GPIO、对吗?

    [报价]

    是的、正确。 XBAR_Input1与 INPUTXBAR1相同。 并且最多可以发送6个信号到 CLBXBAR/EPWMXBAR/OUTPUTXBAR。 其余用于 eCAP 等其他外设。

    CLB X-BAR AUXSIG0是否指上文#2中的 AUXSIG0?

    没错、AUXSIG0在两种情况下的含义相同。

    边界输入0 = CLB 输入0、...边界输入7 = CLB 输入7.

    是的、这是正确的、CLB 输入编号与边界输入编号匹配

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    非常感谢! 您在很大程度上帮助了我了解了 CLB 架构。 我将开始在我们的项目中对其进行设置。 我将尝试在锁存信号之前使用计数器来滤除一些噪声。

    此处的信号指 LUT 0输出(为了简化它、假设是 x)。 如果(x=1)事件发生 重复该波形 对于50us (计数到5000、然后复位到0)、则锁存信号 x=1、否则 x=0。 我以前在 CPLD 中做过这件事、似乎我很难使用 CLB、而且似乎很难使用一个计数器来实现它。

    #1:什么是事件触发器、要处理的信号? 请参见下图。

    #2:什么是事件加载值? 请参见下图。

    #3:这是否意味着事件触发时计数会增加? 请参见下图。

    4.计数器的输出有零、匹配1、匹配2、计数器值。

    这是否意味着如果 counter=zero、counter output=1;如果 counter=match1、counter output=1;如果 counter=match2、 COUNTER OUTPUT = 1;如果 COUNTER = COUNTER 值、则 COUNTER OUTPUT = 1?

    5.在哪里查看计数器和 FSM 的详细描述?

    谢谢!

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    似乎一个计数器就足够了我的情况。 但我不知道计数器设置是否正确、并且如果输入 x = LUT 2输出、我也不知道在哪里可以找到输出 y。 我的输入 x 和输出 y 在左图中。

    提前感谢您的帮助、

    祝您周末愉快!

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hongmei:

    听起来您至少需要一个 FSM 和一个计数器来完成锁存逻辑。 对于输入、不仅包括信号本身、还包括信号的下降沿检测可能会有所帮助。 这样、当您接收下降沿时、就会复位计数器。 由于计数器复位有2个条件、因此您可以选择使用 LUT 或同时使用这2个信号。 或者、如果不使用事件触发器、您可以使用加载事件功能来加载值0、本质上就是重置计数器。 计数器使能设置为 LUT 2输出是正确的。 计数器0等于匹配值1应馈送到 FSM、其中 FSM 配置为 SR 锁存逻辑。 Counter 0 equals match 1是设置信号、您可以选择如何配置复位逻辑、可能是其他复位逻辑的 LUT 组合。

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢彼得!

    我一定会按照您的建议尝试这样做。 您能帮助我解决以下关于柜台的问题吗?

    零、MATCH1、MATCH2、Counter value 的输出是什么样子的?

    2.第2、4周期用于将计数器编号复位为0?

    3.事件触发(零)指的是什么?

    4.是什么使计数器号码不断增加?

    5.如果左边的句点3很长,如果画正确,计数器号是否会溢出?

    6.需要将计数器事件操作配置为累加、还是在启用计数器并提供方向时计数器只是不断增加?

    谢谢!

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hongmei:

    零点、MATCH1、MATCH2、计数器值的输出是什么样子的?

    这些匹配条件的输出将是一个1 CLB 时钟周期的高电平脉冲。 在满足匹配条件时为高电平、否则为低电平。

    周期2、4 (计数器号要重置为0?

    如果你将计数器复位条件设置为边界输入0、那么是的、那么正如你在图中画出的那样、计数器将在 i0信号的上升沿复位

    事件触发器(零)指的是什么?

    事件触发器是将导致事件发生的输入信号(加载、加、减、移位)。 如果将其设置为零、则表示常量低电平、因此不使用事件触发功能。

    是什么使计数器号码不断增加?

    当 Enable 计数器为高电平且方向为高电平时、计数器将增加。 在每个 CLB 时钟周期中、计数器将查看使能和方向信号、如果满足上述条件、计数器将递增。

    如果左边的期间3很长、如果绘图正确、计数器编号是否会溢出?

    是、如果计数器计数超过16位最大整数、则会溢出。 如果您认为计数器可能溢出、则可以降低 CLB 时钟速度或使用第二个计数器作为时钟分频器。 或者、您可以添加额外的复位条件。

    是否需要配置计数器事件操作来相加、或者如果启用了计数器并给出了方向、计数器是否只是继续增加?

    计数器递增时不需要使用事件操作、它只是基于方向和使能。 如果您要按1以外的数字计数(例如递增2)、则可以使用设置为 ADD 的事件操作、然后将2放入事件加载值

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    非常感谢。 您可以帮助检查我的以下设置和问题吗?

    这些匹配条件的输出将是一个1 CLB 时钟周期高脉冲。 在满足匹配条件时为高电平、否则为低电平。

    因此、在 A 点、MATCH1仅在一个 CLB 时钟周期内保持高电平、在 T1、T2、T3、T5、T6时存在1个 CLB 时钟周期高电平脉冲。 为了使其锁存、我们必须使用 FSM?

    事件触发器是将导致事件发生的输入信号(加载、加、减、移位)。 如果设置为零、则表示常量低、因此未使用事件触发功能。

     事件触发器高电平有效吗? 根据我的设置、如果我使用 LUT 0输出作为事件触发器、当 LUT 0输出电平为高电平时、计数器将递增2。 此设置适合吗? 抽奖是否正确?

    再次感谢、

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hongmei:

    [报价 userid="267327" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1476765/tmdscncd28379d-how-to-configure-the-clb-properly-using-sysconfig/5678201 #5678201"]因此、在 A 点、MATCH1仅在一个 CLB 时钟周期内保持高电平、并且在零匹配时 T1、T2、T3、T5、T6时有1个 CLB 时钟周期高脉冲。 要锁存它、我们必须使用 FSM?

    是的、您需要使用 FSM 模拟作为 SR 锁存器来锁存匹配信号

    事件触发器是将导致事件发生的输入信号(加载、加、减、移位)。 如果设置为零、则表示常量低、因此未使用事件触发功能。

    是的、事件触发器仅是上升沿触发的。 因此您需要先发出高电平脉冲、然后再发出低电平脉冲、以便计数器递增2。 请参阅下面的以了解每个事件添加5的仿真

    此致、
    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    非常感谢! 在您的帮助下、我差不多完成了 CLB 设置、之后我计划进行仿真。

    然后将以下头文件和函数添加到我的 main ()函数中。 我当前的工程已完全开发完成、我正在尝试将这些生成的文件添加到我的应用程序中。

    #include "board.h"
    #include "clb_config.h"
    #include "clb.h"

    Board_init (); //所有硬件设置
    CLB_enableCLB (CLB1_base);
    initTILE0 (CLB1_base);//所有逻辑设置

    这些文件是自动生成的。 是否足够好地将这些文件添加到 main ()以完成逻辑? 我是否需要为应用程序移动任何其他内容、以使其按预期运行?

    添加#include "board.h"后、出现问题:需要一个标识符并重新定义宏、如下所示。 如何解决此问题?

    谢谢!

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hongmei:

    这些看起来是正确的定义。 确保#include 语句位于主循环之外的顶层、Board_init 和其他函数调用应位于初始化段的主循环内部。

    您是否还有以下包含陈述?

    #include "driverlib.h"
    #include "device.h"

    如果您确实拥有所有这些组件、但代码仍然无法正常工作、那么这可能会给 SysConfig 工程路径带来问题。 能否发送 SysConfig 设置下的工程属性中显示的内容的屏幕截图?

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    请检查 main 之外的#include 文件、检查 main 之外的这些函数。 SysConfig 路径如下所示。

    在我注释掉这些与 CLB_相关的文件后、我遇到了另一个问题:找不到模块"C:\dot_file_libraries\clbDotUtility"。 以前的一切都很好,现在我不知道该怎么做。

    谢谢!

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hongmei:

    当您使用#include clb.h 和 clb_config.h 时、应该只查找.Utility 文件 这些用于生成图表。  

    看起来您具有相当多的 include。 它可能会再次拉取同一个文件并重新声明变量。 您可以从 行18-22开始使用包含、然后根据需要在其他包含中缓慢添加。 为了消除误差、看起来没有为变量找到相对路径。 您能否进入工程属性并查看是否有任何链接资源未指向正确路径。 您还可以再次选中"Build">"C2000 Compiler"设置下的"Include Options"、以验证路径。  

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    以下三项中的任何一项都会导致此问题。 "board.h"已经具有#include "driverlib.h"和#include "device.h"的包含语句。 main.c 文件具有#include "driverlib.h"、 #include "device.h"和#include "board.h"。 它直接和间接地看起来像是 main.c 文件中的#include "driverlib.h"和 #include "device.h"。 我是否需要在 main.c 文件中包含这两个 include 语句? 用这种方式会有什么伤害吗?

    //#include "driverlib.h"//添加此#include 后出现了许多编译问题
    //#include "device.h"   //添加此#include 后出现了许多编译问题
    //#include "board.h"   //添加此#include 后出现了许多编译问题

    如果我有两个具有相同宏的文件、例如下面的错误。 编译器应该寻找哪一个? 我该怎么办? 保存的操作太多了。  

    ["C:\ti\c2000\C2000Ware_5_04_00_00\driverlib\f2837xd\driverlib\sysctl.h"、第185行:警告#48-D:不兼容宏"Device_cal"(在"C:\ReposWindliftDCDC\DSPfirmware_groundDCDC_28379D\DC_28379D_relationdc/DC_reliDCDC_up_2/dC_DEVIC_support"的第297行声明)链接文件的重新定义不兼容。

     "C:TI\c2000\C2000Ware_5_04_00_00\driverlib\f2837xd\driverlib\SysCtl.h"中的#define Device_cal ((void (*)(void)))(((uintptr_t) 0x070282))

    #define Device_cal (  void (*)(void))"C:\ResposWindliftDCDC\DSPfirmware_groundDCDC_28379D 2\DSPfirmware_groundDCDC_28379D\cpu01\device_support_linked_files\../device_support_linked_files/F2837xD_examples.h"中的0x070282

    相对路径看起来是正确的。

    谢谢!

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    昨天我认为第一个相对路径是默认设置的、没有意识到它在第一个图1中显示"无"、但我单击它、路径显示在图2中。 我不确定这是否会导致问题。

    如何解决不兼容的重新定义宏的问题? 我无法删除其中一个文件。 例如、我无法删除 C2000Ware 中的 sysctl.h 或器件中的 F2837xD_Examples.h。 或者实际上、我没有选择使用 CLB 工具、因为有些文件的宏定义有冲突?

    谢谢!

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hongmei:

    是、似乎相关路径未正确设置。 您可以通过绝对路径手动查找和链接路径。 因此、您可以使用绿色的添加按钮直接添加编译器搜索路径。 打开文件资源管理器提示后、您可以直接查找路径。 例如、对于 COM_TI_C2000WARE_INCLUDE_PATH、它会搜索 C2000Ware SDK 的顶层、以便您查找该路径并添加到包含路径中。

    此致、

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Peter:

    我不确定道路是否正确、问题是否不变。 您能否指定确切的文件夹名称、然后我可以在我这边搜索它?  

    SysConfig_tool_include_path:"c:\ti\ccs1281\ccs\utils\SysConfig_1.21.0"、SysConfig_1.21.0中没有包含文件夹。

    com_TI_C2000WARE_INCLUDE_PATH:"C:\ti\c2000\INCLUDE"或"C:\ti\c2000\C2000 Ware_Digital SDK_5_04_00_00"、 C2000 CD2000_SDK_5_04_00_00中没有包含文件夹 Ware_Digital

    谢谢!

    洪美湾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hongmei:

    这些链接不会精确指向 include 文件夹、而只是指向可以在其中找到#include 文件的高级目录。  SysConfig_tool_include_path 看起来正确、还可以在 Products 选项卡中验证使用的 SysConfig 版本与包含路径中使用的版本匹配。

    对于  COM_TI_C2000WARE_INCLUDE_PATH 、您需要使用 C:\ti\c2000\C2000 C2000Ware_SDK_5_04_00_00\c2000ware 路径、因为该路径直接查找嵌套的 Ware_Digital 文件夹。  

    您还可以尝试通过从示例库中导入空 CLB 工程并检查 Include Path 会指向什么来验证这些路径

    此致、

    Peter