K
Kevin Brace
Guest
Hello,
I developed my own synchronous FIFO buffer using Virtex Block RAM.
However, when I try to simulate it on ModelSim XE 5.5e and 5.7c with ISE
WebPACK 4.2's Unisim library, I get the following error messages.
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:690 ns, posedge
CLKB &&& clkb_enable:690 ns, 100 ps );
# Time: 690 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_31_16
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:690 ns, posedge
CLKB &&& clkb_enable:690 ns, 100 ps );
# Time: 690 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_15_0
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:720 ns, posedge
CLKB &&& clkb_enable:720 ns, 100 ps );
# Time: 720 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_31_16
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:720 ns, posedge
CLKB &&& clkb_enable:720 ns, 100 ps );
# Time: 720 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_15_0
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:750 ns, posedge
CLKB &&& clkb_enable:750 ns, 100 ps );
# Time: 750 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_31_16
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:750 ns, posedge
CLKB &&& clkb_enable:750 ns, 100 ps );
# Time: 750 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_15_0
.
.
.
.
.
The above error messages were displayed when the FIFO contains
one entry, and the user logic tried to do simultaneous read/write of the
FIFO.
But if the FIFO contains two or more entries, simultaneous read/write of
the FIFO doesn't display the above error message, and the FIFO functions
correctly.
When the FIFO's RAM (Virtex Block RAM in dual-port mode.) is replaced
with Verilog's generic RAM, the FIFO functions correctly, so at this
point I suspect that something is wrong with Unisim's Virtex Block RAM.
Next thing I tried was to simulate synchronous version of a FIFO
buffer (fifoctlr_cc.v) in Xilinx Application Note 175 with the same
testbench code I used for testing my own FIFO.
Interestingly, I got error messages very similar to what I got with my
own FIFO.
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S8_S8.v(374):
$recovery( posedge CLKB:690100 ps,
posedge CLKA &&& clka_enable:690100 ps, 100 ps );
# Time: 660100 ps Iteration: 1 Instance:
/fifoctlr_cc_Testbench_Top/fifoctlr_cc_Inst/bram1
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S8_S8.v(374):
$recovery( posedge CLKB:720100 ps,
posedge CLKA &&& clka_enable:720100 ps, 100 ps );
# Time: 720100 ps Iteration: 1 Instance:
/fifoctlr_cc_Testbench_Top/fifoctlr_cc_Inst/bram1
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S8_S8.v(374):
$recovery( posedge CLKB:750100 ps,
posedge CLKA &&& clka_enable:750100 ps, 100 ps );
# Time: 750100 ps Iteration: 1 Instance:
/fifoctlr_cc_Testbench_Top/fifoctlr_cc_Inst/bram1
.
.
.
.
.
The application note doesn't say that fifoctlr_cc.v cannot
handle simultaneous read/write, so I am not sure why these error
messages get displayed.
Eventually I ran out of ideas, so I decided to try ISE 5.1's Unisim
library, and somehow this time the both FIFOs functioned correctly.
Am I doing something I am not supposed to do with Virtex's Block RAM, or
did Unisim's Virtex Block RAM contained a bug until the release of ISE
5.1 (Virtex was released in 1998)?
Kevin Brace (If someone wants to respond to what I wrote, I prefer if
you will do so within the newsgroup.)
I developed my own synchronous FIFO buffer using Virtex Block RAM.
However, when I try to simulate it on ModelSim XE 5.5e and 5.7c with ISE
WebPACK 4.2's Unisim library, I get the following error messages.
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:690 ns, posedge
CLKB &&& clkb_enable:690 ns, 100 ps );
# Time: 690 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_31_16
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:690 ns, posedge
CLKB &&& clkb_enable:690 ns, 100 ps );
# Time: 690 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_15_0
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:720 ns, posedge
CLKB &&& clkb_enable:720 ns, 100 ps );
# Time: 720 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_31_16
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:720 ns, posedge
CLKB &&& clkb_enable:720 ns, 100 ps );
# Time: 720 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_15_0
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:750 ns, posedge
CLKB &&& clkb_enable:750 ns, 100 ps );
# Time: 750 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_31_16
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S16_S16.v(453):
$recovery( posedge CLKA:750 ns, posedge
CLKB &&& clkb_enable:750 ns, 100 ps );
# Time: 750 ns Iteration: 2 Instance:
/FIFO_Testbench_Top/FIFO_Inst/BRAM_15_0
.
.
.
.
.
The above error messages were displayed when the FIFO contains
one entry, and the user logic tried to do simultaneous read/write of the
FIFO.
But if the FIFO contains two or more entries, simultaneous read/write of
the FIFO doesn't display the above error message, and the FIFO functions
correctly.
When the FIFO's RAM (Virtex Block RAM in dual-port mode.) is replaced
with Verilog's generic RAM, the FIFO functions correctly, so at this
point I suspect that something is wrong with Unisim's Virtex Block RAM.
Next thing I tried was to simulate synchronous version of a FIFO
buffer (fifoctlr_cc.v) in Xilinx Application Note 175 with the same
testbench code I used for testing my own FIFO.
Interestingly, I got error messages very similar to what I got with my
own FIFO.
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S8_S8.v(374):
$recovery( posedge CLKB:690100 ps,
posedge CLKA &&& clka_enable:690100 ps, 100 ps );
# Time: 660100 ps Iteration: 1 Instance:
/fifoctlr_cc_Testbench_Top/fifoctlr_cc_Inst/bram1
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S8_S8.v(374):
$recovery( posedge CLKB:720100 ps,
posedge CLKA &&& clka_enable:720100 ps, 100 ps );
# Time: 720100 ps Iteration: 1 Instance:
/fifoctlr_cc_Testbench_Top/fifoctlr_cc_Inst/bram1
# ** Error:
.../../../xilinx_webpack/verilog/src/unisims/RAMB4_S8_S8.v(374):
$recovery( posedge CLKB:750100 ps,
posedge CLKA &&& clka_enable:750100 ps, 100 ps );
# Time: 750100 ps Iteration: 1 Instance:
/fifoctlr_cc_Testbench_Top/fifoctlr_cc_Inst/bram1
.
.
.
.
.
The application note doesn't say that fifoctlr_cc.v cannot
handle simultaneous read/write, so I am not sure why these error
messages get displayed.
Eventually I ran out of ideas, so I decided to try ISE 5.1's Unisim
library, and somehow this time the both FIFOs functioned correctly.
Am I doing something I am not supposed to do with Virtex's Block RAM, or
did Unisim's Virtex Block RAM contained a bug until the release of ISE
5.1 (Virtex was released in 1998)?
Kevin Brace (If someone wants to respond to what I wrote, I prefer if
you will do so within the newsgroup.)