fsdb波形中,无法dump generate例化的模块?
有一个顶层,会有如下例化代码:
genvar j;
generate
for (j=0;j<TSIP_NUM;j=j+1)
begin:wr_req_buff_inst_loop
wr_req_buff u_wr_req_buff_tx(
.clk (clk ) ,
.reset (reset ) ,
.wr_ddr_req (tx_ddr_wr_req[j] ) ,
.wr_ddr_add_bgn (tx_wr_ddr_add_bgn[ADD_WIDTH*j+:ADD_WIDTH] ) ,
.wr_ddr_blength (tx_wr_ddr_blength[LEN_WIDTH*j+LEN_WIDTH] ) ,
.ddr_wdata_valid (tx_ddr_wdata_valid[j] ) ,
.ddr_wdata (tx_ddr_wdata[DAT_WIDTH*j+DAT_WIDTH] ) ,
.wr_ddr_op_ack (tx_wr_ddr_op_ack[j] ) ,
.rd_wr_buff_start (rd_wr_buff_start[j] ) ,
.rd_wr_buff_req (rd_wr_buff_req[j] ) ,
.wr_data_from_buff (wr_data_from_buff[j*LOCAL_BUS_WIDTH+LOCAL_BUS_WIDTH] ) ,
.wr_inf_from_buff (wr_inf_from_buff[j*WR_INF_WIDTH+:WR_INF_WIDTH] ) ,
.rd_fpck_over (rd_fpck_over[j] ),
.wr_req_to_ddr (wr_req_to_ddr[j] )
);
end
endgenerate
-----
用modelsim仿真,采用dubussy去看dump出来的fsdb波形。很奇怪,用generate的例化的模块,波形中不存在了。我研究了一下,由于采用generate的例化方法,会将例化proc名称作为一级层次名,这个可能是导致fsdb中没有包含这些模块的原因。但是,我不知道该如何设置,才能dump这些模块的信号。有人遇到过吗或有人知道该如何设置解决吗?
顶起来!
再顶一下,期待有EDA达人知道。
为什么不自己写一个顶层模块,不想写,也可以画原理图,然后用软件转换成语言啊
高级语法就是这样的用法的。如果一个一个手动写,当然是可以啊。当参数变化时,需要不断的修改,麻烦。
顶起来
我前段时间也碰到这种问题,可能是因为Debussy版本比较老,对generate 和 memory类型的语法不支持,换成新版的modelsim 或 Questsim ,就可以解决这个问题
verdi/debussy的版本问题吧?
我看这段代码有些奇怪,for (j=0;j<TSIP_NUM;j=j+1)
begin:wr_req_buff_inst_loop
wr_req_buff u_wr_req_buff_tx(
那么generate的block wr_req_buff_inst_loop会被生成TSIP_NUM,同时模块u_wr_req_buff_tx也会被生成TSIP_NUM次,verilog里面要求模块名称唯一,你这么做仿真怎么dump数据?
版本太老
工具会自动的多增加一个层次, wr_req_buff_inst_loop 【*】为0~TSIP_NUM-1.
generate block的name实际上是begin end的name,理论上所有的语句块都可以加,不会出现问题,verdi也不会认错generate block,请检查一下dump scope是否有问题。
`ifdef DEBUSSY
initial
begin
$fsdbDumpfile("../wave/DEBUSSY.fsdb");
$fsdbDumpvars(0,tbench);
end
`endif
dump写法什么问题的。
用的debussy window低版本的?
应该是不支持generate语法
$fsdbDumpvars(0,xxx);
$fsdbDumpvars(0,tbgen.dut);
把这个替换一下,
顺便,读取 dut的文件时, 把tb文件也一起读进去就ok了
tb.v dut.v (*vhd.....)
