ASSET InterTech SVF Spec for JTAG IEEE 1149.1 (1999 Revision E)

需积分: 1 2 下载量 110 浏览量 更新于2024-06-27 收藏 85KB PDF 举报
本文档是关于Serial Vector Format (SVF) 的规格说明,适用于JTAG IEEE 1149.1标准。SVF 是一种针对嵌入式系统设计的测试接口标准,它定义了如何通过JTAG(Joint Test Action Group)进行串行数据传输,以便对硬件设备进行调试和测试。该规范由ASSET InterTech, Inc. 和 Texas Instruments Inc. 共同开发,版权日期为1997年至1999年,最后一次修订于1999年3月8日。 **1. SVF命令细节** 文档详细列出了SVF命令的不同类别,包括ENDDR (End Data Record), ENDIR (End Instruction Record), 这些命令用于控制数据和指令流的开始和结束,确保测试过程的有序进行。用户可以根据这些命令来构建和发送测试序列。 **2. 频率控制** SVF规范可能涉及测试频率的设置,这可能涉及到时钟同步和数据传输速率的管理,以确保测试过程中与目标设备的通信稳定。 **3. HDR and HIR (Header Data Register, Header Instruction Register)** Header部分包含初始化信息,如测试序列表的起始地址、长度等,用于引导测试流程的执行。 **4. PIO (Parallel Input/Output)** PIO允许通过JTAG接口进行并行数据的交换,这对于模拟或测量设备的输入/输出行为非常有用。 **5. PIOMAP (Parallel Input/Output Map)** PIOMAP定义了哪些JTAG引脚被映射到设备的并行接口,以便在测试过程中正确地读取和写入数据。 **6. RUNTEST** RUNTEST命令用于启动设备执行预定义的测试程序,或者执行用户自定义的测试脚本。 **7. SDR and SIR (Scan Data Register, Scan Instruction Register)** Scan Data Register (SDR) 存储测试数据,而Scan Instruction Register (SIR) 包含执行的测试指令,这两个寄存器是SVF通信的核心组件。 **8. 状态管理** 状态信息可能包括当前测试阶段、错误检测和处理机制,以及设备响应的跟踪。 **9. TDR and TIR (Trailer Data Register, Trailer Instruction Register)** 尾部数据和指令记录用于标记测试序列的结束,清理工作,并可能包含最终的测试结果或状态报告。 **10. TRST (Test Reset)** TRST用于复位被测设备,确保在测试开始前设备处于一致的状态。 Serial Vector Format Specification 是一种强大的工具,它标准化了JTAG接口的测试向量,使得不同厂商生产的设备能在兼容的测试环境下无缝协作。了解并遵循这些规范,可以有效提升嵌入式系统的调试效率和一致性。

这段代码是上一段代码的测试代码 需要输出成功 #include "Assignment-3.h" #include "SVF-LLVM/LLVMUtil.h" #include "SVF-LLVM/SVFIRBuilder.h" #include "WPA/Andersen.h" #include "Util/Options.h" #include "Util/CommandLine.h" void Test1() { SVF::SVFModule *svfModule = SVF::LLVMModuleSet::getLLVMModuleSet()->buildSVFModule({"./Assignment-3/testcase/bc/no_alias.ll"}); /// Build Program Assignment Graph (SVFIR) SVF::SVFIRBuilder builder(svfModule); SVF::SVFIR *pag = builder.build(); pag->dump ("./Assignment-3/testcase/dot/no_alias_init"); AndersenPTA *andersenPTA = new AndersenPTA(pag); andersenPTA->analyze(); andersenPTA->dump_consCG("./Assignment-3/testcase/dot/no_alias_final"); delete andersenPTA; SVF::LLVMModuleSet::releaseLLVMModuleSet(); SVF::SVFIR::releaseSVFIR(); } void Test2() { SVF::SVFModule *svfModule = SVF::LLVMModuleSet::getLLVMModuleSet()->buildSVFModule({"./Assignment-3/testcase/bc/CI-global.ll"}); /// Build Program Assignment Graph (SVFIR) SVF::SVFIRBuilder builder(svfModule); SVF::SVFIR *pag = builder.build(); pag->dump ("./Assignment-3/testcase/dot/CI-global_init"); AndersenPTA *andersenPTA = new AndersenPTA(pag); andersenPTA->analyze(); andersenPTA->dump_consCG("./Assignment-3/testcase/dot/CI-global_final"); delete andersenPTA; SVF::SVFIR::releaseSVFIR(); SVF::LLVMModuleSet::releaseLLVMModuleSet(); } void Test3() { SVF::SVFModule *svfModule = SVF::LLVMModuleSet::getLLVMModuleSet()->buildSVFModule({"./Assignment-3/testcase/bc/CI-local.ll"}); /// Build Program Assignment Graph (SVFIR) SVF::SVFIRBuilder builder(svfModule); SVF::SVFIR *pag = builder.build(); pag->dump ("./Assignment-3/testcase/dot/CI-local_init"); AndersenPTA *andersenPTA = new AndersenPTA(pag); andersenPTA->analyze(); andersenPTA->dump_consCG("./Assignment-3/testcase/dot/CI-local_final"); SVF::LLVMModuleSet::releaseLLVMModuleSet(); SVF::SVFIR::releaseSVFIR(); delete andersenPTA; } void Test() { Test1(); Test2(); Test3(); } int main(int argc, char ** argv) { int arg_num = 0; int extraArgc = 1; char **arg_value = new char [argc + extraArgc]; for (; arg_num < argc; ++arg_num) { arg_value[arg_num] = argv[arg_num]; } // You may comment it to see the details of the analysis arg_value[arg_num++] = (char) "-stat=false"; std::vectorstd::string moduleNameVec; moduleNameVec = OptionBase::parseOptions( arg_num, arg_value, "Teaching-Software-Analysis Assignment 3", "[options]" ); Test(); return 0; }

2023-05-22 上传