悟空体育

开发者分享|探秘HPM6200系列MCU的可编程逻辑阵列

2023-07-04
浏览量:
2803

HPM6200 系列 PLA 整体结构

HPM6200 系列的 UM 中带有 PLA 的结构简图。为了方便大家把握整体结构,我也绘制了一个稍微更详细的结构图,将 PLA 外设中的大部分元素都展示出来,并给出了单个通道内的具体结构。

从总体来看,PLA 外设拥有 8 输入、8 反馈、8 输出,其中 8 输入、8 反馈是内部的 8 个通道共享,8 输出则是每个通道使用一个。输入、输出均连接到 TRGM 外设,再通过 TRGM 连接到定时器、编码器、外部引脚等地方。需要注意的是,PLA 的 8 输入、8 输出并非全部都能引出至外部引脚中。每个 PLA 外设都连接到一个指定的 TRGM 外设,而每个 TRGM 外设最多仅可连接 12 个外部引脚,同时 TRGM 还可能有其他信号需要接到外部引脚中,如果想要使用更多外部引脚,则还需要使用 TRGM 间连接等方式。因此,在设计 PLA 程序时需要尽可能提前考虑 I/O 安排的问题。


每个 PLA 外设由一个滤波器 FILTER1 和 8 个通道组成,FILTER1 对输入和反馈信号进行滤波后,宽度为 16bit 的信号将同时输入到 8 个通道之中(这个扇出也挺惊人的)。每个通道的输出宽度均只有 1bit,8 个通道合并组成的 8bit 就是 PLA 外设的输出。下面悟空体育 将分别对 PLA 滤波器和单个通道进行介绍。


PLA 外设中的滤波器

和悟空体育 之前介绍过的 PLA 结构相比,HPM6200 系列的 PLA 最大的特点就是多出了一些滤波器。每个 PLA 外设都有一个 FILTER1 滤波器,8 个通道中每个通道还各有一个 FILTER2 滤波器和 FILTER3 滤波器。目前,文档中并没有向悟空体育 介绍这些滤波器的设计目的,不过悟空体育 也不难从其功能中窥探一二。无论是 FILTER 1, 2 还是 3,他们的功能基本一致:将输入信号经过同步、边沿检测、软件注入和扩展滤波四个环节后输出。


1. 同步

文档中并没有告诉悟空体育 同步功能的具体实现方式,不过在这一段描述里面,悟空体育 可以大致猜测出很多信息:

FILTER_SYNC_LEVEL 位选择同步器级数,清 0 时为 2 级同步,置 1 时为 3 级同步。根据该位的设置,同步器会将信号延时 2 个或者 3 个时钟周期。

2级、3 级同步可选,听上去就与跨时钟域处理中的同步器很像。比较了解 FPGA 或 IC 设计的朋友知道,同步器是减少亚稳态对逻辑电路影响的一个常用措施,PLA 外设可以接受外部输入的信号,自然也算是一种“跨时钟域”传递信号的过程。同时,增加同步功能还有利于避免出现组合逻辑电路的竞争-冒险,毕竟 FPGA 和 CPLD 开发时有 EDA (尽管 EDA 也不完全可靠)工具帮忙看着,悟空体育 在和 PLA 玩耍的时候就没那么好的条件了。因此悟空体育 不妨猜测同步功能实际上就是使用 2/3 级触发器构成的同步器。


2. 边沿检测

这一功能很好理解,将边沿转为脉冲,此处不再赘述。


3. 软件注入

这一功能也很好理解:强制将输出设置为高电平或低电平。实际上各逻辑门前的四选一 MUX 也能实现类似的功能,这一功能更多是为可配置触发器 CFF 或者是降低配置复杂度而生的。


4. 扩展滤波

扩展滤波要比上面三个功能复杂得多,文档也并没有讲得特别清楚,下面我将结合实际例子,分别介绍它的四个滤波类型效果。

在开始之前,悟空体育 首先要了解 PLA 外设的时钟。PLA 外设挂载在 AHB/APB 总线下,因此也受在 AHB/APB 时钟(默认 200MHz)驱动。在上文提到的同步器同步周期数量中,2/3 级同步就是指的 AHB/APB 时钟的 2/3 个周期。扩展滤波功能最高支持 65535 周期的扩展,对应的 AHB/APB 时钟周期数也为 65535 周期,单个周期的时间为 5ns,这在悟空体育 后续的计算中会常常用到。对于 hpm_sdk v1.2 以前的版本,周期数配置部分存在一个小 bug,需在代码中将计算出来的周期数乘二。


