I am trying to run the RAMTester sample for the XEM7010-A50. It is not working for me using both the regenerated bitstream, and generating it myself. Using the generated bitstream, I get the following output:
---- Opal Kelly ---- RAMTester Application v1.0 ----
FrontPanel DLL loaded. Version: 5.3.1
Found a device: XEM7010-A50
Device firmware version: 3.1
Device serial number: 22390012NG
Device ID string: Opal Kelly XEM7010
FrontPanel support is enabled.
Waiting for calibration to complete...
Generating random data...
Writing to memory(0)...
Reading from memory(0)...
[0] = 0x1C / 0x00 // 0x1C
[1] = 0x33 / 0x00 // 0x33
[2] = 0x12 / 0x00 // 0x12
[3] = 0x43 / 0x00 // 0x43
[4] = 0xAD / 0x00 // 0xAD
[5] = 0xF1 / 0x00 // 0xF1
[6] = 0xF5 / 0x00 // 0xF5
[7] = 0x34 / 0x00 // 0x34
Passed: 0 Failed: 1
Generating random data...
Writing to memory(0)...
Reading from memory(0)...
[0] = 0x0C / 0x00 // 0x0C
[1] = 0xF7 / 0x00 // 0xF7
[2] = 0x33 / 0x00 // 0x33
[3] = 0x18 / 0x00 // 0x18
[4] = 0xC8 / 0x00 // 0xC8
[5] = 0x2E / 0x00 // 0x2E
[6] = 0x96 / 0x00 // 0x96
[7] = 0xC4 / 0x00 // 0xC4
Passed: 0 Failed: 2
Generating random data...
Writing to memory(0)...
Reading from memory(0)...
[0] = 0xE1 / 0x00 // 0xE1
[1] = 0xBD / 0x00 // 0xBD
[2] = 0x7B / 0x00 // 0x7B
[3] = 0x56 / 0x00 // 0x56
[4] = 0x44 / 0x00 // 0x44
[5] = 0x17 / 0x00 // 0x17
[6] = 0xC1 / 0x00 // 0xC1
[7] = 0x6D / 0x00 // 0x6D
Passed: 0 Failed: 3
Generating random data...
Writing to memory(0)...
And so on for all 10 tests.
When build the bitstream myself by upgrading the IPs and using the provided Verilog files, the memory controller fails calibration (the init_calib_complete
signal never goes high). I noticed some strange inconsistencies:
-
The provided bitstream has 0 for the calibration
CAPABILITY
localparam (connected to endpoint 0x3e) when the value is 1 for the provided verilog file (Ubuntu 22 FrontpanelSDK). -
On the recommended MIG settings in the XEM7010 documentation, the memory part is MT41K256M16XX-125. After doing a parts lookup on the Micron website, the memory part on my board is MT41K256M16TW-107:P, which corresponds to a different memory part selection in the MIG. After trying this memory part, I still cannot pass calibration when I build the bitstream.
It seems the only reason the provided bitstream passes calibration is that it claims it is incapable (endpoint 0x20 is 0), so it just skips it. I don’t understand what the purpose of memory calibration is or if that will even cause the problem with accessing memory, but I am at a loss.
Any help would be appreciated!