self.gennum.add_dma_item(addr_list[addr_line],self.pages[0],self.dma_length,1,0)# write host page[0] in addr_list[addr_line]
self.gennum.start_dma()
self.gennum.wait_irq()
foraddr_lineinreversed(range(len(addr_list))):# Compare values in DDR addr_list in reverse order
self.gennum.add_dma_item(addr_list[addr_line],self.pages[0],self.dma_length,0,0)# Store addr_list[addr_line] in host page[0]
self.gennum.start_dma()
self.gennum.wait_irq()
page_data=self.gennum.get_memory_page(0)
ifpage_data[0]<>value_list[addr_line]:
error_str="Value read from memory (0x{:X}) is differnt from what was expected (0x{:X}) at Wishbone address (0x{:X}). At least DDR-interface {} is tied to Vcc or GND, or unconnected.".format(page_data[0],value_list[addr_line],addr_list[addr_line],self.wishbone_address_bit_to_DDR_interface_line(0ifaddr_line==0elseaddr_line-1+first_test_wishbone_addr_bit))
print(error_str)
ret_error="While testing DDR address and bank lines: "+error_str
break
returnret_error
deftest_data_lines(self):
""" Test the memory-interface data lines """
ret_error=None
test_data_addr=0x0# any valid address is OK
value_list=[0x0001<<data_linefordata_lineinrange(self.num_data_lines)]# DDR data values: 0x0001, 0x0002, 0x0004, 0x0008...
fordata_lineinrange(len(value_list)):# Write value_list in DDR address 0
self.gennum.add_dma_item(test_data_addr,self.pages[0],self.dma_length,1,0)# write host page[0] in DDR test_data_addr
self.gennum.start_dma()
self.gennum.wait_irq()
self.gennum.add_dma_item(test_data_addr,self.pages[0],self.dma_length,0,0)# Store content of DDR test_data_addr in host page[0]
self.gennum.start_dma()
self.gennum.wait_irq()
page_data=self.gennum.get_memory_page(0)
ifpage_data[0]<>value_list[data_line]:
error_str="Value read from memory (0x{:X}) is differnt from what was expected (0x{:X}) at Wishbone address (0x{:X}). DDR-interface data line/s is tied to Vcc or GND, or unconnected.".format(page_data[0],value_list[data_line],test_data_addr)
print(error_str)
ret_error="While testing DDR data lines: "+error_str
break
returnret_error
defmain(default_directory="."):
# Configure the FPGA using the program fpga_loader