FPGA/ASIC技术
最近在使用Atlys开发板,简单地过了一下板子光盘上的程序。因为例子用到了PicoBlaze,而在这之前并没有接触过PicoBlaze的东西,所以一开始有畏难情绪。后来画了十几分钟读了一下PicoBlaze的用户手册和kcpsm3的指南,发现也没有那么难;而且PicoBlaze真的是非常简单。因为例程里有的东西并没有讲到,可能会对初学者造成不顺利,所以在此把缺失的部分补上,希望对后来者有用。
首先修改program.psm文件,用记事本或者写字板都可以打开。它是一个函数模版的性质,打开基本就是一目了然:
;================================================================; Port address definitions...;================================================================
CONSTANT switch_in , 00 ; Switch read portCONSTANT leds_out , 01 ; LED write portCONSTANT uart_data_rx , 02 ; UART receive read portCONSTANT uart_data_tx , 03 ; UART transmit write portCONSTANT data_present , 04 ; UART stat read port, lsbCONSTANT buffer_full , 05 ; UART stat read port, lsb
;================================================================; Useful constant declarations...;================================================================
CONSTANT all_clear , 00 ; define zero
CONSTANT ascii_NUL , 00 ; ascii code (null character)
这里为了实现一个最简单的功能,即把switch的状态读到PicoBlaze的一个寄存器里面,再把该寄存器的内容写到LED端口上控制LED的状态;这是一个loopback测试程序。
用PicoBlaze,仅需要两行代码就可以了!
在刚才打开的program.psm的task初修改:
loop: LOAD s0, all_clear ; zero out reg s0 (nop) INPUT S0 , 00 ; Switch read port OUTPUT S0 , 01 ; LED write port ; LAB TASK #1 ; Write code to read the switch state and ; then write it to the LED control port.
端口定义里面,00是switch(拨码开关)端口对应的地址,s0是无等待寄存器,分号用来注释
INPUT S0 , 00 ; Switch read port 把switch开关对应的状态读入s0寄存器
OUTPUT S0 , 01 ; LED write port把s0的状态再写入LED控制端口
然后启用kpsm3编译程序进行编译。windows系统的开始--运行,输入cmd然后回车,切换到assemble对应的目录,如图所示:
[[wysiwyg_imageupload:187:]]
然后回车,就可以生成program.v文件了;然后把它加入ISE的工程里面。这里需要注意的是kcpsm3是个dos程序,只能运行在32位程序。在我的64位win7下,虽然ISE可以原生支持,但是kcpsm3这个程序不能在64位运行,幸亏我还有虚拟PC。
全部0条评论
快来发表一下你的评论吧 !