本帖最后由 cc1989summer 于 2024-9-11 20:04 编辑
PIC16F13145原本是个普通的8位单片机,然而正是因为加入了CLB(可配置逻辑模块),具备了一定的FPGA特性,让其无所不能,焕发新生。
PIC16F13145 单片机系列及其专用外设提供了一种实施基于硬件的解决方案的有效方法。该设备系列引入了可配置逻辑块(CLB) 外设,使用户能够将基于硬件的自定义逻辑整合到其应用程序中。CLB由32 个独立的逻辑元件组成。每个逻辑元件的基于查找表(LUT) 的设计提供了广泛的自定义选项,独立于CPU 的操作可改善响应时间和功耗。
也就是下图所示架构。
那么你可能会问,既然有了无所不能的CPU,为啥还要加上这个看起来比较原始〈逻辑门电路组合〉的CLB呢?
我的理解是:一方面解放CPU,CPU可以做更多的事,或是在低功耗模式下进入休眠模式不影响CLB的运行。
一方面,CLB执行逻辑门电路,运行速度效率更佳。对于一些时序、逻辑性电路,用CLB实现比CPU性能更佳。
言归正传,我们来小试牛刀,试一试这个大名鼎鼎的CLB吧!
首先打开MCC,在左侧Device Resources添加CLB1,随后点击Builder主界面的CLB1进入CLB的配置界面。
我们可以看到CLB的配置界面,左侧是各类逻辑门电路单元。
门电路、触发器、复用器等等。
[color=rgba(0, 0, 0, 0.8)]The CLB can have up to 32 basic logic elements including:
- AND/OR/NAND/NOR gates
- Buffer/inverting buffer
- D flip-flop
- JK flip-flop
- Multiplexers
- 4-input LUT
[color=rgba(0, 0, 0, 0.8)]
右侧的main区域,是画图区,可以用鼠标拖动各类模块,拼装成我们的最终CLB模块。
需要注意,必须有途中的深蓝色和浅蓝色 输入及输出单元。
本例中,我们用反相器实现简单的逻辑门电路,也就是把输入取反后送到输出。
输入,对应我们开发板的按钮(RC3),点击左侧图标,在右侧选择CLBIN0PPS ,在下一步把CLBIN0PPS配置为RC3针脚
输出,对应我们开发板的LED灯(RC2),点击右侧图标,在右侧选择PPSOUT1,我们需要在下一步吧PPSOUT1配置为RC2针脚
最后点左下角的Synthesize,MCC就可以自动把我们配置的CLB电路,生成clb1.c〈见上一张图〉
其实这个CLB配置页面,也可以在浏览器中在线进行,最后点击左上角的导出按钮生成XX.clb文件,我们再在MCC中导入即可。
也可以把别人分享的clb文件导入我们的项目。(microchip就有很多实例可下载,详见下面的官网)
更多功能学习及演示,见Microchip官网。
Configurable Logic Block | Microchip Technology
https://www.microchip.com/en-us/products/microcontrollers-and-microprocessors/8-bit-mcus/core-independent-and-analog-peripherals/system-flexibility/configurable-logic-block
下面就是CLB输入输出引脚的配置,我们设置好RC2(LED输出),RC3(输入按钮)
然后,点坐上角Project Resources的Generate生产按钮,就全部生了C语言项目。
最后一步,我们添加几行代码,建立mian.c与CLB的关联,没有这句CLB跑不起来。
然后就实现了我们要的功能:按下按钮灯灭,松开按钮灯亮。
CLB代码及演示视频.zip
(4.56 MB)
|