tongluren 发表于 2011-12-12 13:50:14

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

tongluren 发表于 2011-12-12 13:59:30

解决方法我已经找到了,就是在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]
查看完整版本: FPGA时序仿真-ram发现的时序问题