FPGA时序仿真-ram发现的时序问题
在进行FPGA的ip生产ram的仿真是发现的问题。求高手指点~~~感激不敬~~在时钟的上升沿改变数据时,发现在输出端读得的数据就回错乱一个。如图所示:
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_703910EQ14Z2.png
(原文件名:数据持续时间一个时钟周期.png)
仿真testbeach文件如下:
`timescale 10 ns/ 1 ps
module ram_sim();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg address;
reg clock;
reg data;
reg wren;
// wires
wire q;
// assign statements (if any)
ram i1 (
// port map - connection between master ports and signals/registers
.address(address),
.clock(clock),
.data(data),
.q(q),
.wren(wren)
);
initial
begin
wren=1;
data=0;
address=0;
repeat(31)
begin
#20 data=data+2;
address=address+1;
end
#50 data='dz;
wren=0;
address=31;
repeat(31)
#20 address=address-1;
end
always
begin
#5 clock=0;
#5 clock=1;
end
endmodule 解决方法我已经找到了,就是在address=0; repeat(31)处改成 address=0; #5 repeat(31)使之错开#5个时间单元,这样就每次在时钟的下降沿改变数据,这个就可以了!
这是之后的仿真结果:
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_703913WLW04V.png
(原文件名:1.png)
但是让我疑惑的是为什么错乱成这样子,如本该读出12的,结果是8,本应该读16的,结果却是12.。。。。这可能是与IP构建的rom的程序有关联。。。。求高手指教!~
页:
[1]