知识点积累。
monitor是一种思路,时序仿真时想要看到自己写的模块内部各端口的值,以便于改错调试。而不是将自己写的模块作为一个黑盒子,只有几个外部接口,在出问题时不能及时查看数据异常的源头。
简单地描述,在写monitor时,从最底层模块中assign想看到的各种端口到自定义的O_monitor中,并将其作为输出,通过调用到上层模块,比如:
output [63 : 0] O_monitor
assign O_monitor = {14'b0,start_cg,start_cnt,cnt_ico,cnt_jco,cnt_i,cnt_j,row_int,col_int};
.O_monitor(coefficient_generation_monitor)
然后在顶层模块里,通过top_monitor_sel(作为输入)的值判断选择需要看到哪个小模块的信号线。比如:
assign O_monitor = (top_monitor_sel == 0) ? coefficient_generation_monitor :
(top_monitor_sel == 1) ? data_fetch_monitor :
66'hffff_ffff_ffff_ffff ;
- 在block design中,O_monitor接ila的native端口,top_monitor_sel 接vio的输出端口。注意各端口位宽和最后要输出的各monitor位宽是否匹配。