-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathWriteData.py
More file actions
91 lines (68 loc) · 3.66 KB
/
Copy pathWriteData.py
File metadata and controls
91 lines (68 loc) · 3.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
"""Write operations for DWM memory depending on the write instruction."""
from display import display
import config as config
TRd_size = config.TRd_size
# ---------------------------------------------------------------------
# --- Helper: Bounds-safe row write
# ---------------------------------------------------------------------
def _safe_write(memory, row_number, start, end, Local_row_buffer, ap_label=None):
"""Safely write Local_row_buffer[start:end+1] into memory[row_number][start:end+1]."""
writeport = int(row_number)
start = max(0, int(start))
end = int(end)
row_len = len(memory[writeport])
# Clamp bounds
end = min(end, row_len - 1, len(Local_row_buffer) - 1)
n = end - start + 1
# Bulk copy slice (faster and safer than looping)
memory[writeport][start:end + 1] = Local_row_buffer[start:start + n]
# Optional visual display
if ap_label:
display(memory, row_number, ap_label)
# ---------------------------------------------------------------------
# --- Core overwrite and write operations
# ---------------------------------------------------------------------
def overwrite_zero(memory, row_number, start, end, Local_row_buffer):
_safe_write(memory, row_number, start, end, Local_row_buffer, ap_label='AP0')
def overwrite_one(memory, row_number, start, end, Local_row_buffer):
_safe_write(memory, row_number, start, end, Local_row_buffer, ap_label='AP1')
def writezero(memory, row_number, start, end, Local_row_buffer):
"""Instruction 2: shift right, write at TRd head."""
writeport = int(row_number)
for i in range(writeport + TRd_size - 1, writeport, -1):
memory[i][start:end + 1] = memory[i - 1][start:end + 1]
_safe_write(memory, writeport, start, end, Local_row_buffer, ap_label='AP0')
def writeone(memory, row_number, start, end, Local_row_buffer):
"""Instruction 3: shift left, write at TRd tail."""
writeport = int(row_number)
for i in range(writeport - TRd_size + 1, writeport):
memory[i][start:end + 1] = memory[i + 1][start:end + 1]
_safe_write(memory, writeport, start, end, Local_row_buffer, ap_label='AP1')
return 1, 0.504676821
# ---------------------------------------------------------------------
# --- Shift-left/right write variants (instructions 4–6)
# ---------------------------------------------------------------------
def writezero_shiftLE(memory, row_number, start, end, Local_row_buffer):
"""Instruction 4: write at left, shift data left."""
writeport = int(row_number) + 16
for i in range(0, writeport):
memory[i][start:end + 1] = memory[i + 1][start:end + 1]
_safe_write(memory, writeport, start, end, Local_row_buffer)
def writezero_shiftRE(memory, row_number, start, end, Local_row_buffer):
"""Instruction 5: write at left, shift data right."""
writeport = int(row_number) + 16
for i in range(int(2 * 32), writeport, -1):
memory[i][start:end + 1] = memory[i - 1][start:end + 1]
_safe_write(memory, writeport, start, end, Local_row_buffer)
def writeone_shiftLE(memory, row_number, start, end, Local_row_buffer):
"""Instruction 6: write at right, shift data left."""
writeport = int(row_number) + 16
for i in range(0, writeport):
memory[i][start:end + 1] = memory[i + 1][start:end + 1]
_safe_write(memory, writeport, start, end, Local_row_buffer)
def writeone_shiftRE(memory, row_number, start, end, Local_row_buffer):
"""Instruction 7: write at right, shift data right."""
writeport = int(row_number) + 16
for i in range(int(2 * 32), writeport, -1):
memory[i][start:end + 1] = memory[i - 1][start:end + 1]
_safe_write(memory, writeport, start, end, Local_row_buffer)