零知识开发算法以测试 TMS320C66x 微处理器中 UNPKBU4 指令的正确操作

问题描述 投票:0回答:1

嗨,我有一个项目需要完成。就像标题一样,我对如何开发一种算法来测试 TMS320C66x 微处理器中 UNPKBU4 指令的正确操作一无所知。我希望这里有人能给我指出正确的方向,因为我有点卡住了,如果可能的话,我需要一些指导,如果这是一个课程或步骤,我有大约一个月的时间去做,提前谢谢

我在网上搜索了一下,我发现汇编是我所需要的语言,除此之外我可以肯定地说

assembly microprocessors
1个回答
0
投票

我曾经搭建过各种指令集的测试框架,比如x87、MMX、3dNow!、SSE等。

这样做的方法是以用 C 或 C++ 编写的仿真代码的形式构建一个黄金参考,然后生成测试向量来比较黄金参考对这些输入的硬件响应。

根据 TMS320C66x DSP CPU 和指令集参考指南

UNPKBU4
指令使用零扩展将四个打包字节直接扩展为四个打包的 16 位半字,它在第 3.415 节中展示了它是如何工作的细节。您可以创建一个函数
uint64_t unpckbu4_ref (uint32_t x);
作为基于该规范的参考。注意固定宽度整数类型的使用。

您应该能够通过

_unpkbu4()
内在函数访问硬件指令 TMS320C6000 优化编译器的表 8-4 v8.2.x 用户指南。检查生成的机器代码以确保这实际上调用了
UNPKBU4
指令。或者,may 可以通过内联汇编访问指令,或者通过链接到使用指令的汇编代码编写的单独编译的包装函数。我写“可能”是因为我没有使用过这个特定的平台,但这些替代方案通常在大多数计算平台上可用。

剩下的就是生成测试向量,以从硬件指令和黄金参考模型中得出响应。一种通用技术是使用由高质量 PRNG(伪随机数生成器)生成的随机数。这本身适用于确定功能未完全损坏的快速“冒烟”测试。对于具有 32 位输入的单输入操作,例如

UNPKBU4
,可以通过 穷举测试 证明正确的操作,即应用所有可能的 232 输入,我强烈推荐这个。只需几分钟。

对于具有更多输入位的操作,对其进行详尽测试是不可行的,检查角落/边缘情况很重要。例如,对于

UNPKBU4
指令,每个字节应取
0x00
0xff
的最小值和最大值,并确保扩展是零扩展而不是符号扩展,每个字节也应取值
0x7f
0x80
.

对于初始测试运行,您将根据指令规范跟进任何不匹配以解决它们。您可以更正黄金参考和/或测试框架,或者更正仍在开发中的硬件,例如在创建新的 CPU 实现时,或在必要时澄清规范本身。此后,您应该能够为新一代处理器发扬黄金参考代码。

© www.soinside.com 2019 - 2024. All rights reserved.