riple

Stay Hungry, Stay Foolish.

Avalon- Microsequencer简单汇编工具开发成功

0
阅读(2258)

开发成功已经有一周了,才腾出时间来写篇日志。

    上周五晚上的这个时间,还在为如何屏蔽无效位、如何自动生成屏蔽操作的掩码在伤脑筋;周六一大早起来,把梦中想好的两条组合命令实现了;接下来,又实现了 代码段起始地址的自动获取和汇编语言文件的编译;最重要的是,实现了命令行脚本的离线运行功能,即使没有硬件开发板,也能编译汇编文件了。

    这一Tcl程序的操作界面如下,可以很容易地看出,是从vjtag_master的操作界面移植来的:


    实现的功能如下:

    1. 操作指令记录和汇编文件编译功能。通过init和done两条指令打开和关闭目标二进制文件,供记录操作指令对应的二进制指令;通过compile指令把 一个用汇编指令编写的文件编译为目标二进制文件,编译功能支持Micro-Sequencer的全部9条基本指令。

    2. 原始指令执行功能。除了jmp和jmpd指令外,通过vjtag_master模拟执行了Micro-Sequencer的7条基本指令。 

    3. 组合指令执行功能。为了方便汇编语言的编写,设计了等价于多条原始指令组合执行的组合指令。

    4. 总线状态调试功能。保留了vjtag_master的调试指令。

    汇编文件rar和编译生成的二进制文件rar在此。汇编文件可以采用各种文件 类型(.txt、.tcl),编译生成的microsequencer_classic_0.mif文件是Quartus II专用的存储器初始化文件,用于初始化Avalon-microsequencer的指令ROM。

    比较这两个文件可以看出,汇编文件中的18条汇编指令编译后得到44条二进制指令。在汇编文件中通过set指令可以定义Avalon-MM总线上特定地址 值对应的变量,在后续指令中可以通过引用该变量访问特定地址;通过get_addr指令可以获得下一条指令在指令存储器中对应的地址值,这一地址值可以通 过set命令指定给一个变量,在跳转指令中引用该变量,可以访问特定代码段的起始地址。

    这一简单编译工具采用Tcl语言编写,是从avalon_vjtag_master.tcl改编来的,是原有工具的升级版,源代码在此rar。在windows命令行执行 quartus_stp -t avalon_vjtag_master.tcl即可运行。 

 

相关链接:

Microsequencer - From Wikipedia, the free encyclopedia

A microsequencer circuit

Microsequencer allowing a sequence of conditional jumps without requiring the insertion of NOP or other instructions

A Wisdom Archive on microsequencer

The scc-32/scc-16 Microsequencers and AHBDBG System Debugger

Dynamically Reconfigurable N-Way Microsequencer

Baidu
map