Advertisement
milanmetal

Testcase gen

Sep 19th, 2019
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.80 KB | None | 0 0
  1. import numpy as np
  2. from PIL import Image
  3.  
  4. img_name = "images/lena28"
  5. filename = img_name+".png"
  6. img = Image.open(filename)
  7.  
  8. img = img.convert('RGB')  # You need this if you work with PNG
  9. pixels = img.load()  # create the pixel map
  10.  
  11. # Image dimensions
  12. img_width = img.size[0]
  13. img_height = img.size[1]
  14.  
  15. np_img = np.asarray(img)
  16. # pixels_flat = np_img.flatten()
  17.  
  18. frame_buffer_mem = ""
  19. f = open("testcases/frame_buffers.txt", "w+")
  20. bdf = open("testcases/buffer_descriptors.txt", "w+")
  21.  
  22. # Define MAC addresses
  23. dest_mac = ["52", "54", "00", "dc", "36", "0f"] # 52:54:00:DC:36:0F
  24. src_mac = ["14", "65", "33", "1a", "78", "ff"]
  25.  
  26. # Stores buffer lengths in order to generate buffer descriptors later
  27.  
  28. data_lengths = [64, 128, img_width*img_height]
  29. buffer_lengths = []
  30. fbuff_bram_len = 0
  31.  
  32. def arr_to_str(arr):
  33.     arr_str = ""
  34.     for i in range(0, len(arr)):
  35.         arr_str += "{0:08b}".format(int(arr[i], 16)) + "\n"
  36.    
  37.     return arr_str
  38.    
  39. # Generates test case with given data length...
  40. def testcase_gen (buff_lengths, dest_mac, src_mac, start_val, data, data_len) :
  41.     # Initial length of package
  42.     len_type = len(dest_mac) + len(src_mac) + 2
  43.     fbuff_bram_len = len_type
  44.     txt_content = ""
  45.    
  46.     # Append Dest MAC and Src MAC
  47.     # ---------------------------
  48.     txt_content += arr_to_str(dest_mac)
  49.     txt_content += arr_to_str(src_mac)
  50.    
  51.     len_type += data_len
  52.    
  53.     # Append 1st buffer length
  54.     buff_lengths.append(len_type)
  55.    
  56.     len_type_bin = "{0:{fill}16b}".format(len_type, fill='0')
  57.     print("aaaa: " + len_type_bin)
  58.     print("len_type byte 1: " + len_type_bin[0:8:1])
  59.     print("len_type byte 2: " + len_type_bin[8:16:1])
  60.    
  61.     # Append LEN_TYPE field
  62.     # ---------------------------
  63.     txt_content += (len_type_bin[0:8:1] + "\n" + len_type_bin[8:16:1] + "\n")
  64.    
  65.     if data == 0:
  66.         for i in range (0, data_len, 1):
  67.             txt_content += "{0:{fill}8b}".format(i+start_val, fill='0') + "\n"
  68.             fbuff_bram_len = fbuff_bram_len + 1
  69.     else:
  70.         for i in range (0, data_len, 1):
  71.             txt_content += "{0:{fill}8b}".format(data[i], fill='0') + "\n"
  72.             fbuff_bram_len = fbuff_bram_len + 1
  73.    
  74.     return txt_content, fbuff_bram_len
  75.    
  76. # Returns frame pointer value  
  77. def frame_ptr (frm_id, buffer_lengths):
  78.     frm_ptr = 0;
  79.     for i in range (0, frm_id):
  80.         frm_ptr += buffer_lengths[i]
  81.     return frm_ptr
  82.    
  83. def bd_bram_gen (buffer_lengths, data_lengths):
  84.     temp = bd_template
  85.     txt = ""
  86.     dbg = ""
  87.     temp["ts_start"] = 32 * "0"
  88.     temp["ts_end"] = 32 * "0"
  89.     temp["tx_stats_reg"] = 16 * "0"
  90.    
  91.     print("\n")
  92.     for i in range (0, len(buffer_lengths)):
  93.         temp["tx_buff_len"] = buffer_lengths[i]
  94.         temp["tx_frame_ptr"] = frame_ptr(i, buffer_lengths)
  95.        
  96.         txt += temp["ts_start"] + "\n"
  97.         txt += temp["ts_end"] + "\n"
  98.        
  99.         frm_ptr_bin = "{0:{fill}32b}".format(temp["tx_frame_ptr"], fill='0')
  100.         txt += frm_ptr_bin + "\n"
  101.        
  102.         buff_len_bin = "{0:{fill}16b}".format(temp["tx_buff_len"], fill='0')
  103.        
  104.         stats_reg = temp["tx_stats_reg"]
  105.        
  106.         # Set Last bit
  107.         if (i+1 == len(buffer_lengths)):
  108.             stats_reg_list = list(stats_reg)
  109.             stats_reg_list[6] = '1'     # Set 9th bit... bits are 15, 14, ..., 0
  110.             stats_reg = ''.join(stats_reg_list)
  111.        
  112.         txt += stats_reg + buff_len_bin + "\n"
  113.    
  114.     print(txt)
  115.     return txt
  116.  
  117. testcase_data = ""
  118. bd_bram = ""
  119.  
  120. bd_template = {
  121.     "ts_start" : "",
  122.     "ts_end" : "",
  123.     "tx_frame_ptr" : "",
  124.     "tx_stats_reg" : "",
  125.     "tx_buff_len" : ""
  126. }
  127.  
  128.  
  129. # ---------------------------
  130. # Buffer 1
  131. # ---------------------------
  132. txt_data, bram_len = testcase_gen (buffer_lengths, dest_mac, src_mac, start_val=5, data=0, data_len=data_lengths[0])
  133. testcase_data += txt_data
  134. fbuff_bram_len += bram_len    
  135. print("\nFrame Buffer BRAM length: " + str(fbuff_bram_len) + '\n')
  136.  
  137. # ---------------------------
  138. # Buffer 2
  139. # ---------------------------
  140. txt_data, bram_len = testcase_gen (buffer_lengths, dest_mac, src_mac, start_val=100, data=0, data_len=data_lengths[1])
  141. testcase_data += txt_data
  142. fbuff_bram_len += bram_len
  143. print("\nFrame Buffer BRAM length: " + str(fbuff_bram_len) + '\n')
  144.  
  145. # ---------------------------
  146. # Buffer 3
  147. # ---------------------------
  148. # Initial length of package
  149. len_type = len(dest_mac) + len(src_mac) + 2
  150. fbuff_bram_len += len_type
  151.  
  152. testcase_data += arr_to_str(dest_mac)
  153. testcase_data += arr_to_str(src_mac)
  154.  
  155. # New data length
  156. data_len = img_width * img_height
  157. len_type += data_len
  158.  
  159. # Append 2nd buffer length
  160. buffer_lengths.append(len_type)
  161.  
  162. print("Buffer lengths: ")
  163. print(buffer_lengths)
  164.  
  165. len_type_bin = "{0:{fill}16b}".format(len_type, fill='0')
  166. print("aaaa: " + len_type_bin)
  167. print("len_type byte 1: " + len_type_bin[0:8:1])
  168. print("len_type byte 2: " + len_type_bin[8:16:1])
  169.  
  170. # Append LEN_TYPE field
  171. # ---------------------------
  172. testcase_data += (len_type_bin[0:8:1] + "\n" + len_type_bin[8:16:1] + "\n")
  173.  
  174. # Generate image
  175. data_len = img_width * img_height
  176. for i in range(0, img_width):
  177.     for j in range(0, img_height):
  178.         R, G, B = pixels[i, j][0], pixels[i, j][1], pixels[i, j][2]
  179.  
  180.         grayscale = int((R + G + B) / 3)
  181.         normalized_gray = "{0:{fill}8b}".format(grayscale, fill='0') # float(grayscale / 255)
  182.         testcase_data += f"{normalized_gray}\n"
  183.         fbuff_bram_len += 1
  184.    
  185. print("\nFrame Buffer BRAM length: " + str(fbuff_bram_len) + '\n')
  186. for i in range(0, len(buffer_lengths)):
  187.     print ("Frame pointer #"+ str(i) + " = " + str(frame_ptr(i, buffer_lengths)))
  188.  
  189. # Generate buffer descriptor BRAM content
  190. bd_bram_content = bd_bram_gen (buffer_lengths, data_lengths)
  191.  
  192.    
  193. f.write(testcase_data)
  194.  
  195. bdf.write(bd_bram_content)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement