Ethernet Calculations

Physical Frame Length

$pixel_{Pitch} = \frac{25400\frac{\mu m}{inch}}{{Resolution}}$

$physical\_frame_{length} = pixel_{Pitch} * pixel\_per\_frame$


In [4]:
import numpy as np
resolutions       = [360, 600, 1200, 2400, 4800] # dpi
inch2mm           = 25.4 # mm/inch
framelength_bytes = 8192
pixel_bitnb       = 4

physical_frame_length = np.empty(shape=[len(resolutions)], dtype=np.float64) # mm
for i in range(len(resolutions)):
  physical_frame_length[i] = (inch2mm / resolutions[i]) * (framelength_bytes * 8 / pixel_bitnb)

for i in range(len(resolutions)):
  print("Resolution: {:4} dpi   Physical Frame Length: {} mm".format(resolutions[i], physical_frame_length[i]))


Resolution:  360 dpi   Physical Frame Length: 1155.9822222222222 mm
Resolution:  600 dpi   Physical Frame Length: 693.5893333333333 mm
Resolution: 1200 dpi   Physical Frame Length: 346.79466666666667 mm
Resolution: 2400 dpi   Physical Frame Length: 173.39733333333334 mm
Resolution: 4800 dpi   Physical Frame Length: 86.69866666666667 mm

DDR Calculations

Memory size


In [5]:
import numpy as np
memory_sizes = [1073741824, 2147483648, 4294967296, 8589934592] # [Bytes] = 1GB, 2GB, 4GB, 8GB
memory_width = 1024 # Pixels
section_nbr  = 16

memory_depth  = np.empty(shape=[len(memory_sizes)], dtype=np.integer)
section_depth = np.empty(shape=[len(memory_sizes)], dtype=np.integer)
for i in range(len(memory_sizes)):
  memory_depth[i]  = memory_sizes[i]  / memory_width
  section_depth[i] = memory_depth[i] / section_nbr

print("| Memory Size | Memory Width |   Memory Depth | Section Nbr | Section Depth |")
for i in range(len(memory_sizes)):
  print("| {:4} GBytes |  {:4} Pixels | {:8} Bytes | {:11} | {:7} Bytes |".format(memory_sizes[i]/1024/1024/1024, memory_width, memory_depth[i], section_nbr, section_depth[i]))


| Memory Size | Memory Width |   Memory Depth | Section Nbr | Section Depth |
|  1.0 GBytes |  1024 Pixels |  1048576 Bytes |          16 |   65536 Bytes |
|  2.0 GBytes |  1024 Pixels |  2097152 Bytes |          16 |  131072 Bytes |
|  4.0 GBytes |  1024 Pixels |  4194304 Bytes |          16 |  262144 Bytes |
|  8.0 GBytes |  1024 Pixels |  8388608 Bytes |          16 |  524288 Bytes |

Data Rate required


In [6]:
import numpy as np
inch2mm        = 25.4 # mm/inch
ph_name        = ["KM 1024i", "KY KJ4B", "KY KJ4B_1200_64k"]
resolutions    = [360, 600, 1200] # dpi
nozzle_nbr     = [5312, 5312, 5312] # noozles
f_jetting      = [30, 40, 64] # kHz

bits_per_pixel = 4
read_factor    = 2

pixel_pitch       = np.empty(shape=[len(resolutions)], dtype=np.float64)
substrate_speed   = np.empty(shape=[len(resolutions)], dtype=np.float64)
printhead_bitrate = np.empty(shape=[len(resolutions)], dtype=np.float64)
ddr2_bitrate_read = np.empty(shape=[len(resolutions)], dtype=np.float64)
for i in range(len(resolutions)):
  pixel_pitch[i]       = inch2mm / resolutions[i]
  substrate_speed[i]   = f_jetting[i] * pixel_pitch[i]
  printhead_bitrate[i] = nozzle_nbr[i] * bits_per_pixel * f_jetting[i]
  ddr2_bitrate_read[i] = printhead_bitrate[i] * read_factor

print("| PH Name   | Resolution | Nozzles | f Jetting | Substrate Speed |     PH Bitrate | DDR2 Read Bitrate |")
for i in range(len(resolutions)):
  print("| {:16} | {:6} dpi | {:7} | {:5} kHz | {:11.4} m/s | {:6} Mbits/s | {:9} Mbits/s | ".format(ph_name[i], resolutions[i], nozzle_nbr[i], f_jetting[i], substrate_speed[i], printhead_bitrate[i]/1024, ddr2_bitrate_read[i]/1024))


| PH Name   | Resolution | Nozzles | f Jetting | Substrate Speed |     PH Bitrate | DDR2 Read Bitrate |
| KM 1024i         |    360 dpi |    5312 |    30 kHz |       2.117 m/s |  622.5 Mbits/s |    1245.0 Mbits/s | 
| KY KJ4B          |    600 dpi |    5312 |    40 kHz |       1.693 m/s |  830.0 Mbits/s |    1660.0 Mbits/s | 
| KY KJ4B_1200_64k |   1200 dpi |    5312 |    64 kHz |       1.355 m/s | 1328.0 Mbits/s |    2656.0 Mbits/s |