(1)输入高电平扩展

这一个模式相对比较好理解:扩展高电平的长度,也就是在输入信号变为低电平以后,输出信号仍会保持高电平,时间为设定的周期数。下图给出了一个例子。输入信号是周期为 80μs,占空比 50% 的 PWM 信号,滤波器设置为输入高电平拓展,周期数为 2000,输出信号较输入信号延迟10μs 变为低电平。


(2)输入低电平扩展

这一个模式正好与上一个模式相反。下图输入信号仍是周期为 80μs,占空比 50% 的 PWM 信号,滤波器设置为输入低电平拓展,周期数为 2000,输出信号较输入信号延迟 10μs 变为高电平。


(3)输出状态扩展

这一个模式可以看作是以上两种模式的加和:既延长低电平时间,也延长高电平时间。输入信号发生变化时,输出信号将先在设定的周期数内维持现有状态,结束后跟随输入信号变化。这一模式可以起到两个效果,一是将脉冲宽度小于设定周期数的脉冲全部过滤掉,二是将脉冲宽度大于设定周期数的脉冲延迟设定周期后输出。

下图前半段输入信号是一个脉冲宽度为 40μs 的 PWM 波,输出信号对比输入信号延迟了 10μs;在后半段将输入信号和输出信号对比,则可以发现所有宽度不大于 10μs 的波形都被过滤掉了。


(4)输入跳变扩展

这一模式下输出信号跟随输入信号变化,但是当输出信号发生过跳变以后,在设定周期数的时间内,输出信号将保持不变,随后输出信号继续跟随输入信号的变化。

下图中前半段滤波器设置的周期数为 2000,对应 10μs 的时间,因此对于半周期 20μs 的 PWM 信号不会产生任何影响;后半段滤波器设置的周期数为 6000,对应 30μs 时间,因此在输入信号从高电平跳变为低电平以后,输出信号还会继续保持高电平直至 30μs 结束。


PLA 外设通道结构

1. 与- 或阵列

每个通道的 16 信号输入会分别接入到 8 个 16 输入与门中,对单个输出信号最高支持 8 个最小项相加(8 个与门),并可生成 7 个输出信号(7 个或门)。每个逻辑门的输入端都有一个四选一 MUX,可选逻辑 1、逻辑 0、原信号和原信号取反四种输入。


2. 可配置触发器

CFF 可被配置为 D 触发器、双边沿 D 触发器、JK 触发器、T 触发器、锁存器、运算器和直接输出信号这几种功能。CFF 的输出即为其所在通道的输出,输出信号宽度 1bit,输入信号宽度则为 7bit,CFF 配置为各类触发器时,触发器的使能、置位、同步/异步复位、时钟等信号均来自于 7bit 宽度的输入信号,具体的分配表可见 UM 文档。除了使用输入信号以外,CFF 还可以使用 AHB/APB 的时钟。


如何使用 HPM_SDK 中的PLA驱动

在之前介绍的各种含有 PLA 的芯片基本都会配置对应的 EDA 工具,用户一般可以使用 verilog 编程或者图形化界面编程,由 EDA 工具生成比特流。比如 PSoC 芯片用户可以使用图形化界面编辑状态机的状态转移条件,再由软件完成后端的处理。HPM6200 的 PLA 则没有使用这种开发方式,而是将所有的可配置项均以寄存器的方式暴露给 CPU,CPU 设置好对应的寄存器以后,PLA 即可开始工作。


1. FILTER

滤波器的可配置项非常多,包括是否同步、是否启用边沿检测、是否软件注入等一系列内容,不过最关键的其实是准确把握配置的数量。PLA 中有 1 个 FILTER1、8 个 FILTER2 和 8 个 FILTER3,FILTER1/2/3 中分别有 16/8/7 个信号,每一个信号都可以独立设置上述介绍过的所有滤波功能,也就是共有 136 个信号,很容易错配、漏配。因此,除了所有通道共用的 FILTER1 单独配置以外,FILTER2/3 建议和它们所在的通道一同配置,避免混淆的同时,如果部分通道没有使用,也就不需要对它们的 FILTER2/3 进行配置了。

滤波器的配置结构体是一个位域结构体,使用四个字节保存一个信号的滤波选项,其每个成员的功能结合手册也非常容易理解,注意,配置结构体里面并没有任何关于该配置位于哪个通道、哪个滤波器等位置的信息。结构体填充完成以后,则需要使用以下几个函数完成设置:

