1.ROM的读取
由于 ROM 是一种只读存储器,所以我们需要一个初始化文件来配置 ROM 中的存储数据,因此接下来,我们需要首先建立这样的配置文件,在 Quartus 中,配置文件可以选择 MIF 文件
ip核配置
代码:
module ROM( clk, rst_n, data ); input clk,rst_n; output [7:0]data; wire [9:0]addr; rom_ctrl rom_ctrl( .clk(clk), .rst_n(rst_n), .addr(addr) ); my_rom my_rom( .address(addr), .clock(clk), .q(data) ); endmodule /* ROM 控制器的功能就是不断地输出 0—1023 递增的地址数据, 遍历 ROM 所有存储空间 */ module rom_ctrl( clk, rst_n, addr ); input clk,rst_n; output reg [9:0]addr; always @(posedge clk or negedge rst_n) if(!rst_n) addr <= 0; else if(addr < 1023) addr <= addr + 1; else addr <= 0; endmodule
仿真:
2.Rom_Signaltap调试(SignalTapII 嵌入式逻辑分析仪)
在线调试也称作板级调试,它是将工程下载到 FPGA 芯片后分析代码运行的情况。有人会以为,我们已经做过仿真了,甚至是时序仿真都通过了,还会存在问题么?但是在实际中,还有以下情况我们需要用到在线调试:
Ⅰ、 仿真不全面而没有发现的 FPGA 设计错误。很多情况下,由于太复杂,无法做到 100%的代码覆盖率;
Ⅱ、 在板级交互中,存在异步事件,很难做仿真,或者仿真起来时间很长,无法
运行;
Ⅲ、 除了本身 FPGA 外,还可能存在板上互连可靠性问题、电源问题和 IC 之间的
信号干扰问题,都可能导致系统运行出错;
SignalTap II 基本上采用了典型外部逻辑分析仪的理念和功能,却无需额外的逻辑分析设备、测试 I/O、电路板走线和探点,只要建立一个对应的.stp 文件并做相关设置后,与当前工程**编译, 用一根 JTAG 接口的下载电缆连接到要调试的 FPGA 器件即可。 SignalTap II 对 FPGA 的引脚和内部的连线信号进行捕获后,将数据存储在一定的 RAM 块中。因此,用于保存采样时钟信号和被捕获的待测信号的 RAM 块,也会占用逻辑资源( LE)、 Memory 资源(Block RAM)和布线资源。占用逻辑资源的多少基于信号或者被监测的通道数量,以及触发条件的复杂程度;所使用的存储器数量取决于被监测的通道数量和采样深度。理论上可支持1024 个通道,每个通道可采集 128k Bit 数据,但是这两个极限值没办法同时满足,因为若同时满足,则等价于占用 32768 个 M4K 模块,没有 FPGA 器件能够提供那么多存储器资源。
在使用SignalTap II时需要修改ip核中的数据,
设置SignalTap II 的clk信号, 添加需要的data,以及 addr
保存后重新全编译工程,然后在SignalTap II 查看抓取的波形
同样数据可以再in-system memory content editor中查看
文章评论(0条评论)
登录后参与讨论