下面介绍KCPSM3.zip中所包含的各个文件以及PicoBlaze的结构作一个简要说明。
图 1为解压后的KCPSM3的目录结构: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
图 1 KCPSM3文件目录结构图
kcpsm3.vhd | KCPSM3的核心VHDL描述 |
embedded_kcspm3.vhd | 连接了program ROM的KCPSM3的VHDL描述文件 |
kcpsm3_int_test.vhd | 压缩包自带的设计案例的VHDL文件 |
test_bench.vhd | 对应kcpsm3_int_test.vhd的测试VHDL文件,相当于一个kcpsm3 test bench的模版 |
uart_clock.vhd | 基于UART的实时时钟参考设计的VHDL文件 |
uart_tx.vhd | UART发送器核,带有8位数据位,无奇偶校验,1位停止位,整型16字节FIFO缓冲器,占用了18个Slice |
uart_rx.vhd | UART接收器核,带有8位数据位,无奇偶校验,1位停止位,整型16字节FIFO缓冲器,占用了22个Slice |
kcuart_tx.vhd | UART发送器核,带有8位数据位,无奇偶校验,1位停止位。可作为发送器单独使用,但一般作为uart_tx的组成部分来使用 |
kcuart_rx.vhd | UART接收器核,带有8位数据位,无奇偶校验,1位停止位。可作为发送器单独使用,但一般作为uart_rx的组成部分来使用 |
bbfifo_16x8.vhd | 深度为16字节的FIFO,占用资源为8 Slice。在uart_tx和uart_rx中用到,也可作为FIFO单独使用 |
uart9_tx.vhd | 带有奇偶校验和16字节FIFO的UART发送器 |
uart9_rx.vhd | 带有奇偶校验和16字节FIFO的UART接收器 |
kcuart9_rx.vhd | 带有奇偶校验的UART接收器 |
kcuart9_tx.vhd | 带有奇偶校验的UART发送器 |
bbfifo9_16x9.vhd | 深度为16字节的FIFO,占用资源为9 Slice。在uart_tx和uart_rx中用到,也可作为FIFO单独使用 |
如图 2所示,该图清楚地表明了PicoBlaze设计的HDL文件层次结构(对于用Verilog描述的设计也是这种结构,在此仅以VHDL为例);
图 2 PicoBlaze HDL层次结构图
KCPSM3.EXE | KCPSM3的汇编程序 |
ROM_form.vhd | 生成ROM的vhd文件模版 |
ROM_form.v | 生成ROM文件的v文件模版 |
ROM_form.coe | 生成ROM所需的系数的模版 |
cleanup.bat | 批处理文件,能自动清理KCPSM3.EXE对*.psm汇编后产生的文件 |
int_test.psm | 压缩包自带的设计案例的psm汇编文件 |
uclock.psm | 基于UART的实时时钟的psm汇编文件 |
PB_BMM.EXE | 能够定位FPGA配置文件中的Block Memory所在的数据段 (注1) |
change_pb_bits.bat | 批处理文件,能够自动进行Block Memory中的数据修改 |
注1:该工具对于基于PicoBlaze设计的配置文件bitstream是可行的(这应该是因为基于PicoBlaze的设计结构简单),对于其他设计生成的bitstream文件不一定可行。
hex2svfsetup.exe | JTAG用到的可执行程序 |
hex2svf.exe | 同上 |
svf2xsvf.exe | 同上 |
playxsvf.exe | 同上 |
jtag_loader.bat | 批处理文件,能够自动按顺序执行上述4个可执行程序 |
JTAG_Loader_ROM_form.vhd | 包含了JTAG接口的ROM模版,VHDL格式 |
Normal_ROM_form.vhd | 常规ROM模版,同前面的ROM_form.vhd |
JTAG_Loader_ROM_form.v | 包含了JTAG接口的ROM模版,Verilog格式 |
Normal_ROM_form.v | 常规ROM模版,同前面的ROM_form.v |
KCPSM3是一个picoblaze的的处理器型号,用于时序要求不高的场合。相当于一个状态机。
结构图如下:
ALU:
提供很多8bit的操作。所有的操作利用从Sx来的一个操作数。结果背返回到原来的寄存器。操作还需要另一个操作数sY,或者一个8bit的常量(kk)。为了简化指令,ADD 直接加上常数和INCREMENT操作一样,比如 “ADD <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1”
ADD和SUB包含了进位(ADDCY和SUBCY)以支持大于8位的算术操作。
LOAD,AND,OR,XOR bit-wise操作提供操作和测试值的能力。
全面的包括SHIFT和ROTATE组
COMPARE和TEST指令使得能够测试寄存器的值而不需要改变他们的值,并进行奇偶校验。
Flag and Program Flow Control
ALU的结果决定ZERO和CARRY的值。ZERO有效,当ALU的所有值多是0的时候。Carry当有进位产生时有效。Carry也背用来做shift作用。在TEST命令时,作为结果是否满足奇偶校验的要求。
Flag的状态也能被用来有条件和无条件程序就程控制的执行顺序。JUMP用于执行完全的(aaa)地址空间的指令。CALL和RETURN指令为一般使用的代码提供一个子段。CALL指令是为一个“完全地址“(aaa)和一个内部程序计数器栈保持RETURN需要的相应的地址。栈可以存32个。
Reset
RESET强迫处理器进入初始状态。程序会充“00“开始执行,并且中断无效, 状态表示和CALL、return也会被复位,
Input/Output
256个输入和输出。写入数据的端口的“地址“被一个8bit的”port-ID”标识。端口地址也能在程序中用“完全值”(pp)来表示,或者间接的用任一个sY来确定。
在INPUT操作进行时(写入数据到寄存器),那么READ_ATROBE信将来一个脉冲。WRITE_STROBE同理。
Scratch Pad Memory
一个内部的64byte一般用途的memory。16 个寄存器中任何一个能被写入到64个byte中的任何一个,使用STORE命令。FETCH命令能够把64个byte中的任何一个写入到16个寄存器中。这就允许一个更多数目的变量能够被“保持”在boundary of the process,
文章评论(0条评论)
登录后参与讨论