这里面实际上有不少容易踩坑的地方。例如 FILTER2/3 都只有一个函数,而 FILTER1 有 in/out 两个函数。实际上 in/out 两个函数分别负责 FILTER1 16 个信号里面前 8 个和后 8 个信号的配置,原因大概是前 8 个是 PLA 的输入信号,后 8 个则是 PLA 的输出信号反馈回来的。

刚刚提到的滤波器配置结构体里面并没有关于位置的信息,因此这些信息要以参数的形式提供给设置函数。以在通道 3 的 FILTER2 为例,使用 pla_set_filter2() 时不仅要写明通道 3,还要指出是 FILTER2 8 个信号中的具体哪一个信号。而 SDK 中通道参数和信号参数分别叫 chn 和 filter2_chn,使用时一定要注意区分两者之间的差别。


2. 与门

16 输入与门本身只有一个可配置的内容:各输入信号的 MUX 选项。不过同样需要注意数量和位置的问题。8 个通道里面,每个通道有 8 个与门,每个与门又有 16 个 MUX。当然,除了没有使用的通道无需配置以外,部分没有使用的与门也可以不进行设置,默认状态下与门将输出低电平。

与门的配置结构体是 pla_aoi_16to8_chn_cfg,可以对一个与门进行配置,记得不要被它名字里面那个 chn 给欺骗了。结构体里面有 pla channel 和 aoi_16to8 channel 两个“通道”成员,一个指的是 PLA 的通道,另一个则是指 8 个与门的编号。个人认为这样设计其实容易混淆,可以在命名方面更加有区分度一些。

一个与门中有 16 个 MUX,因此 pla_aoi_16to8_chn_cfg 里面有长度为 16 的 MUX 配置结构体 pla_aoi_16to8_cfg_unit_t 数组。MUX 配置结构体的 signal 成员是信号的编号;op 成员的四个选项对应 MUX 的四个选项,对应关系在上面的代码注释中给出。

最后悟空体育 需要使用以下函数对一个与门进行配置。

3. 或门

或门的代码和注意事项和与门大同小异,数量上一个通道有 7 个或门,每个或门有 8 个 MUX,比与门会少不少,其余部分基本一致,参照使用即可。


4. 可配置触发器

CFF 可配置的内容并不多,主要就是功能选择和时钟源,具体情况可参考源代码。需要注意的是触发器的同步复位、同步置位、异步复位、异步置位等信号有的是高电平有效,有的则是低电平有效,且有优先级顺序,使用时需要对照手册仔细调整。


5. 使能 PLA

在完成上述全部配置完成以后,还需要对每一个通道进行使能。

在没有使能的情况下,PLA 的寄存器可以作为 1KB 的 APB SRAM 使用


一个简单的例子:同步八进制计数器

1. 概述

在前面章节的基础上,悟空体育 将实战使用 PLA 构建一个经典的同步时序逻辑电路:同步八进制计数器。为了简化问题让大家更容易理解,悟空体育 要构建的计数器只会计数,没有复位、没有使能、没有置数,长得更像是个分频器,它的电路结构如下所示:

有了电路图,下一步就是将电路结构转换为 PLA 的配置代码。不过,由于 PLA 是与或结构,悟空体育 不妨进一步直接将使用到的与门、或门和各种信号都绘制出来,在编码时将会更加方便。

对照上图,悟空体育 可以提炼出以下信息:

· 此电路使用了 3 个 PLA 通道,每个通道的 CFF 均配置为 T 触发器(图上是 JK,实际功能是 T)

· 触发器时钟使用外部时钟PLA OUT0\OUT1\OUT2 分别作为计数器 D2\D1\D3 的输出

· OUT1\OUT2 将作为反馈信号进入通道 1 和 通道 2


2. 工程准备

本部分包括新建工程、使用 GPTMR 产生 1M PWM 作为时钟的代码,本文不打算讨论这一部分内容,读者可以参考 HPM_SDK 中的其他例程了解。为了区分三个通道的设置代码,在 main 函数前声明了三个通道的配置函数。



3. TRGM 与 I/O

PLA 并没有专属于自己的输入输出引脚,和其他增强运动控制系统外设一样,所有输入输出信号都要通过 TRGM 处理。因此,这里的代码将 GPTMR0 CH2 的 PWM 输出引入到了 PLA0 IN0 中,将 PLA0 OUT0/1/2 输出到三个外部引脚中。为了方便对比时钟波形和计数器输出,还将 GPTMR CH2 的 PWM 也输出到外部引脚中。


