[FPGA]

移植XILINX嵌入式8bit微处理器picoBlaze到Altera的FPGA

[复制链接]
1821|4
手机看帖
扫描二维码
随时随地手机跟帖
deru_qq|  楼主 | 2015-7-22 16:21 | 显示全部楼层 |阅读模式
    一直以来公司的硬件部选用的FPGA都是XILINX的,所以做项目时写的程序都是针对XILINX的器件,但是考虑到公司在降成本,将来换Altera的FPGA也不是没有可能,所以最近研究了一下,以前的代码当然大部分
都是通用的,但是项目中用到了XILINX的8bit嵌入式微处理器picoBlaze,这个处理器是专门针对XILINX的器件逻辑资源的结构而设计,占用资源极少,但是无法直接移植到其他厂家FPGA器件上,曾经试图看处理器的源码,但是好几次看了一点就放弃了,因为里面几乎所有模块全是用ISE的原语来实现,太难懂。后来在网上找到picoBlaze的一个克隆版,叫做pacoBlaze,这个全部用Verilog语言写成,因此是可以直接移植的,在XILINX器件上试了,可以用,占用约170个SLICE(约相当于Altera的340个LE),然后直接在QuartusII中测试,结果吓了一跳,竟然用了1500多个LE,结果发现处理器的register_file,scratch ram和stack全部被综合成用寄存器实现,16x8bit的寄存器,64x8bit的ram,32x10bit的stack,这样算下来占用的资源是不少,而在XILINX器件中,这些都可以被综合成分布式RAM,而且分布式RAM对于逻辑资源的利用率很高,例如8个SLICE(约等于16个LE)就能提供16x8bit的RAM,用来实现register_file,如果全部用寄存器来实现,需要128个LE,所以相差很多;后来翻了一下Altera的datasheet,发现他们的FPGA确实不能这么用,如果全部用寄存器来实现,还不如不用(其实scratch_ram可以用块RAM来实现,但是即使这样,register_file和stack占用的资源还是太多)。
    解决办法还是有的,register_file用Altera的块RAM生成双口RAM来实现(只用了一个M4K的128bit,有点浪费),但是这个双口RAM是同步的,而XILINX的分布式RAM生成的双口RAM是异步的,中间差了一个时钟,这样原先2个clk执行一条指令变成了3个clk执行一条指令,性能打了折扣,但是速度换面积,不能两全其美;这样就开始在pacoblaze的基础上修改了代码,完成之后,先在XILINX器件上测试了一下(项目中的一个模块,功能稍复杂,用了600多条指令,如果在这个上面测试没有问题,就应该没什么大问题了),没有问题,然后在Altera器件上测试,综合之后只占用了211个LE,但是使用了4个M4K RAM,本来应该只要3个的,register_file,scratch ram和stack各用1个,查看了一下,原来register_file用两个M4K来实现,至于为什么,可以看文档Cyclone II Memory Blocks.pdf的第29页时序图(这种情况对于处理器没有影响),然后试着按这个时序图改写Verilog编码,结果还是用2个M4K来实现,只好用MegaWizard来实现,这样总共用了3个M4K,但是别忘了还有ROM呢,ROM最大支持1024条指令,即1024x18bit,用M4K来实现需要5个,最终总共消耗资源如下图所示
搜狗截图15年07月22日1535_1.png

    完成之后再开发板上编了一个简单的测试程序,数码管计数,没有问题
   
    处理器的MIPS,这个应该是大家最关心的参数了吧,下面做两个对比吧,对比之前,先区别一下这几个版本的名字:
    picoBlaze: XILINX官方原版处理器,占用资源极少,速度极快,但是只能用在XILINX器件上
    pacoBlaze: picoBlaze的克隆版,可以移植到其他FPGA上
    PSM      : 本帖对pacoBlaze进行的修改,可以用于Altera FPGA并且占用较少资源,随便起的名字
   
    对比1:picoBlaze和pacoBlaze在XILINX器件(XC3S700A-4)上速度的对比
      picoBlaze : 140M/70MIPS      100 SLICE(约200个LE)        1Kx18bit块RAM 1个
      pacoBlaze:  89M/44.5MIPS    179 SLICE(约358个LE)        1Kx18bit块RAM 1个
      PSM         : 110M/36.7MIPS    148 SLICE (约296个LE)        1Kx18bit块RAM 2个
    可以看到,原版的性能超过后面两个许多,并且占用资源也少很多,已经优化到了极致;
   
    对比2:PSM在XILINX器件(XC3S700A-4)和在Altera器件(EP2C5T144C8)上的速度对比
      XILINX   : 110M/36.7MIPS    148 SLICE (约296个LE)        1Kx18bit块RAM 2个
      ALTERA   :  75M/25MIPS      211 LE                                    M4K 8 个
      
    上述速度是模块单独综合之后的速度,实际的速度在优化布线之后会比这个快,但是外部连接了IO口之后又会增加延时,例如我在外部添加了两个8位宽的IO端口来控制数码管,最终速度为60M

    下面是picoBlaze处理器的一些参数:
    寄存器    :16个8bit通用寄存器
    指令宽度  :18bit
    程序空间  :1Kx18bit
    片上RAM   :64byte (PSM为256byte)
    中断个数  :1个可屏蔽中断
    IO            :支持256个8位宽的IO端口(需要自己扩展)
   
    picoBlaze只支持汇编语言,官方有一个汇编器,我自己编写了一个转换程序,可以将这个汇编器生成的HEX文
