Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from PIL import Image
- img_name = "images/lena28"
- filename = img_name+".png"
- img = Image.open(filename)
- img = img.convert('RGB') # You need this if you work with PNG
- pixels = img.load() # create the pixel map
- # Image dimensions
- img_width = img.size[0]
- img_height = img.size[1]
- np_img = np.asarray(img)
- # pixels_flat = np_img.flatten()
- frame_buffer_mem = ""
- f = open("testcases/frame_buffers.txt", "w+")
- bdf = open("testcases/buffer_descriptors.txt", "w+")
- # Define MAC addresses
- dest_mac = ["52", "54", "00", "dc", "36", "0f"] # 52:54:00:DC:36:0F
- src_mac = ["14", "65", "33", "1a", "78", "ff"]
- # Stores buffer lengths in order to generate buffer descriptors later
- data_lengths = [64, 128, img_width*img_height]
- buffer_lengths = []
- fbuff_bram_len = 0
- def arr_to_str(arr):
- arr_str = ""
- for i in range(0, len(arr)):
- arr_str += "{0:08b}".format(int(arr[i], 16)) + "\n"
- return arr_str
- # Generates test case with given data length...
- def testcase_gen (buff_lengths, dest_mac, src_mac, start_val, data, data_len) :
- # Initial length of package
- len_type = len(dest_mac) + len(src_mac) + 2
- fbuff_bram_len = len_type
- txt_content = ""
- # Append Dest MAC and Src MAC
- # ---------------------------
- txt_content += arr_to_str(dest_mac)
- txt_content += arr_to_str(src_mac)
- len_type += data_len
- # Append 1st buffer length
- buff_lengths.append(len_type)
- len_type_bin = "{0:{fill}16b}".format(len_type, fill='0')
- print("aaaa: " + len_type_bin)
- print("len_type byte 1: " + len_type_bin[0:8:1])
- print("len_type byte 2: " + len_type_bin[8:16:1])
- # Append LEN_TYPE field
- # ---------------------------
- txt_content += (len_type_bin[0:8:1] + "\n" + len_type_bin[8:16:1] + "\n")
- if data == 0:
- for i in range (0, data_len, 1):
- txt_content += "{0:{fill}8b}".format(i+start_val, fill='0') + "\n"
- fbuff_bram_len = fbuff_bram_len + 1
- else:
- for i in range (0, data_len, 1):
- txt_content += "{0:{fill}8b}".format(data[i], fill='0') + "\n"
- fbuff_bram_len = fbuff_bram_len + 1
- return txt_content, fbuff_bram_len
- # Returns frame pointer value
- def frame_ptr (frm_id, buffer_lengths):
- frm_ptr = 0;
- for i in range (0, frm_id):
- frm_ptr += buffer_lengths[i]
- return frm_ptr
- def bd_bram_gen (buffer_lengths, data_lengths):
- temp = bd_template
- txt = ""
- dbg = ""
- temp["ts_start"] = 32 * "0"
- temp["ts_end"] = 32 * "0"
- temp["tx_stats_reg"] = 16 * "0"
- print("\n")
- for i in range (0, len(buffer_lengths)):
- temp["tx_buff_len"] = buffer_lengths[i]
- temp["tx_frame_ptr"] = frame_ptr(i, buffer_lengths)
- txt += temp["ts_start"] + "\n"
- txt += temp["ts_end"] + "\n"
- frm_ptr_bin = "{0:{fill}32b}".format(temp["tx_frame_ptr"], fill='0')
- txt += frm_ptr_bin + "\n"
- buff_len_bin = "{0:{fill}16b}".format(temp["tx_buff_len"], fill='0')
- stats_reg = temp["tx_stats_reg"]
- # Set Last bit
- if (i+1 == len(buffer_lengths)):
- stats_reg_list = list(stats_reg)
- stats_reg_list[6] = '1' # Set 9th bit... bits are 15, 14, ..., 0
- stats_reg = ''.join(stats_reg_list)
- txt += stats_reg + buff_len_bin + "\n"
- print(txt)
- return txt
- testcase_data = ""
- bd_bram = ""
- bd_template = {
- "ts_start" : "",
- "ts_end" : "",
- "tx_frame_ptr" : "",
- "tx_stats_reg" : "",
- "tx_buff_len" : ""
- }
- # ---------------------------
- # Buffer 1
- # ---------------------------
- txt_data, bram_len = testcase_gen (buffer_lengths, dest_mac, src_mac, start_val=5, data=0, data_len=data_lengths[0])
- testcase_data += txt_data
- fbuff_bram_len += bram_len
- print("\nFrame Buffer BRAM length: " + str(fbuff_bram_len) + '\n')
- # ---------------------------
- # Buffer 2
- # ---------------------------
- txt_data, bram_len = testcase_gen (buffer_lengths, dest_mac, src_mac, start_val=100, data=0, data_len=data_lengths[1])
- testcase_data += txt_data
- fbuff_bram_len += bram_len
- print("\nFrame Buffer BRAM length: " + str(fbuff_bram_len) + '\n')
- # ---------------------------
- # Buffer 3
- # ---------------------------
- # Initial length of package
- len_type = len(dest_mac) + len(src_mac) + 2
- fbuff_bram_len += len_type
- testcase_data += arr_to_str(dest_mac)
- testcase_data += arr_to_str(src_mac)
- # New data length
- data_len = img_width * img_height
- len_type += data_len
- # Append 2nd buffer length
- buffer_lengths.append(len_type)
- print("Buffer lengths: ")
- print(buffer_lengths)
- len_type_bin = "{0:{fill}16b}".format(len_type, fill='0')
- print("aaaa: " + len_type_bin)
- print("len_type byte 1: " + len_type_bin[0:8:1])
- print("len_type byte 2: " + len_type_bin[8:16:1])
- # Append LEN_TYPE field
- # ---------------------------
- testcase_data += (len_type_bin[0:8:1] + "\n" + len_type_bin[8:16:1] + "\n")
- # Generate image
- data_len = img_width * img_height
- for i in range(0, img_width):
- for j in range(0, img_height):
- R, G, B = pixels[i, j][0], pixels[i, j][1], pixels[i, j][2]
- grayscale = int((R + G + B) / 3)
- normalized_gray = "{0:{fill}8b}".format(grayscale, fill='0') # float(grayscale / 255)
- testcase_data += f"{normalized_gray}\n"
- fbuff_bram_len += 1
- print("\nFrame Buffer BRAM length: " + str(fbuff_bram_len) + '\n')
- for i in range(0, len(buffer_lengths)):
- print ("Frame pointer #"+ str(i) + " = " + str(frame_ptr(i, buffer_lengths)))
- # Generate buffer descriptor BRAM content
- bd_bram_content = bd_bram_gen (buffer_lengths, data_lengths)
- f.write(testcase_data)
- bdf.write(bd_bram_content)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement