一
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混频器。目前,文档中并没有向我们介绍这种混频器的设计目的,不过我们也不难从其功能中窥见一二。无论是FILTER1,2还是3,她们的功能基本一致:将输入讯号经过同步、边沿检查、软件注入和扩充混频四个环节后输出。
1.同步
文档中并没有告诉我们同步功能的具体实现方法,不过在这一段描述上面,我们可以大致推测出好多信息:
FILTER_SYNC_LEVEL位选择同步器级数,清0时为2级同步用jk触发器实现t触发器,置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_sdkv1.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两个函数分别负责FILTER116个讯号上面前8个和后8个讯号的配置,缘由大约是前8个是PLA的输入讯号,后8个则是PLA的输出讯号反馈回去的。
刚才讲到的混频器配置结构体上面并没有关于位置的信息,因而这种信息要以参数的方式提供给设置函数。以在通道3的FILTER2为例,使用pla_set_filter2()时除了要写明通道3,还要强调是FILTER28个讯号中的具体哪一个讯号。而SDK中通道参数和讯号参数分别叫chn和filter2_chn,使用时一定要注意分辨二者之间的差异。
2.与门
16输入与门本身只有一个可配置的内容:各输入讯号的MUX选项。不过同样须要注意数目和位置的问题。8个通道上面,每位通道有8个与门,每位与门又有16个MUX。其实,不仅没有使用的通道无需配置以外,部份没有使用的与门也可以不进行设置,默认状态下与守门员输出低电平。
与门的配置结构体是pla_aoi_16to8_chn_cfg,可以对一个与门进行配置,记得不要被它名子上面那种chn给误导了。结构体上面有plachannel和aoi_16to8channel两个“通道”成员,一个指的是PLA的通道,另一个则是指8个与门的编号。个人觉得这样设计虽然容易混淆用jk触发器实现t触发器,可以在命名方面愈加有分辨度一些。
一个与门中有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的APBSRAM使用。
五
一个简单的事例:同步八补码计数器
1.概述
在上面章节的基础上,我们将实战使用PLA建立一个精典的同步时序逻辑电路:同步八补码计数器。为了简化问题让你们更容易理解,我们要建立的计数器只会计数,没有复位、没有使能、没有置数,长得更像是个分频器,它的电路结构如下所示:
有了电路图,下一步就是将电路结构转换为PLA的配置代码。不过,因为PLA是与或结构,我们不妨进一步直接将使用到的与门、或门和各类讯号都勾画下来,在编码时将会愈发便捷。
对照上图,我们可以提炼出以下信息:
·此电路使用了3个PLA通道,每位通道的CFF均配置为T触发器(图上是JK,实际功能是T)
·触发器时钟使用外部时钟PLAOUT0\OUT1\OUT2分别作为计数器D2\D1\D3的输出
·OUT1\OUT2将作为反馈讯号步入通道1和通道2
2.工程打算
本部发包括新建工程、使用GPTMR形成1MPWM作为时钟的代码,本文不准备讨论这一部份内容,读者可以参考HPM_SDK中的其他类库了解。为了分辨三个通道的设置代码,在main函数前申明了三个通道的配置函数。
3.TRGM与I/O
PLA并没有专属于自己的输入输出引脚,和其他提高运动控制系统外设一样,所有输入输出讯号都要通过TRGM处理。因而,这儿的代码将GPTMR0CH2的PWM输出引入到了PLA0IN0中,将PLA0OUT0/1/2输出到三个外部引脚中。为了便捷对比时钟波形和计数器输出,还将GPTMRCH2的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@hpmicro.com。
“先楫半导体”(HPMicro)是一家旨在于高性能嵌入式解决方案的半导体公司,总部坐落广州,产品覆盖微控制器、微处理器和周边芯片,以及配套的开发工具和生态系统。公司创立于2020年6月,总部位于于广州市张江高科技园区,并在广州、深圳和上海均筹建分公司。核心团队来自世界著名半导体公司管理团队,具有15年以上,超过20个SoC的丰富的研制及管理经验。先楫半导体以产品质量为本,所有产品均通过严格的可靠性测试。目前早已量产的高性能通用MCU产品系列HPM6700/6400、HPM6300及HPM6200,性能领先国际同类产品并通过AEC-Q100认证。公司已完成ISO9001质量管理认证和ISO26262功能安全管理体系ASILD认证,竭力服务中国乃至全球的工业、汽车和能源市场。更多信息,请访问。