在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8220|回复: 11

[求助] xilinx FIFO IP核前仿和后仿读数据少了3个,真奇怪!

[复制链接]
发表于 2011-1-1 13:49:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
xilinx ise12.3 FIFO generator 6.2

independent clk syn standard fifo.120x32bit.

仿真时先写入1,2,3……,然后读出来
前仿真完全正确,后仿真时读出数据则从4开始。不知为什么?非常奇怪!

有人说xilinx的ip fifo需要free running 时钟,testbech里面使用了啊,问题依旧。
这个我在硬件上实现了,和后仿结果一致。【xc5vsx50t ff665-2】ise10.1。
11.jpg

12.jpg

13.jpg
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:    21:14:31 12/31/2010
// Design Name:
// Module Name:    FIFOwei
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module FIFOwei(
    input rst,
input wr_clk,
input rd_clk,
input [31 : 0] din,
input wr_en,
input rd_en,
output [31 : 0] dout,
output full,
output empty,
output prog_full
    );
FIFO_120x32 YourInstanceName (
.rst(rst),
.wr_clk(wr_clk),
.rd_clk(rd_clk),
.din(din), // Bus [31 : 0]
.wr_en(wr_en),
.rd_en(rd_en),
.dout(dout), // Bus [31 : 0]
.full(full),
.empty(empty),
.prog_full(prog_full));
endmodule
、、-----------------------------------------------
test bench
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date:   20:22:07 12/31/2010
// Design Name:   FIFO_120x32
// Module Name:   D:/08MyFpga/Virtex5FIFO/testFIFO.v
// Project Name:  Virtex5FIFO
// Target Device:  
// Tool versions:  
// Description:
//
// Verilog Test Fixture created by ISE for module: FIFO_120x32
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////
module testFIFO;
// Inputs
reg rst;
reg wr_clk;
reg rd_clk;
reg [31:0] din;
reg wr_en;
reg rd_en;
// Outputs
wire [31:0] dout;
wire full;
wire empty;
wire prog_full;
// Instantiate the Unit Under Test (UUT)
FIFOwei uut (
  .rst(rst),
  .wr_clk(wr_clk),
  .rd_clk(rd_clk),
  .din(din),
  .wr_en(wr_en),
  .rd_en(rd_en),
  .dout(dout),
  .full(full),
  .empty(empty),
  .prog_full(prog_full)
);
initial
forever
begin
rd_clk = 0;
#5;rd_clk=1;
#5;
end
/*
initial begin
forever
wr_clk = 0;
#20;wr_clk=1;
#20;
end
*/
initial begin
  // Initialize Inputs
  rst = 0;
  wr_clk = 0;
  din = 0;
  wr_en = 0;
  rd_en = 0;
  // Wait 100 ns for global reset to finish
  #500;
      wr_en=1;
  
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
  
  
  wr_en=0;
  
  
  
  
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;rd_en=1;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;rd_en=0;
  
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=1;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=2;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=3;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=4;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=5;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=6;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=7;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=8;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=9;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=10;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=11;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=12;
      #50;wr_clk=1;
      #50;wr_clk=0;
  #50;din=13;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=14;
  
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=15;
      #50;wr_clk=1;
      #50;wr_clk=0;
      #50;din=16;
      #50;wr_clk=1;
      #50;wr_clk=0;

/*
  #50;wr_en=0;

      #500;
  
      #52;rd_en=1;
  #1500;rd_en=0;
  */
  #1000;
  
  // Add stimulus here
end
      
endmodule
 楼主| 发表于 2011-1-1 13:54:27 | 显示全部楼层
modelsim使用6.5

硬件实现的时候约束仅仅对管脚进行了位置约束,其余没有。

上面的仿真后仿时管脚使用软件的自动配置,即本人未使用ucf文件。

谢谢大侠相助!!!
发表于 2011-1-1 14:13:51 | 显示全部楼层
看你的写时钟和数据就对不上啊。写时钟不是周期?异步的话出问题也正常啊,testbench写的也太诡异了吧。为什么不产生一个时钟,就写always产生din呢?testbench中时钟也不像你那样产生吧。
发表于 2011-1-1 14:40:27 | 显示全部楼层
ug175里有写复位是有3个周期左右的延迟
关键是你这个在写之前都没有时钟,因为到内部逻辑的复位信号都是同步到读写时钟的,而你在复位时却没有时钟,很难保证仿真模型的行为描述是否会产生异常。。。
 楼主| 发表于 2011-1-2 12:37:48 | 显示全部楼层
谢谢gg9132qq
谢谢版主:)

“关键是你这个在写之前都没有时钟”
我在wr_en前又加了若干个wr_clk
后仿真正常了,谢谢了:)

=======================
gg9132qq
说的问题,其实写时钟为了正好处于数据有效的中间,如下图


_________~~~~_____________~~~~_______________

----------<==========><==============>---------
发表于 2011-1-2 15:38:55 | 显示全部楼层
学习了,谢谢~
发表于 2011-1-3 10:11:18 | 显示全部楼层
看波形是没写进去,不过你后边自已解决了.呵呵,我也学习了.谢谢.
 楼主| 发表于 2011-1-3 13:35:15 | 显示全部楼层
本帖最后由 weizhiheng 于 2011-1-3 17:39 编辑

非常感谢诸位的帮助!

这个问题的原因确实就是wr_en之前没有wr_clk的原因造成的。
本人编制的程序对写fifo不期望使用free running clk。因为数据采集是一批一批的,来一批写一次fifo。

最终处理的时序略图如下:
信号名称从上到下依次为:wr_en,wr_clk,wr_data.wr_clk在wr_en有效值1前后各加了6各clk。
使用一切正常,已经下载到fpga验证正确。

__________________~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~_________
_~_~_~_~_~_~~_______~~~~______~~~~______~~~~______~~~~______~~~~_______~_~_~_
-----------------------<=======><=======><========><=======><=======>-------------

再次对版主和各位热心的仁兄表示感谢!
本人的电路板基于tms320c6455+Virtex5sx50T+1Gnet+24ADC+2HiDAC+4LoDAC+2RS232+2RS422+SRIO.
欢迎大家交流:)
发表于 2011-1-4 11:02:56 | 显示全部楼层
为啥不用free running clk?对功耗要求很严格?
发表于 2011-5-2 11:15:14 | 显示全部楼层
也在学习,希望有用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-18 04:01 , Processed in 0.034123 second(s), 11 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表