PicoBlaze指令集详解

Download Report

Transcript PicoBlaze指令集详解

软核处理器PicoBlaze
原理及应用
何宾
2011.09
软核处理器PicoBlaze原理及应用-本章概述
随着现场可编程门阵列功能不断增强,其应用范围扩
展到了片上可编程系统领域(System-On-a-ProgrammableChip,SOPC),Xilinx公司的嵌入式解决方案以四类RISC
结构的微处理器为核心,涵盖了系统硬件设计和软件调试
的各个方面。
四类嵌入式内核分别为:PicoBlaze、MicroBlaze、
PowerPC、ARM,其中PicoBlaze和MicroBlaze是可裁剪的
软核处理器,PowerPC和ARM为硬核处理器。
软核处理器PicoBlaze原理及应用-本章概述
本章以Xilinx公司8位微控制器PicoBlaze软核处理
器为核心,介绍了基于FPGA的片上可编程系统的原理
及实现方法。
通过本章内容的学习,重点掌握片上可编程系统
的本质,理解软件和硬件的协同设计的思想以及以软
件为中心的系统设计方法。
PicoBlaze的8位微控制器概述
--Xilinx片上可编程系统解决方案
Xilinx提供了基于以下嵌入式处理器的片上可编程
系统解决方案。
PicoBlaze8位嵌入式软核微控制器
PowerPC405/PowerPC440嵌入式硬核处理器
MicroBlaze32位嵌入式软核处理器
ARM嵌入式硬核处理器(未来,预计今年底)
片上可编程系统概论
-片上MCU和专用MCU的比较
这儿有很多8位的微控制器结构和指令集。现在的
FPGA能高效的实现任何8位的微控制器,并且可以使用
FPGA软核支持流行的指令集,比如PIC,8051,AVR,
6502,8080和Z80微控制器。为什么使用PicoBlaze微控制
器,而不使用更流行的指令集。
PicoBlaze微控制器是专门为Sparan-3,Virtex-II和
Virtex-II Pro FPGA结构设计和优化。它紧凑而强大的结
构,比可比较的流行的8位微控制器消耗更少的FPGA资
源。而且,PicoBlaze微控制器提供了在FPGA内可用的免
费,源码级的VHDL文件。
片上可编程系统概论
-片上MCU和专用MCU的比较
一些独立的微控制器变种由于“过时”而导致“不
好的
名声”。由于PicoBlaze提供VHDL源码,这样PicoBlaze微
控制器可以能未来的Xilinx FPGA芯片上,使得该控制器
对“过时”有更好的“免疫力”,并且可以进一步的降低
成本
和扩展特性。
在PicoBlaze和MicoBlaze处理器出现前,微控制器存
在于FPGA外部,和其它FPGA的功能进行连接,这样就限
制了接口的整体性能。相比较之下,PicoBlaze微控制器充
分的嵌入在FPGA内,可以灵活的,片上连接其它的FPGA
资源。在FPGA内保留的信号提高了整体的性能。由于使
片上可编程系统概论
-片上MCU和专用MCU的比较
PicoBlaze微控制有高效的资源,因此,复杂的应
用有时可以“分配”到多个PicoBlaze微控制器,其中
的
每个微控制器实现一个特定的功能,比如,键盘和显
示控制,或者系统的管理。
片上可编程系统概论
-片上MCU和片上逻辑的比较
在实际中,微控制器和FPGA成功的实现了任何数
字逻辑功能。然而,在成本,性能和易用方面,它们
有自己独特的优势。微控制器很好的适用于控制应
用,特别是在较宽的变化要求方面。要求使用FPGA实
现微控制器是相对固定的。相同的FPGA逻辑可以被各
种微控制器指令“重用”。对程序存储器的要求随着
复杂
度的增加而增加。
使用汇编代码对控制序列或者状态机编程比在
FPGA逻辑内创建相同的结构要容易的很多。
片上可编程系统概论
-片上MCU和片上逻辑的比较
微控制器在性能方面受到限制。每个指令按顺序执
行。当一个应用的复杂度增加后,要求实现应用的指令
也会随着增加,系统性能就会相应的降低。相比较下,
在一个FPGA内的性能是更加灵活的。
比如,根据性能的要求一个算法可以顺序或者完全
并行的实现。并行的实现速度会更快,但是会占用更多
的逻辑资源。
片上可编程系统概论
-片上MCU和片上逻辑的比较
嵌入在FPGA内的微控制器提供了最好的解决方案。
在FPGA内的微控制器实现非“苛刻”时序要求的复杂控
制
功能,可以用其它FPGA逻辑更好的实现“苛刻”时序或
数
据通道功能。比如,一个微控制器不能响应ms级内的事
件,而FPGA逻辑在几十个ns时间内,能响应多个同步事
件。反过来,一个微控制器在执行格式或者协议转换方面
成本较低,并且比较简单。
表10.1给出了PicoBlaze微控制器和FPGA逻辑在各方
面进行比较的优势和缺点。
片上可编程系统概论
-片上MCU和片上逻辑的比较
PicoBlaze的8位微控制器概述
--主要特点
Xilinx的 PicoBlaze是一个8位RISC(精简指令集计
算机 )的微控制器, 已经被专门设计和优化,用于
Xilinx的Virtex和Spartan系列的FPGA和CoolRunner-II
CPLD器件。
PicoBlaze比现有的8位的微控制器消耗的资源更少,
并且提供了免费的、源码级的VHDL代码。
PicoBlaze的简单处理解决方案
--主要优点
1.免费的PicroBlaze核
所得到的PicoBlaze微控制器是一个可综合的VHDL
源代码。所以,该核可以移植到Xilinx的未来的产品
上。
2. 容易使用的汇编器
PicoBlaze的汇编器是一个简单的DOS程序,该汇编器
编译程序时间小于3秒,产生VHDL,Verilog和M(用于
System Generator)文件。其它的开发工具包括图形化的集
成开发环境IDE,图形化的指令集仿真器ISS,VHDL源代码
和仿真模型。
PicoBlaze的简单处理解决方案
--主要优点
3. 高性能
PicoBlaze每秒传递44-100 million指令(取决于
FPGA的类型和速度等级),比商业上可用的微控制器快
好几倍。
4. 较小的逻辑消耗
PicoBlaze消耗192个逻辑单元,比如大约消耗
Spartan-3 XC3S200器件5%的逻辑单元。由于只占用很小
部分的FPGA和CPLD资源,工程师可以使用多个PicoBlaze
用于处理更长的任务或者保持任务的隔离和可预测。
PicoBlaze的简单处理解决方案
--主要优点
5. 100%嵌入式能力
PicoBlaze核嵌在FPGA或CPLD内部,不需要外部的资
源。通过将额外的逻辑和微控制器的输入和输入端口连
接后,可扩展其基本功能。
PicoBlaze的一个实例
--KCPSM3结构原理图(可编程的状态机)
PicoBlaze的一个实例
--KCPSM3内部详细结构
程序空间
KCPSM3支持程序的指令可以到1024(使用一个
BRAM),多个KCPSM3处理器可以用于处理不同的任
务。
16个通用寄存器
16个8位的通用寄存器,标号s0-sF(在汇编器中可能
被重新命名)。所有的操作所使用的寄存器是非常灵活
的(没有专用的或优先级)。在KCPSM3中没有累加器,
任何一个寄存器都可作累加器。
PicoBlaze的一个实例
--KCPSM3内部详细结构
ALU