4. FILTER1

FILTER1 并没有特别的功能需求,因此悟空体育 只需要开启同步功能即可。


5. 通道 0

来到通道 0 的配置函数,首先声明与门阵列、或门阵列和两个滤波器的配置结构体变量。

通道 0 使用了两个与门。第一个与门根据两个反馈信号相与生成 T 触发器的 T 信号,先将它的全部 MUX 设为输出逻辑 1,再将反馈通道对应的 9、10 号 MUX 修改为输出原信号。第二个与门只需要输出 PWM 时钟信号,因此只设置一个 MUX 输出原信号,其余全部设置输出逻辑 1。



FILTER2 同样只需要设置同步。

通道 0 使用了两个或门。第一个或门需要输出与第一个与门完全相同的信号,因此 0 号 MUX 设置输出原信号,其余 MUX 输出逻辑 0(注意,没有使用的信号 MUX,一般与门设置输出逻辑 1,或门设置输出逻辑 0),第二个与门也基本一致。



FILTER3 同样设置信号同步,不过不要忘了 FILTER3 同时也输出触发器的同步异步复位置位,悟空体育 这个电路没有相关功能,因此全部根据手册设置为固定值即可。如果要使用这些功能,则需要另外构建他们的控制逻辑函数。




最后是 CFF 并使能通道。

其余两个通道配置过程大同小异,就不再复制粘贴那么多次了,完整的代码可在悟空体育社区中获取。最终的效果如下图所示。


结 语

通过介绍,相信大家对 PLA 已经有了一个较为全面的了解。在 6200 系列刚推出时,许多开发者非常关注的一点就是 PLA 外设能不能当作 FPGA 使用,对此,我个人的看法是“能,但不完全能”。PLA 拥有完备的逻辑结构,但是其资源数量注定只适合小型逻辑使用,尤其是触发器资源的缺乏,使得 PLA 很难单独构建稍复杂的时序逻辑电路。因此悟空体育 在开发 PLA 程序之前,对资源数量要把控地比较准确,以免做无用功。


除了底层资源的限制,个人认为,使用方式上 PLA 也有其遗憾之处:

  • 重复的配置代码相当多,开发效率不高,写代码时容易发生错误

  • 无法对内部信号进行调试,对复杂逻辑调试困难

  • “牵一发而动全身”,难以通过模块化设计等方式复用现有资料


基于以上原因,我认为图形化配置,程序自动生成配置代码将会是 PLA 极好的开发方式:PLA 配置项繁多但并不复杂,代码由机器生成非常合适;图形化配置的方式降低了开发者编写大量重复代码时出错的可能性,还可以通过抽象出电路图的方式协助开发者调试;甚至还可以以此为基础造出 PLA 的模拟器。


当然,即使没有这些,PLA 也仍不失为构建简单逻辑的好工具,也期待有更多开发者给出他们使用 PLA 的姿势与心得,共同学习共同进步。



以上内容来自悟空体育开发者的原创分享。

悟空体育 始终相信开发者共创的力量。悟空体育社区坚持开源共享、互惠互利,贴近每一个开发者,一步一个脚印,一点一滴积累,为成为更好的悟空体育 而不断努力。


心之所向,锐意进取,星辰大海,恣意成长。


MCU生态建设需要您的贡献与支持!欢迎广大爱好者和开发者踊跃投稿,供稿请联系sha.li@ligthmaskes.com。


“悟空体育 ”(HPMicro)是一家致力于高性能嵌入式解决方案的半导体公司,总部位于上海,产品覆盖微控制器、微处理器和周边芯片,以及配套的开发工具和生态系统。公司成立于2020年6月,总部坐落于上海市张江高科技园区,并在天津、深圳和苏州均设立分公司。核心团队来自世界知名半导体公司管理团队,具有15年以上,超过20个SoC的丰富的研发及管理经验。悟空体育 以产品质量为本,所有产品均通过严格的可靠性测试。目前已经量产的高性能通用MCU产品系列HPM6700/6400、HPM6300及HPM6200,性能领先国际同类产品并通过AEC-Q100认证。公司已完成ISO9001质量管理认证和ISO 26262功能安全管理体系ASIL D认证,全力服务中国乃至全球的工业、汽车和能源市场。更多信息,请访问 //ligthmaskes.com 。