definitializer(self): for i inrange(self.ram_cap - 1): self.ram.write(i, node_data(i + 1)) self.ram.write(self.ram_cap - 1, node_data(self.ram_cap - 1))
write方法
输入din(ndarray),将该数据插入FIFO数据链表的尾部
1 2 3 4 5 6 7 8 9 10 11 12 13 14
defwrite(self, din): # Apply for empty node A from empty FIFO node_addr = self.empty_addr_manager.start_addr # Read next node address of the node A next_node_addr = self.ram.read_addr(node_addr) self.empty_addr_manager.update_start(next_node_addr) # Write data in the node A node = node_data(node_addr) node.data = din self.ram.write(node_addr, node) # Append node A to data FIFO last_final_addr = self.data_addr_manager.final_addr self.ram.write_addr(last_final_addr, node_addr) self.data_addr_manager.update_final(node_addr)
read方法
返FIFO数据链表头部的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
defread(self): # Apply for data node A from empty FIFO node_addr = self.data_addr_manager.start_addr # Read next node address of the node A next_node_addr = self.ram.read_addr(node_addr) self.data_addr_manager.update_start(next_node_addr) # Write next node addr of node A self.ram.write_addr(node_addr, node_addr) # Read data in the node A node = self.ram.read(node_addr) # Append node A to empty FIFO last_final_addr = self.empty_addr_manager.final_addr self.ram.write_addr(last_final_addr, node_addr) self.empty_addr_manager.update_final(node_addr) return node.data