本文作为SpinalHDL学习笔记第四十二篇,介绍SpinalHDL JTAG TAP。
目录:
1.JTAG 总线
2.JTAG 状态机
3.JTAG TAP
4.Jtag 指令
5.JTAG TAP 类接口
重要: 本文的目的是展示一个 JTAG TAP(从设备)的非常规方式实现方法。这个实现并不简单,它混合了面向对象编程、抽象接口解耦、硬件生成和硬件描述。当然,简单的 JTAG TAP 实现只需通过简单的硬件描述就可以完成,但这里的目标实际上是更进一步,创建一个可重用和可扩展的 JTAG TAP 生成器。
常用的 HDL 与 Spinal 之间的一个重要区别在于, SpinalHDL 允许定义硬件生成器/构建器。这与描述硬件的方式非常不同。让我们看看下面的例子,因为在生成/构建/描述之间的区别可能看起来像是在“玩文字游戏”,或者可以用不同的方式解释。下面的示例是一个 JTAG TAP,它允许 JTAG 主设备读取 switchs/keys 的输入并写入 leds 的输出。主设备也可以通过使用 UID 0x87654321 来识别此 TAP。
class SimpleJtagTap extends Component {
val io = new Bundle {
val jtag = slave(Jtag())
val switchs = in Bits(8 bits)
val keys = in Bits(4 bits)
val leds = out Bits(8 bits)
}
val tap = new JtagTap(io.jtag, 8)
val idcodeArea