项目场景:
FPGA控制数码管静态显示程序,在数码管上连续显示0—F等16个数字,间隔0.5秒
问题描述
采用Modelsim仿真波形没问题,各个输出信号波形满足要求,但是下载到FPGA以后发现数码管恒定输出0,不发生变化,。
原因分析:
数码管不进行正常显示,首先判断是不是输出的显示数据出了问题,更改为恒定输出后,数码管上显示的数据发生了变换,并且能够输出为正确的恒定数据,仿真中显示数据正确变化说明不是输出数据的问题。然后判断是不是输出信号和移位缓存器的输入时序错了,排查后也没发现问题。最后检查了调用两个模块的顶层模块,发现了问题:
原程序中我在顶层模块中实例化时更改了参数大小,原本是应该在testbench文件中实例化中进行修改的,顶层模块不该修改,但是我直接从testbench文件粘贴过来搞忘了,脑瓜子不好使了。。。
module seg_595_static
(
input wire sys_clk ,
input wire sys_rst_n ,
output wire ds ,
output wire shcp ,
output wire stcp ,
output wire oe
);
wire [5:0] sel;
wire [7:0] seg;
//实例化
seg_static
#(
.CNT_MAX (25'd24)
)
seg_static_inst
(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n),
.sel (sel ),
.seg (seg )
);
hc595_ctrl hc595_ctrl_inst
(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n),
.sel (sel ),
.seg (seg ),
.ds (ds ),
.shcp (shcp ),
.stcp (stcp ),
.oe (oe )
);
endmodule
解决方案:
把实例化的第一个子模块中的参数修改为25’d24_999_999即可,修改后经验证功能可以正常实现。
总结:
当仿真验证没有问题,但是上板以后结果不对,可以看一下是不是实例化参数的大小引起的