件转换为psm_rom.v并拷贝到psm文件夹下,这个文件会被综合成M4K格式的ROM,开发起来相对比较简单。

压缩包里的文件说明:
  KCPSM3.zip        —— picoBlaze官方的压缩包
  pacoblaze-2.2.zip —— pacoBlaze官方压缩包
  pacoblaze3.rar    —— 自己誊写的pacoBlaze代码,由于官方的一个文件里面包括了4个版本,并且有很多宏定义
                       看起来比较乱,所以重新写了一下,只保留了第3个版本,兼容官方的KCPSM3,使用时只
                       要包含pacoblaze.v就行了,其他文件都被include了
  psm.rar           —— 自己修改的版本,1条指令周期需要3个CLK,可以移植到其他FPGA上的
  psm_altera.rar    —— 专用于Altera FPGA的版本,相对于PSM.rar版本,可以减少一个M4K
  psm_demo.v        —— 自己写的测试程序,实现了一个1s钟的周期中断和16个IO口
  psm_rom.psm       —— 汇编程序,控制8个数码管显示计数值,每个中断周期计数值加1
  
  汇编器使用:
    在PSM文件加下有一个Assembler文件夹,其中KCPSM3.EXE是官方的汇编器,另外有几个文件是这个汇编器必须
    的:ROM_form.v,ROM_form.vhd,ROM_form.coe;运行汇编器汇编成功之后会生成许多文件,我自己编写了
    一个转换程序psm_asm.exe,这个程序将生成的HEX文件转换为.v文件,这个.v文件可以直接用于工程,每次
    修改完汇编程序,运行一下compile.bat,会自动生成.v文件,并将.v文件拷贝到psm文件夹下

picoBlaze各版本.part1.rar

1 MB

picoBlaze各版本.part2.rar

1 MB

picoBlaze各版本.part3.rar

1 MB

picoBlaze各版本.part4.rar

1 MB

picoBlaze各版本.part5.rar

201.94 KB

相关帖子

ar_dong| | 2015-7-22 22:01 | 显示全部楼层
你就不能软移植么,为什么非要硬移植

使用特权

评论回复
deru_qq|  楼主 | 2015-7-23 08:55 | 显示全部楼层
ar_dong 发表于 2015-7-22 22:01
你就不能软移植么,为什么非要硬移植

这个也算不得硬移植吧,不管哪个厂家的器件,块RAM都大同小异,稍作修改就行了,直接移植也可以,但是需要消耗很多资源,看你怎么取舍了

使用特权

评论回复
lianshumou| | 2015-8-12 16:37 | 显示全部楼层
楼主好人,其实以前Altera也有一个类似的东西。其实就是个可编程状态机。但很不幸的事,在后面的版本中它不存在了。XILINX确一直保存了下来

使用特权

评论回复
deru_qq|  楼主 | 2015-8-13 12:14 | 显示全部楼层
lianshumou 发表于 2015-8-12 16:37
楼主好人,其实以前Altera也有一个类似的东西。其实就是个可编程状态机。但很不幸的事,在后面的版本中它不 ...

没错,处理器本质就是一个可编程的状态机,XILINX这个处理器最开始的名字就叫做KCPSM,KC是作者的名字,PSM就是Programmable State Machine

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

132

帖子

2

粉丝