提供很多简单的操作,所有操作使用一个来自sX
的操作数。结果返回到该寄存器。对需要两个操作数的操
作,第二个操作数来自sY寄存器或8位常数kk。
ADD和SUB操作可以包含进位标志作为一个输入
(ADDCY和SUBCY),用于支持宽度大于8的算术
操作;
LOAD,AND,OR,XOR提供了位操作和测试功能,支
持SHIFT和ROTATE操作;
COMPARE和TEST指令可以测试寄存器的内容(不
改变其内容),确定奇偶性PARITY;
PicoBlaze的一个实例
--KCPSM3内部详细结构
标志和程序流控制
ALU的运算结果影响ZERO和CARRY标志位。CARRY
也可以用于捕获在移位和旋转指令操作时,位移出寄存
器的操作。在TEST指令,CARRY标志也用来标识,是
否8位的暂时结果是ODD PARITY(奇校验)。
这个标志也用来确定程序的执行序列。JUMP跳转到
程序空间的绝对地址,CALL和RETURN提供了自程序
功能(代码段)。堆栈支持31个嵌套的子程序级。
PicoBlaze的一个实例
--KCPSM3内部详细结构
复位
处理器返回到初始状态。程序从000开始,禁止中断,
状态标志和CALL/RETURN栈复位。不影响寄存器内容。
输入/输出
支持最多256个输入和256个输出端口。使用PORT_ID
访问8位的地址端口。端口值可以在程序中用用绝对值pp
来指定,或者用16寄存器的任何一个((sY))来指定。
PicoBlaze的一个实例
--KCPSM3内部详细结构

