DSP TMS320F2812验证平台制作日志3
之前最后留下一个伪指令的问题,考虑再三,我还是决定暂时不做深入研究了。因为在我的代码转换中,可能用不到伪指令的情况。
今天首先整理一下我已经完成的指令:
指 令:ABS ACC
指令含义:对ACC中值取绝对值,存入ACC中
宏定义名:ABS_ACC
关 联:C,N,V,Z,OVM
参考页码:6-19
指 令:ABSTC ACC
指令含义:对ACC中值取绝对值,存入ACC中.将TC与符号位作异或运算并存入TC
宏定义名:ABSTC_ACC
关 联:C,N,V,Z,TC,OVM
参考页码:6-20
指 令:ADD ACC , #16bit<<#0..15
指令含义:根据SXM决定16比特立即数是否做符号位扩展,再移位后与ACC相加,结果存入ACC
宏定义名:ADD_ACC_16bitShift(ShiftValue)
参 数:ShiftValue
参数含义:移位量,范围0~15之间
预设参数:16bit预设为0x0011
关 联:C,N,V,Z,OVC,OVM,SXM
参考页码:6-22
指 令:ADD ACC , loc16<<T
指令含义:根据SXM决定loc16指向的16比特数据是否做符号位扩展,寄存器XT高16位作为移位量,对数据移位后与ACC相加,结果存入ACC
宏定义名:ADD_ACC_loc16ShiftT
预设参数:loc16预设为第一种寻址方式,参数0x3
关 联:C,N,V,Z,OVC,OVM,SXM
参考页码:6-24
指 令:ADDB XARn , #7bit
指令含义:将一个无符号7比特常量与XARn相加,结果存入XARn
宏定义名:ADDB_XARn_7bit(_7bit)
参 数:_7bit
参数含义:7比特的无符号数,高于7比特位全置0
预设参数:XARn预设为XAR0
关 联:无
参考页码:6-33
指 令:ADRK #8bit
指令含义:将一个无符号8比特常量与ARP指针所指XARn相加,结果存入XARn
宏定义名:ADRK(_8bit)
参 数:_8bit
参数含义:8比特的无符号数,高于8比特位全置0
关 联:ARP
参考页码:6-42
首先对第一条指令作测试,对ACC做绝对值处理,为了方便测试,汇编代码如下:
.def Begin
Begin: MOV ACC, #0
MOV ACC, #-2<<#15
NOT ACC
ABS ACC
预计是,ACC先为0,然后0x7FFF0000,取反后为0x8000FFFF,绝对值后为0x7FFF0001。
执行时同时打开寄存器观察,第一步,ST0的Z标志位为1,取反时N为1。最终结果正确。
测试第二条指令,将上述汇编最后一句改为ABSTC ACC,执行到最后一步时,TC位为1,restart以后(TC位此时仍为1,重新执行一遍程序),最后一步TC位成功清零。
现将这两条指令的汇编转换实现。
设置一个总开关Trans_to_Assembler,为真时汇编语言转换开启。
输出文件定为asm.asm,在main函数时完成预先的准备工作
Trans_to_Assembler = true; //开启汇编转换功能
if(Trans_to_Assembler)
{
fpasm = fopen("asm.asm","w");
fprintf(fpasm," .def Begin\nBegin:\n"); //定义开始符
}
在ABS ACC的实现函数后加入转换部分
if(Trans_to_Assembler)
{
fprintf(fpasm," ABS ACC\n");
}
指令中最长操作码为7个字符,于是在操作码与操作数之间,输入了5个空格,这样做的目的就是为了输出文件看上去的美观。
ABSTC ACC的转换功能和上述类似。
现在的问题是我需不需要将寄存器初始化相关的指令也做转换呢?
在完成前两个指令以后,对第三条指令需要有些变通。
fprintf(fpasm , " ADD ACC , #%u << #%u\n" , _16bit , shift);
第四条指令遇到了一个问题,寻址。
首先我想到的方法是,在寻址函数头文件中添加一个char*,每个寻址函数被执行时都会修改这个变量,便成相应寻址方式的汇编表示形式。然后,指令只需要调用这个变量就可以完成转换。
在更改寻址函数时,遇到一个问题,25与26号寻址的表示方式中都有%,这在fprintf函数中无法正确显示。
具体代码如下:
if(Trans_to_Assembler)
{
char temp[20];
sprintf(temp , "*AR6%++");
addrAssembler = temp;
}
即使在%号前再加一个%也没用。后来直到尝试加了3个%才成功。结果就变成了这样sprintf(temp , "*AR6%%%%++");
在网上没能找到答案。
DSP TMS320F2812验证平台制作日志3相关推荐
- 诙谐有趣的《UVM实战》笔记——第二章 一个简单的UVM验证平台
前言 某天白天在地铁上听鬼故事,结果晚上要睡觉时,故事里的情节都历历在目,给我鸡皮疙瘩起的~ 不过我倒是没有吓得睡不着,而是转念一想,为啥我学知识忘得很快,随便听的鬼故事却记得这么清楚咧? 那如果能像 ...
- 针对无人机的发动机控制仿真验证平台
概述 针对无人机的发动机控制仿真验证平台用于数字电子控制器半实物仿真试验.根据真实逻辑模拟飞行管理计算机,基于飞行任务实现各个剖面下飞机执行不同动作时,对数字电子控制器激励,完成对推进系统的指令传输 ...
- 禾多推出高精度定位和自动驾驶验证平台!倪凯:助力行业量产,定位中国向导...
允中 发自 凹非寺 量子位 报道 | 公众号 QbitAI 倪凯创办的禾多科技又有什么新进展? 最近,禾多对外推出了模块化服务--高精度定位HoloPolaris和自动驾驶验证平台HoloX,称要做 ...
- SystemVerilog搭建验证平台使用DPI时遇到的问题及解决方案
本文目的在于分享一下把DPI稿能用了的过程,主要说一下平台其他部分搭建好之后,在完成DPI相关工作阶段遇到的问题,以及解决的办法. 工作环境:win10 64bit, Questasim 10.1b ...
- uvm 形式验证_验证平台自动化篇之二:UVM Framework
原标题:验证平台自动化篇之二:UVM Framework 一个UVM使用者,从新手到精通大致会经历三年的时间,而在经过这三年之后,verifier会有倦怠期.除了不可避免地在80%以上工作处于重复性劳 ...
- 网页版的svn怎样同步代码_学会使用Hdlbits网页版Verilog代码仿真验证平台
大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过 "https://hdlbits.01xz.net/wiki/Main_Page&q ...
- 大数据平台网站日志分析系统
1:大数据平台网站日志分析系统,项目技术架构图: 2:大数据平台网站日志分析系统,流程图解析,整体流程如下: ETL即hive查询的sql; 但是,由于本案例的前提是处理海量数据,因而,流程中各环节所 ...
- 利用VMM建立基于事务的层次化验证平台
摘要:VMM是一种基于 SystemVerilog语言的验证方法学,它通过引入断言.抽象化.自动化与重用这四种机制提高了项目验证的生产率.本文通过一个实例介绍怎样利用VMM建立基于事务的可重用的层次化 ...
- 【UVM实战】第二章:一个简单的UVM验证平台(4)UVM 的终极大作:sequence
文章目录 2.4.1.在验证平台中加入sequencer 2.4.2.sequence机制 2.4.3.default_sequence的使用 2.4.1.在验证平台中加入sequencer sequ ...
最新文章
- JSP--JavaBean
- LintCode: Binary Tree Inorder Traversal
- 轻松删除所有安装的gem
- Recovery Rate违约后可回收比率
- php生成图片验证码代码,PHP生成图片验证码以及点击切换的代码
- path hdu6705
- LwIP tcp/ip socket编程listen函数分析
- 【原】webpack--文件监听的原理
- Informix IDS 11系统料理(918查验)认证指南,第 4 部分: 功能调优(5)
- android使用 注解框架,Android实践 | 注解框架ButterKnife基本使用
- Linux的实际操作:文件目录类的实用指令 (显示路径pwd 显示文件ls 更改目录cd)
- 厦门one_理想ONE真是“500万内最好的车”?
- 文本相似度-bm25算法原理及实现
- zookeeper编程入门系列之zookeeper实现分布式进程监控和分布式共享锁(图文详解)...
- 微信小程序 post git 的请求坑
- Centos 搭建DNS服务器
- iphone转android通讯录,苹果IPHONE通讯录电话簿转到安卓手机csv,vcf方法(ITUNES,OUTLOOK,EXCEL)...
- 微软小娜服务器,微软小娜正在继续被边缘化中:奇妙清单也不再支持小娜连接-...
- unity中Input.Touch详解
- 还在用QQ邮箱?教你如何创建自己的高逼格邮箱