Tag Archives: picoblaze

开始设计一个新的软核CPU

适用于Xilinx FPGA的嵌入式处理器,高端的有Sparc(64位核),MicroBlaze、Cortex-M1等(32位核),中端的有OpenMSP430等(16位核),低端的DW8051、PicoBlaze等(8位核)。应该说可以选择的产品线已经很齐了,为啥还要再弄一个呢? 目前用过的几个处理器除了PicoBlaze外都很占资源,我只需要一个简单CPU,用于一些顺序的逻辑控制。但是PicoBlaze没有编译器、并且硬件上的限制多了点、不支持堆栈导致编程模型很不顺手。所以打算设计一个“够用”的处理器。 因为和PicoBlaze脱不开关系,所以名称暂定为NanoBlaze,意为介于PicoBlaze和MicroBlaze之间:) 目前设计的草图如下:

Posted in Memo | Tagged , , , , | Comments Off on 开始设计一个新的软核CPU

Picoblaze Utils 对工具链的需求

自己的Picoblaze已经在用了,并且项目已经结了。 把想法记录一下,否则过一段时间就忘了。 先说说需求的由来,本来SPI Master是用Verilog来写的,刚开始还好,到后来需要加入数据变换、饱和、读写SRAM,渐渐的用Verilog开始很麻烦了…… 因为Picoblaze的每个指令都是2个clock,于是转到Picoblaze。用汇编写了第一版的固件,比verilog方便很多,无论是改变时序,还是增加一些功能。但是汇编有个很烦的问题——条件判断和循环! 当程序变大、变复杂之后,各种跳转就会让人头晕,而且很容易一不小心跳错。也有函数忘了写return导致直接跑飞,退出中断isr忘记重新使能中断……oh,no…… 一、于是开始找编译器

Posted in Others | Tagged , , , , | 2 Comments

Finished picoblaze-utils

完成PicoBlaze的工具链,目前用python的正则表达式来做,主要是想快速构建一个工具链,以后有时间再使用llvm(c++)或cparser(python)来重写前端。 当前的c语法和汇编很接近,并且没有push和pop操作,需要自己封装成宏。需要自己分配寄存器。但是PicoBlaze本来就不是很强大,定位是可编程状态机,所以暂时够用了。 代码上传到github了,以GPLv2发布。 https://github.com/buaabyl/picoblaze_utils

Posted in Others | Tagged , , , , , , , | Comments Off on Finished picoblaze-utils

准备开发Picoblaze工具链(基于gcc和ctags)

之前找到PicoBlaze的工具链(基于sdcc的),曾高兴了一段时间,但是实际使用后发现生成的代码未优化。 c += 1; 会生成如下的代码 load r1, r0 add r1, 1 load r0, r1 这个太崩溃了,明显没有优化。这个也还能接受,但是有的时候生成的代码和期待的差太多(是Bug,不是不同的实现方式)。 所以打算重新启动自己的Picoblaze工具链计划。

Posted in Others | Tagged , , , | Comments Off on 准备开发Picoblaze工具链(基于gcc和ctags)

完成PicoBlaze工具链——基于sdcc和kcpsm3 (Finish PicoBlaze Toolchain)

已经完成了PicoBlaze的工具链,编译器是基于别人针对sdcc框架移植的pbcc,汇编器直接使用xilinx的kcpsm3,自己做了一个封装。汇编器在系统的临时文件夹里运行,默认输出verilog结果,其它格式可以自己在kcpsm3w32后加参数。 代码放在了 http://code.google.com/p/sdcc-kcpsm3w32/ — Finish picoblaze toolchain. source code at http://code.google.com/p/sdcc-kcpsm3w32/

Posted in Memo | Tagged , , , , , , , | Comments Off on 完成PicoBlaze工具链——基于sdcc和kcpsm3 (Finish PicoBlaze Toolchain)

开发PicoBlaze的工具链

准备使用python来做PicoBlaze的工具链,用gcc做前端,得到语法优化后的结果,然后写脚本得到语法树,然后再生成PicoBlaze汇编,再写一个简单的汇编器。

Posted in Others | Tagged | Comments Off on 开发PicoBlaze的工具链

使用匿名管道捕获程序输出

最近使用xilinx的Spartan-3E来玩picoblaze,发现他们提供的kcpsm3居然是dos程序,每次执行完就会把窗口弄的极其难看,想自己写一个程序让他在另外的窗口执行,再把结果显示到当前的窗口,想到了新建一个进程然后重定向输出。 并且有的时候也需要获取命令行程序的输出、保存输出到日志,可以用重定向来实现,但是这样就不能实时看到。 不过在Codeproject发现了一个匿名管道实现的方式,问题就解决了:Real-Time Console Output Redirection 自己把需要的代码提取出来,整理成一个简单的小程序,通过VC编译成命令行模式。

Posted in Memo | Tagged , , , , , | Comments Off on 使用匿名管道捕获程序输出