INPUT操作,将端口值送到任何一个寄存器中,输
入操作用一个READ_STROBE脉冲标识(不总是需的),
但可以指示数据被处理器接收到。
 OUTPUT操作,将任何一个寄存器送到端口值中,输
出操作用一个WRITE_STROBE脉冲标识,该信号被接口
逻辑用来保证有效的数据被送到外部的系统。典型的,
WRITE_STROBE用于时钟的使能或写使能。
PicoBlaze的一个实例
--KCPSM3内部详细结构
内嵌存储器
有一个内部的64字节的通用存储器,可以使用STORE
指令将16个寄存器中的任意一个寄存器的内容写入64个地
址位置中,FETCH指令将存储器中任一个位置的内容写入
到16个寄存器中的任意一个寄存器中。这允许在处理器边
界内可以保持有更多的变量,也用于保留所有的I/O空间
用于输入和输出信号。
PicoBlaze的一个实例
--KCPSM3内部详细结构
中断
处理器提供单独的INTERRUPT信号,如果需要,可以
使用一个简单的逻辑连接多个信号。默认禁止中断,在程
序中可以使能/禁止中断。活动的中断,使KCPSM3初始
化“CALL 3FF”(一个子程序调用最后的存储器位置),这
里定义了用户定义的跳转向量到中断服务程序ISR。
INTERRUPT_ACK输出产生脉冲。ZERO和CARRY自
动的被保护,禁止其它中断。“RETURNI”指令保证ISR
的结束,回复状态标志,并说明使能/禁止未来的中断。
PicoBlaze的一个实例
--KCPSM3结构连接符号
PicoBlaze的一个实例
--KCPSM3结构连接符号VHDL描述
PicoBlaze的一个实例
--KCPSM3与程序ROM连接VHDL描述
注: 程序ROM的名字取决于用户程序的名字,比如如果
程序文件叫“phone.psm”,汇编器将产生程序ROM的定义
文件叫“phone.vhd”。
PicoBlaze指令集(需要2个周期)
--程序控制组
JUMP aaa
JUMP Z,aaa
JUMP NZ,aaa
JUMP C,aaa
JUMP NC,aaa
CALL aaa
CALL Z,aaa
CALL NZ,aaa
CALL C,aaa
CALL NC,aaa
RETURN
RETURN Z
RETURN NZ
RETURN C
RETURN NC
PicoBlaze指令集(需要2个周期)
--逻辑组
--算术运算组
LOAD sX,kk
AND sX,kk
OR sX,kk
XOR sX,kk
TEST sX,kk
ADD sX,kk
ADDCY sX,kk
SUB sX,kk
SUBCY sX,kk
COMPARE sX,kk
LOAD sX,sY
AND sX,sY
OR sX,sY
XOR sX,sY
TEST sX,sY
ADD sX,sY
ADDCY sX,sY
SUB sX,sY
SUBCY sX,Sy
COMPARE sX,sY
PicoBlaze指令集(需要2个周期)
--中断组
RETURNI ENABLE
RETURNI DISABLE
ENABLE INTERRUPT
DISABLE INTERRUPT
--存储组
STORE sX,ss
STORE sX,(sY)
FETCH sX,ss
FETCH sX,(sY)
PicoBlaze指令集(需要2个周期)
--移位和旋转组
SR0 sX
SR1 sX
SRX sX
SRA sX
RR sX
SL0 sX
SL1 sX
SLX sX
SLA sX
RL sX
--输入/输出组
INPUT sX,pp
INPUT sX,(sY)
OUTPUT sX,pp
OUTPUT sX,(sY)
PicoBlaze指令集详解
--JUMP
PicoBlaze指令集详解
--CALL
PicoBlaze指令集详解
--RETURN
PicoBlaze指令集详解
--RETURNI
PicoBlaze指令集详解
--LOAD
PicoBlaze指令集详解
--AND
PicoBlaze指令集详解
--TEST
PicoBlaze指令集详解
--ADDCY
PicoBlaze指令集详解
--COMPARE
PicoBlaze指令集详解
--SR0,SR1,SRX,SRA,RR
PicoBlaze指令集详解
--SL0,SL1,SLX,SLA,RL
PicoBlaze指令集详解
--INPUT/OUTPUT
PicoBlaze指令集详解
--INPUT/OUTPUT时序
PicoBlaze指令集详解
--RESET
PicoBlaze指令集详解
--STORE
PicoBlaze指令集详解
--FETCH
KCPSM3 汇编器
--原理及操作
KCPSM3汇编器提供一个简单的DOS可执行文件和
三个模版文件,将KCPSM3.EXE, ROM_form.vhd,ROM
_form.v和ROM_form.coe文件复制到工作目录下。
程序可用标准的Notepad和Wordpad工具编写,文件
扩展名为.psm(8字符名字限制)。
打开一个DOS对话框,并定位到当前的工作路径下。
然后运行汇编器“kcpsm3<filename>[.psm]”来汇编所编
写的程序(运行速度很快)。
KCPSM3 汇编器
--原理及操作
KCPSM3 汇编器
--错误处理
当遇到错误时,汇编器将停下来。将显示一个短消
息来帮助判断引起错误的原因。汇编器将显示遇到问题
的行。设计者然后修改错误重新运行汇编器程序。
KCPSM3 汇编器
--文件组成
KCPSM3汇编器使用4个输入文件,产生15个输出文
件。下面给出详细的说明。
KCPSM3 汇编器
--ROM_form.vhd
该文件提供模版,该模版用于汇编器产生的VHDL文
件,和汇编器一起提供,在工作路径下。
该文件为Spartan-3,Virtex-II,Virtex-II Pro的单端口
BRAM配置为ROM.下面给出该文件的模版。
KCPSM3 汇编器
--ROM_form.vhd
汇编器读取ROM_form.vhd模版,将其信息复制到输
出文件<filename>.vhd。不进行其语法的检查。
该文件包含一些特殊的文本串,包含{}。
Attribute AttributeName of ObjectList : ObjectType is
AttributeValue;
汇编器使用{begin template}来标识VHDL定义开始
的地方,然后理解和使用合适的信息来替换所有其它特殊
的串。{name}被输入程序 “.psm”的名字替换。
KCPSM3 汇编器
--ROM_form.coe
该文件为汇编器生成的系数文件的提供模版,该文
件和汇编程序一起提供,并且同在一个工作目录下。
ROM_form.coe模版文件为Spartan-3,Virtex-II和其它
FPGA定义了一个双端口存储器。
汇编器读取ROM_form.coe模版,将其信息复制到输
出文件<filename>.vhd。不进行其语法的检查。
{name}被输入程序 “.psm”的名字替换。
文件的最后一行关键字
memory_initialization_vector=
将要被核生成器标识后面的数据值。汇编器将添加
1024个所要求的值。
KCPSM3 汇编器
--ROM_form.coe
KCPSM3 汇编器
--<Filename>.fmt文件
该文件是对
原始的.psm文件
的格式化,使源
文件看上去更好
看。下面给出该
文件。
KCPSM3 汇编器
--<Filename>.log文件
该文件提供了汇编器执行过程中的详细信息。
KCPSM3 汇编器
--constant.txt文件和labels.txt文件
这两个文件提供了行标号的列表和它相关的地址,
以及常数的列表和值。
KCPSM3 汇编器
--pass.dat文件
pass.dat文件是汇编器的内
部文件,用来表示汇编过程中
的中间步骤。这些文件可不去
理会,但能帮助识别汇编器如
何理解(翻译)程序的。当开
始汇编时,这些文件自动删
除。
KCPSM3编程语法
--简单的规则
1)没有空行- 空行将被汇编器自动去除,如果保持
一行用一个空的注释(用分号“;”)
2)注释- 用分号“;”开始,汇编器忽略注释。
3)寄存器- 所有寄存器必须用“s”定义,后面跟16进制
数0-F。汇编器接受大小写的混合输入,但是将其转换为
“sX”格式。
4)常数- 常数用两个16进制数表示,范围“00”-“FF”,
汇编器接受大小写的混合输入,但是将其转换为大写。
5)标号- 标号是用户定义的字符串,区分大小写。
中间不能有空格,支持下划线“_”。
KCPSM3编程语法
--简单的规则
6)行标号-用来标识一个程序行,用于JUMP和
CALL指令的参考,行标号后面跟一个冒号“:”。
KCPSM3编程语法
--简单的规则
7)汇编器允许使用空格和<TAB>字符,但是指令
和第一个操作数之间必须至少有一个空格。带有两个操
作数的指令,其两个操作数之间必须用“,”分割符。
8)汇编器接受大小写混合编程,但是自动的将其
转化为大写。
KCPSM3编程语法
--简单的规则
KCPSM3编程语法
--常数指令
常数是全局的,即使常数在程序的末尾定义,它也
能在程序的任何地方被使用。
KCPSM3编程语法
--NAMEREG 指令
KCPSM3编程语法
--ADDRESS指令
ADDRESS强迫指令在给定地址执行。
LOG文件给出的描述。
KCPSM3中断处理
--中断使能
使用ENABLE INTERRUPT指令来使能中断。当不
允许中断时,使用DISABLE INTERRUPT来禁止中断。
使用RETURNI ENABLE/DISABLE指令来从中断返回主
程序。
当中断产生时,进行下面的步骤:
1)将程序计数器入栈,保护CARRY和ZERO标志;
2)禁止中断输入;
3)程序计数器的值为“3FF”。
KCPSM3中断处理
--中断处理过程
KCPSM3中断处理
--中断处理基本方法
当中断时,PC跳到“3FF”,所以必须保证在此位置有
一个跳转到正确的中断服务程序的跳转向量。没有JUMP
指令,程序将转向“00”。
中断服务程序可以放在程序的任何位置。ISR执行所
要求的任务,用RETURNI结束。
KCPSM3中断处理
--中断处理基本方法
下面给出一个简单的中断的处理例程
通过向端口写55和AA到waveform_port端口来产生波
形。通过对S0寄存器递减来以固定的间隔来写数值。
响应中断后,PicoBlaze停止产生波形,然后对sA寄
存器递增,将计数器的值写到counter_port。
KCPSM3中断处理
--VHDL设计例子
KCPSM3中断处理
;Interrupt example
;
CONSTANT waveform_port, 02
;bit0 will be data
CONSTANT counter_port, 04
CONSTANT pattern_10101010, AA
NAMEREG sA, interrupt_counter
;
start: LOAD interrupt_counter, 00
;reset interrupt counter
LOAD s2, pattern_10101010
;initial output condition
ENABLE INTERRUPT
;
drive_wave: OUTPUT s2, waveform_port
LOAD s0, 07
;delay size
loop: SUB s0, 01
;delay loop
JUMP NZ, loop
XOR s2, FF
;toggle waveform
JUMP drive_wave
;
ADDRESS 2B0
int_routine: ADD interrupt_counter, 01
;increment counter
OUTPUT interrupt_counter, counter_port
RETURNI ENABLE
;
ADDRESS 3FF
;set interrupt vector
JUMP int_routine
--中断服务程序
KCPSM3中断处理
--ISR中断服务程序
KCPSM3中断处理
--中断所执行的操作
KCPSM3中断处理
--中断脉冲的时序
建议中断信号保持至少2个KCPSM上升沿时钟周期
KCPSM3 CALL/RETURN栈
--调用和返回处理过程
PicoBlaze包含一个自动的嵌入式的堆栈,用来当
遇到CALL指令时保存PC的值,在遇到RETURN(I)是恢
复PC的值。堆栈不需要初始化(或者用户的控制)。
然而堆栈只支持到最多31级的嵌套的子程序。
下面给出一个例子来说明这个问题。
KCPSM3 CALL/RETURN栈
--调用和返回处理过程
KCPSM3共享程序空间
--一个奇妙的想法
为了设计容易和满足系统的性能要求,经常需要在
一个可编程芯片内使用多个KCPSM3宏。在SPARTAN-3
或者Virtex-II芯片内使用一个BRAM来提供1024个地址空
间。
下面给出多个KCPSM3共享程序空间的方法。
KCPSM3共享程序空间
--一个奇妙的想法
KCPSM3输出端口的设计
--简单输出端口
对于少于8个输出的端口可以尝试分配”one-hot”地
址,然后确保只解码正确的PORT_ID信号。这省去大量
的逻辑和地址解码。同时,降低了PORT_ID总线上的负
载。
在程序中使用CONSTANT指令使代码可读,并且确
保使用了正确的端口。
KCPSM3输出端口的设计
--简单输出端口
KCPSM3输出端口的设计
--带解码和高性能的输出端口
KCPSM3输入端口的设计
--简单输入端口
对于少于8个的简单输入端口,使用多路复用开关
将其接入输入端口。建议检查综合的结果,以确保特殊
的MUXF5和MUXF6被用来构成高效的多路复用结构。
在程序中使用CONSTANT来定义多路开关。
由于PORT_ID保持有效2个周期,因此在多路复用器后
加入寄存器来保持其性能。
KCPSM3输入端口的设计
--复杂输入端口
有时候,一个提供数据到KCPSM3电路,以知道数据已
经被读取。一个典型的例子是使用FIFO缓冲区,可以准
备下一个被读取的数据。下面给出其结构和时序图。
KCPSM3输入端口的设计
--复杂输入端口FIFO时序
KCPSM3和存储器的连接
--提高性能的设计方法
与存储器的连接是最容易降低系统性能的原因。
插入并行的寄存器,分割输入多路复用器,认真的分
配端口地址,这些都是提高系统系统的方法。
KCPSM3和存储器的连接
--提高性能的设计方法
基于PicoBlaze处理器PWM控制
--系统性能的功能要求和结构
该设计将使用PicoBlaze片上8位软核处理器实现对脉
冲宽度调制的控制。作为应用该设计允许控制12个PWM
通道;8个通道控制板上的LED的闪烁,剩余的4个通道通
过插针引出后可用示波器观察。可以在插针外接一个简单
的电阻-电容(RC)网络平滑电路生成一个数字到模拟转换
通道(D/A通道)。
PWM的脉冲重复频率PRF为1KHz和8位
的分辨率(256步)。每个PWM都能通
过PC机上的超级终端(Hyper
Terminal)软件工具独立的设置(通过PC
机的RS232串口实现命令的传输)。串口参数设置波特
率:9600;数据位:8位;无奇偶校验;无流量控制。
基于PicoBlaze处理器PWM控制--系统结构
基于PicoBlaze处理器PWM控制--系统结构



