![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CEVA-X
文章平均质量分 79
isheep333
这个作者很懒,什么都没留下…
展开
-
CEVA-X16自由式编程-4-JTAG探索
其实一开始我对JTAG是不抱希望的,因为JTAG的移位寄存器特性(读取的同时必须写入),使得它不能直接实现一个像总线一样的地址空间,也就很难“直接”实现调试逻辑的接口。十分幸运的是,这个DSP貌似是在JTAG层直接实现的各个调试寄存器。猜测有几种可能:可能把寄存器分成了只读和只写的,也可能每个寄存器有特定的位需要置1才能写入,也有可能每个寄存器的初始值都是确定的。可以确定这就是保存PC的寄存器,只不过它似乎不是直接的PC值,而是PC+4或者PC-4,这可能和VLIW之类的有关系。它也许就是PC的值?原创 2023-04-24 14:13:33 · 197 阅读 · 0 评论 -
CEVA-X16自由式编程-3-破译指令编码
得到DSP机器码和汇编语言之间的编码规则,对于后期编写汇编器和反汇编器是必须的。但是我们只有在中得到的对应关系,因此只能根据它来整理了。原创 2023-04-24 13:27:57 · 396 阅读 · 0 评论 -
CEVA-X16自由式编程-2-编写第一个“应用程序”
因为我也是尝试了很久才意识到这个DSP的VLIW特性,流水线上同时执行的多条指令之间可能产生资源冲突,但对于很多VLIW的DSP、GPU来说,它们硬件本身并不会处理这种冲突,这个工作交给了编译器做。我这里的NOP是随意插入的,并不一定是最优的。因此在ARM上,我们只需要把想让DSP读取的指令写入0x70000000,如果DSP程序正常的话,就可以在0x70000004上得到DSP读取的值了。这不仅说明我们的第一个DSP程序已经正常运行,也验证了在这个平台上,DSP的代码和数据空间合并成了统一的空间。原创 2023-04-23 23:12:47 · 362 阅读 · 3 评论 -
CEVA-X16自由式编程-1-指令穷举
既然我们无法获取到官方的指令集文档和编译器,我想到了一个简单粗暴的点子:Trace32支持这个DSP架构的调试,因此它一定自带有这个指令集的反汇编器。因此我们的思路就是把T32的反汇编功能当作黑盒,用穷举的方式得到每一个机器码和对应的汇编指令,然后做成一个查找表,用静态的方式实现一个(人工的)汇编器。然而,该DSP使用了VLIW,想要保存全部的指令-机器码对应关系并不现实。原创 2023-04-23 20:10:39 · 419 阅读 · 0 评论