1,问题描述
使用BRAM存储数据,并且按照上一篇文章所叙述,对BRAM进行读操作,但是当复位信号复位时,输出的结果中出现了一段不定状态,并且这段不定状态的长度和复位之前已读出的数据的长度相同,仿真得到的波形图如图一所示:

图一,出现错误的波形图
检查了好久,也一直在看BMG IP核的说明文档,还是没有发现错误,后来不经意间发现,自己一直考虑读的问题,没有考虑到有可能在“写”的过程中出现了错误。下面是例化BRAM IP核的程序;
BRAM0 My_Bram (
.clka(clk1), // input wire clka
.rsta(rsta), // input wire rsta
.ena(temp), // input wire ena
.wea(), // input wire [0 : 0] wea
.addra(addra), // input wire [11 : 0] addra
.douta(dout), // output wire [15 : 0] douta
.dina()
);
由于整个过程中并没有用到写,所以dina和wea引脚均悬空,思考,wea引脚状态未定,可能为0,也可能为1,因此尝试着将wea引脚置1,然后仿真得到的波形图如图二所示:
图二,对wea引脚置零后得到的输出波形
困扰了多天的问题就这样得到了解决。