FPGA的调试-在线存储器内容编辑工具(In-system Memory Content Editor)

2020-06-30 10:59:11 浏览数 (1)

于FPGA调试,主要以Intel FPGA为例,在win10 Quartus ii 17.0环境下进行仿真和调试,开发板类型EP4CE15F17。主要包括一下几个部分:

- FPGA的调试-虚拟JTAG(Virtual JTAG)

- FPGA的调试-在线存储器内容编辑工具(In-system Memory Content Editor)

- FPGA的调试-内嵌逻辑分析仪(SignalTap)

- FPGA的调试-LogicLock

- FPGA的调试-调试设计的指导原则

上述内容主要参考《通信IC设计》,有兴趣的可以自己购买书籍进行研读。

FPGA的调试-在线存储器内容编辑工具(In-system Memory Content Editor)

In-System Memory Content Editor,其主要功能就是能实时更改RAM,ROM中的数值,同时也可以修改FPGA内部定义的常数值。它是通过JTAG调试接口去完成RAM,ROM中的数据读写,是一种在线调试工具。注意目前该功能只能用于单口ram,不支持双口ram。下面就介绍下如何通过In-System Memory Content Editor去读取或修改RAM中的数据以及常数值的修改。 (1)首先肯定是新建一个工程。名为 test(下图是我已经例化好IP后的工程)

该工程例化了2个IP核,一个是单口ram,一个是constant 常数设置IP核,利用常数IP的输出值作为单口ram的读地址。这样当我通过In-System Memory Content Editor更新了一个常数值,即更新了ram的读地址。而ram默认写wren使能为低,则为读我更新地址的数值。 (2)例化一个单口ram IP核。 单口ram位宽为8 ,深度为32

  • Widths/Bclk Type/Clks 设置如下
  • Regs/Clken/Byte Enable/Acls 设置 如下
  • Read During Write Option 默认设置
  • Mem Init 注意:该页设置时,需要勾选上红框1 ,表示允许In-System Memory Content Editor独立地去读取和修改RAM中的数据。另外还需在红框2处给该RAM取个例化ID名:RAM8 用于区分多个实例
  • 最后finish 就例化好了一个单口RAM。

(3)同样再例化一个constant IP核。 设置成如下图所示 设置输出数据位宽为5 初始化设置该数值为0 勾选使能In-System Memory Content Editor 取一个ID名:CONS 其余页设置为默认 ,点击finish即可。

(4)完成后,在工程中做如下例化,同时添加系统时钟管脚

代码语言:javascript复制

(5)进行全编译 (6)为了验证In-System Memory Content Editor是否能修改memory的数值,需要加入Singal Tap ii 对信号进行抓取。加入需要抓取的信号,第一个即是常数值信号。采样时钟就用系统时钟clk。深度为512,其余设置保持默认。

(7)再次全编译,完成后将.sof文件通过JTAG下载到FPGA芯片中。 (8)Tools ->In-System Memory Content Editor打开In-System Memory Content Editor工具调试界面

In-System Memory Content Editor工具调试界面如下图所示,从图上可以看到我们例化的两个IP核

(9)读取操作 在下图中左键选择你要读取的信号,比如这里要读取Instance ID 为CONS的常数信号的值,则选中它,然后鼠标右键->鼠标左键 Read Data from In-System Memory。

在下图中,就读出了CONS的数值为0x00 ,跟我们在例化IP核时设置的数值一致。

同样在signaltapii中抓取constant_ip 核的输出也是 0x00。

(10)更改数值操作 首先把ram里地址从0x00到0x04 5个地址的值更新为0x01,0x02,0x03,0x04,0x05。

接着在上面窗口中选中该ID ,鼠标右键->左键单击Write Data to In-System Memory项。通过JTAG将ram里地址从0x00到0x04存储的值修改成0x01,0x02,0x03,0x04,0x05。

此时可以通过signaltapii 查看ram里的值是否已经被修改,此时由于地址0存储的数是0x01,读地址没变还是0,那ram的输出值应该是0x01,signaltapii 抓取发现ram的输出值是0x01.证明通过In-System Memory Content Editor成功修改了ram的地址为0的值。

接着可以通过In-System Memory Content Editor修改常数值(ID位CONS)为0x01,即更新了ram的地址为0x01。

同样通过signaltapii去获取对应信号的值,看是否与设置的一致。从下图可以看出ram的地址为0x01读出的数为0x01与In-System Memory Content Editor设置的一致,同时常数值(ID位CONS)为0x01也与In-System Memory Content Editor设置的一致。


到这里,结束

0 人点赞