picoblaze_pwm_control.vhd:顶层文件,用于描述
整个硬件系统;
kcpsm3.vhd:PicoBlaze处理器的完整描述文件;
pwm_ctrl.vhd:用于picoBlaze的汇编后的程序(保
存在块存储器中),picoBlaze程序源文件汇编代码;
基于PicoBlaze处理器PWM控制--系统结构

uart_tx.vhd:带有16个字节FIFO缓冲区的
UART发送器模块;
•
•
kc_uart_tx.vhd:UART的发送状态机模块,数据的
协议转换,将处理器端口上8位并行数据,转换成
RS-232串行发送数据;
bbfifo_16x8.vhd:16个字节FIFO缓冲区;
基于PicoBlaze处理器PWM控制--系统结构

uart_rx.vhd:带有16个字节FIFO缓冲区的
UART接收器模块;
•
•
kc_uart_rx.vhd:UART的接收状态机模块,数据协
议转换,将接收到的RS-232串行接收数据转换成
处理器端口上需要的8位并行数据;
bbfifo_16x8.vhd:16个字节FIFO缓冲区;
基于PicoBlaze处理器PWM控制--系统结构
基于PicoBlaze处理器PWM控制
-系统PWM的产生原理
该设计通过使用PicoBlaze上执行软件产生PWM,而
不是使用PicoBlaze和PWM硬件外设产生。可就是说软件
动态的产生PWM更加灵活,但是对实现也有一些限制。8
位分辨率=256步
1ms/256=3.90625usPRF=1kHz(1/1000=1ms)
如图14.69所示,PWM关键的参数有两个:脉冲重复
频率(Pulse Repetition Frequency, PRF)和分辨率(步
数,用于设置每个脉冲的占空比),该设计中的
fPRF=1kHz,分辨率为8位(256步)。
基于PicoBlaze处理器PWM控制
-系统PWM的产生原理
基于PicoBlaze处理器PWM控制
-系统PWM的产生原理
PicoBlaze使用2个时钟周期来执行每条执行,该设计
中其参考时钟为50MHz,所以PicoBlaze的性能为25百万条
指令/秒(million instructions per second,MIPS),即执行一
条执行需要40ns。尽管这对于一个8位单片机来说是很快
了,但是它执行97条指令需要3.90625us步长间隔支持上面
的参数。然而,97条指令用来驱动12通道PWM信号已经
足够了,处理器的50%的带宽仍然可以用于高级的控制任
务(处理与UART和处理文本命令)。
基于PicoBlaze处理器PWM控制
-系统PWM的产生原理
该设计中产生连续的PWM。,通过软件产生脉冲实
现PWM,这是常用的软件方法,这样是为了有时间执
行其它的处理任务。
注意,当使用高性能的PicoBlaze和包含硬件外设
时,不需要这种折衷。
基于PicoBlaze处理器PWM控制
-系统PWM的产生原理
该设计中,目标是提供一个精确的PRF和占空
分辨率。这个要求可以通过中断实现。如图14.70所
示,这个设计使用一个硬件的计数器设置中断时
序。计数器有196个状态,并且产生中断脉冲。等于
中断的周期为3.92us,PRF为996.5Hz。
图14.70 中断产生原理
基于PicoBlaze处理器PWM控制
-系统PWM的产生原理
其中:控制命令为:
1. LDn hh , 其中:
1) “n”为所控制的LED的编号
2) “hh”为2位十六进制数,指明了PWM占空因
子。(范围00-FF)
2. LOk hh , 其中:
1) “n”为IO的编号,9-12
2) “hh”为2位十六进制数,指明了PWM占空因
子。(范围00-FF)
基于PicoBlaze处理器PWM控制
-系统PWM的产生原理
基于PicoBlaze处理器PWM控制
-系统PWM的产生原理
基于PicoBlaze处理器PWM控制
--系统中断硬件模块的设计
基于PicoBlaze处理器PWM控制
--系统PWM模块的设计
基于PicoBlaze处理器PWM控制
-系统UART模块设计
该系统需要使用RS232串口,接收上位机的命令,所
以在该设计中包括UART发送模块和UART接收模块。图
14.74给出了UART和picoBlaze的连接图。
基于PicoBlaze处理器PWM控制
-系统UART模块设计
基于PicoBlaze处理器PWM控制
-系统UART模块设计
UART模块的发送和接收状态各个位生成状态端口
status_port,该端口包含rx_full、rx_half_full、
rx_data_present、tx_full和tx_half_full状态位。
系统UART模块设计
-系统UART发送模块的设计
图14.76给出了系统UART发送模块的结构图和
时序,UART发送模块包含两个模块 :
图14.76 UART发送模块和时序
系统UART模块设计
-系统UART发送模块的设计
bbfifo_16x8和kcuart_tx。下面简要介绍这两个模
块:
1)bbfifo_16x8:为16个深度的FIFO,用来缓存来
自PicoBlaze写端口的8位并行数据。用来在MCU和串口
异步系统之间进行处理。
2)kcuart_tx:从写FIFO缓冲区取出8位的并行原始
数据,然后通过模块内的状态机,将8位并行原始数据
转换成符合RS-232格式串行数据,并且发送。
系统UART模块设计
-系统UART接收模块的设计
图14.77给出了系统UART接收模块的结构图和时
序,UART接收模块包含两个模块:
系统UART模块设计
-系统UART接收模块的设计
bbfifo_16x8和kcuart_rx。下面简要介绍这两个模
块:
1)kcuart_rx:通过模块内的状态机,从接收到的
RS-232格式串行数据提取出所需要的8位并行数据,并
准备写入到接收FIFO缓冲区。
2)bbfifo_16x8:为16个深度的FIFO,用来缓存来
自kcuart_rx端口的8位数据。用于PicoBlaze读取这些接
收到的数据。
习题
1. 说明片上可编程系统的含义。
2. 说明MCU和硬件逻辑在实现数字系统应用的优点
和缺点。说明PicoBlaze软核处理器的主要特性。
3. 说明片上可编程系统软件和硬件的协同设计。
4. 理解基于PicoBlaze处理器PWM控制的软件和硬
件的实现过程。