source: proto/s2k/trunk/demo/transpose/transpose_demo.py @ 3884

Last change on this file since 3884 was 3884, checked in by ksherdy, 5 years ago

Drop package specifiers demos.

File size: 10.5 KB
Line 
1# Ken Herdy
2# August 25, 2013
3#
4# transpose -   A very simple example to demonstrate 2^3-bit to 2^0-bit transposition.
5# IDISA C++ syntax
6#
7#static void transpose(BytePack s_76543210_r7, BytePack s_76543210_r6,
8#                      BytePack s_76543210_r5, BytePack s_76543210_r4,
9#                      BytePack s_76543210_r3, BytePack s_76543210_r2,
10#                      BytePack s_76543210_r1, BytePack s_76543210_r0,
11#                      BitBlock & s_7_r0, BitBlock & s_6_r0,
12#                      BitBlock & s_5_r0, BitBlock & s_4_r0,
13#                      BitBlock & s_3_r0, BitBlock & s_2_r0,
14#                      BitBlock & s_1_r0, BitBlock & s_0_r0)
15#{
16#
17# BitBlock s_3210_r0;
18# BitBlock s_3210_r1;
19# BitBlock s_3210_r2;
20# BitBlock s_3210_r3;
21# BitBlock s_76_r0;
22# BitBlock s_76_r1;
23# BitBlock s_54_r0;
24# BitBlock s_54_r1;
25# BitBlock s_32_r0;
26# BitBlock s_32_r1;
27# BitBlock s_10_r0;
28# BitBlock s_10_r1;
29#
30# // Step 1
31#
32#       b7654_0 = hsimd<8>::packh(b76543210_1, b76543210_0);
33#       b7654_1 = hsimd<8>::packh(b76543210_2, b76543210_2);
34#       b7654_2 = hsimd<8>::packh(b76543210_5, b76543210_4);
35#       b7654_3 = hsimd<8>::packh(b76543210_7, b76543210_6);
36#       b3210_0 = hsimd<8>::packl(b76543210_1, b76543210_0);
37#       b3210_1 = hsimd<8>::packl(b76543210_2, b76543210_2);
38#       b3210_2 = hsimd<8>::packl(b76543210_5, b76543210_4);
39#       b3210_3 = hsimd<8>::packl(b76543210_7, b76543210_6);
40#
41# // Step 2
42#
43#       b76_0 = hsimd<4>::packh(b7654_1, b7654_0);
44#       b76_1 = hsimd<4>::packh(b7654_3, b7654_2);
45#       b54_0 = hsimd<4>::packl(b7654_1, b7654_0);
46#       b54_1 = hsimd<4>::packl(b7654_3, b7654_2);
47#       b32_0 = hsimd<4>::packh(b3210_1, b3210_0);
48#       b32_1 = hsimd<4>::packh(b3210_3, b3210_2);
49#       b10_0 = hsimd<4>::packl(b3210_1, b3210_0);
50#       b10_1 = hsimd<4>::packl(b3210_3, b3210_2);
51#
52# // Step 3
53#
54#       b7 = hsimd<2>::packh(b76_1, b76_0);
55#       b6 = hsimd<2>::packl(b76_1, b76_0);
56#       b5 = hsimd<2>::packh(b54_1, b54_0);
57#       b4 = hsimd<2>::packl(b54_1, b54_0);
58#       b3 = hsimd<2>::packh(b32_1, b32_0);
59#       b2 = hsimd<2>::packl(b32_1, b32_0);
60#       b1 = hsimd<2>::packh(b10_1, b10_0);
61#       b0 = hsimd<2>::packl(b10_1, b10_0);
62#}
63#
64#
65# s2k syntax
66#
67#filter transpose(in: stream<8> s_76543210,
68#                 out: stream<1> s_7, out: stream<1> s_6, out: stream<1> s_5, out: stream<1> s_4,
69#                 out: stream<1> s_3, out: stream<1> s_2, out: stream<1> s_1, out: stream<1> s_0)
70#{
71#
72#  stream<4> s_7654;
73#  stream<4> s_3210;
74#  stream<2> s_76; 
75#  stream<2> s_54; 
76#  stream<2> s_32; 
77#  stream<2> s_10;   
78#
79#  // Step 1
80#
81#  s_7654 = packh<8>(s_76543210);
82#  s_3210 = packl<8>(s_76543210);
83#
84#  // Step 2
85#
86#  s_76   = packh<4>(s_7654);
87#  s_54   = packl<4>(s_7654);
88#  s_32   = packh<4>(s_3210);
89#  s_10   = packl<4>(s_3210);
90#
91#  // Step 2
92#
93#  s_7    = packh<2>(s_76);
94#  s_6    = packl<2>(s_76);
95#  s_5    = packh<2>(s_54);
96#  s_4    = packl<2>(s_54);
97#  s_3    = packh<2>(s_32);
98#  s_2    = packl<2>(s_32);
99#  s_1    = packh<2>(s_10);
100#  s_0    = packl<2>(s_10); 
101#
102#}
103#
104
105import sys
106from lib import pablo
107from lib import flow
108from lib import cast
109from lib import bitutil
110from lib import vstreams
111from lib import hstreams
112from lib import estreams
113#import optparse
114#import transpose_demo_config
115
116#zero_ch = '0'
117
118#class Basis():
119#       s_0 = 0
120#       s_1 = 0
121#       s_2 = 0
122#       s_3 = 0
123#       s_4 = 0
124#       s_5 = 0
125#       s_6 = 0
126#       s_7 = 0
127
128class Basis_bits():     
129        bit_7 = 0
130        bit_6 = 0
131        bit_5 = 0
132        bit_4 = 0
133        bit_3 = 0
134        bit_2 = 0
135        bit_1 = 0
136        bit_0 = 0
137
138# streams as integers
139def transposition(data):
140        s_76543210  = bitutil.bytes_to_strm(data[::-1]) # Little Endian
141
142        lgth = len(bin(s_76543210)[:-1])
143
144        s_7654      = hstreams.packh(8,s_76543210,lgth)
145        s_3210      = hstreams.packl(8,s_76543210,lgth)
146        s_76        = hstreams.packh(4,s_7654,lgth/2)
147        s_54        = hstreams.packl(4,s_7654,lgth/2)
148        s_32        = hstreams.packh(4,s_3210,lgth/2)
149        s_10        = hstreams.packl(4,s_3210,lgth/2)
150        s_7         = hstreams.packh(2,s_76,lgth/4)
151        s_6         = hstreams.packl(2,s_76,lgth/4)
152        s_5         = hstreams.packh(2,s_54,lgth/4)
153        s_4         = hstreams.packl(2,s_54,lgth/4)
154        s_3         = hstreams.packh(2,s_32,lgth/4)
155        s_2         = hstreams.packl(2,s_32,lgth/4)
156        s_1         = hstreams.packh(2,s_10,lgth/4)
157        s_0         = hstreams.packl(2,s_10,lgth/4)
158
159        aligned_streams = bitutil.aligned_streams([('Source Data ', data[::-1]), 
160                              ('stream<8> s_76543210 = read<8>(addr,3)', bitutil.strm_to_bstr(s_76543210,lgth)),
161                              ('stream<4> s_7654 = packh<8>(s_76543210)', bitutil.strm_to_bstr(s_7654,lgth/2)),
162                              ('stream<4> s_3210 = packl<8>(s_76543210)', bitutil.strm_to_bstr(s_3210,lgth/2)),
163                              ('stream<2> s_76 = packh<4>(s_7654)', bitutil.strm_to_bstr(s_76,lgth/4)),
164                              ('stream<2> s_54 = packl<4>(s_7654)', bitutil.strm_to_bstr(s_54,lgth/4)),
165                              ('stream<2> s_32 = packh<4>(s_3120)', bitutil.strm_to_bstr(s_32,lgth/4)),
166                              ('stream<2> s_10 = packl<4>(s_3120)', bitutil.strm_to_bstr(s_10,lgth/4)),
167                              ('stream<2> s_7 = packh<2>(s_76)', bitutil.strm_to_bstr(s_7,lgth/8)),
168                              ('stream<2> s_6 = packl<2>(s_76)', bitutil.strm_to_bstr(s_6,lgth/8)),
169                              ('stream<2> s_5 = packh<2>(s_54)', bitutil.strm_to_bstr(s_5,lgth/8)),
170                              ('stream<2> s_4 = packl<2>(s_54)', bitutil.strm_to_bstr(s_4,lgth/8)),
171                              ('stream<2> s_3 = packh<2>(s_32)', bitutil.strm_to_bstr(s_3,lgth/8)),
172                              ('stream<2> s_2 = packl<2>(s_32)', bitutil.strm_to_bstr(s_2,lgth/8)),
173                              ('stream<2> s_1 = packh<2>(s_10)', bitutil.strm_to_bstr(s_1,lgth/8)),
174                              ('stream<2> s_0 = packl<2>(s_10)', bitutil.strm_to_bstr(s_0,lgth/8))])
175
176        return aligned_streams
177
178def pablo_transposition(data, basis_bits): 
179
180  EOF_mask = pablo.transpose_streams("abc", basis_bits)
181  lgth = len(data)*8
182
183  aligned_streams = bitutil.aligned_streams([('Source Data ', data[::-1]), 
184        ("basis_bits.bit_7",  bitutil.strm_to_bstr(basis_bits.bit_7,lgth/8)),
185        ("basis_bits.bit_6",  bitutil.strm_to_bstr(basis_bits.bit_6,lgth/8)),
186        ("basis_bits.bit_5",  bitutil.strm_to_bstr(basis_bits.bit_5,lgth/8)),
187        ("basis_bits.bit_4",  bitutil.strm_to_bstr(basis_bits.bit_4,lgth/8)),
188        ("basis_bits.bit_3",  bitutil.strm_to_bstr(basis_bits.bit_3,lgth/8)),
189        ("basis_bits.bit_2",  bitutil.strm_to_bstr(basis_bits.bit_2,lgth/8)),
190        ("basis_bits.bit_1",  bitutil.strm_to_bstr(basis_bits.bit_1,lgth/8)),
191        ("basis_bits.bit_0",  bitutil.strm_to_bstr(basis_bits.bit_0,lgth/8))])
192
193  return aligned_streams
194
195#
196# streams as binary strings
197def transposition_bstr(data): 
198
199        unbounded = len(data*8)
200        s_76543210  = bitutil.bytes_to_bstr(data[::-1]) # 'abc' -> 'cba' little endian byte and bit order |76543210|
201
202        s_7654      = hstreams.packh_bstr(8,s_76543210)
203        s_3210      = hstreams.packl_bstr(8,s_76543210)
204
205        s_76        = hstreams.packh_bstr(4,s_7654)
206        s_54        = hstreams.packl_bstr(4,s_7654)
207        s_32        = hstreams.packh_bstr(4,s_3210)
208        s_10        = hstreams.packl_bstr(4,s_3210)
209
210        s_7         = hstreams.packh_bstr(2,s_76)
211        s_6         = hstreams.packl_bstr(2,s_76)
212        s_5         = hstreams.packh_bstr(2,s_54)
213        s_4         = hstreams.packl_bstr(2,s_54)
214        s_3         = hstreams.packh_bstr(2,s_32)
215        s_2         = hstreams.packl_bstr(2,s_32)
216        s_1         = hstreams.packh_bstr(2,s_10)
217        s_0         = hstreams.packl_bstr(2,s_10)
218
219        latex_aligned_streams = bitutil.latex_aligned_streams([('Source Data `$\\vartriangleleft$\\verb`', bitutil.format_fields(data[::-1],1,8)), 
220                              ('stream<8> s_76543210 = io.read<8>(addr,3)', bitutil.format_fields(s_76543210,8,8)),
221                              ('stream<4> s_7654 = packh<8>(s_76543210)', bitutil.format_fields(s_7654,4,8)),
222                              ('stream<4> s_3210 = packl<8>(s_76543210)', bitutil.format_fields(s_3210,4,8)),
223                              ('stream<2> s_76 = packh<4>(s_7654)', bitutil.format_fields(s_76,2,8)),
224                              ('stream<2> s_54 = packl<4>(s_7654)', bitutil.format_fields(s_54,2,8)),
225                              ('stream<2> s_32 = packh<4>(s_3120)', bitutil.format_fields(s_32,2,8)),
226                              ('stream<2> s_10 = packl<4>(s_3120)', bitutil.format_fields(s_10,2,8)),
227                              ('stream<2> s_7 = packh<2>(s_76)', bitutil.format_fields(s_7,1,8)),
228                              ('stream<2> s_6 = packl<2>(s_76)', bitutil.format_fields(s_6,1,8)),
229                              ('stream<2> s_5 = packh<2>(s_54)', bitutil.format_fields(s_5,1,8)),
230                              ('stream<2> s_4 = packl<2>(s_54)', bitutil.format_fields(s_4,1,8)),
231                              ('stream<2> s_3 = packh<2>(s_32)', bitutil.format_fields(s_3,1,8)),
232                              ('stream<2> s_2 = packl<2>(s_32)', bitutil.format_fields(s_2,1,8)),
233                              ('stream<2> s_1 = packh<2>(s_10)', bitutil.format_fields(s_1,1,8)),
234                              ('stream<2> s_0 = packl<2>(s_10)', bitutil.format_fields(s_0,1,8))])
235
236        # for now just an easy place to try parallel int to digit
237
238        aligned_streams = bitutil.aligned_streams([('Source Data ', data[::-1]), 
239                              ('stream<8> s_76543210 = io.read<8>(addr,3)',s_76543210),
240                              ('stream<4> s_7654 = packh<8>(s_76543210)',s_7654),
241                              ('stream<4> s_3210 = packl<8>(s_76543210)',s_3210),
242                              ('stream<2> s_76 = packh<4>(s_7654)',s_76),
243                              ('stream<2> s_54 = packl<4>(s_7654)',s_54),
244                              ('stream<2> s_32 = packh<4>(s_3120)',s_32),
245                              ('stream<2> s_10 = packl<4>(s_3120)',s_10),
246                              ('stream<2> s_7 = packh<2>(s_76)',s_7),
247                              ('stream<2> s_6 = packl<2>(s_76)',s_6),
248                              ('stream<2> s_5 = packh<2>(s_54)',s_5),
249                              ('stream<2> s_4 = packl<2>(s_54)',s_4),
250                              ('stream<2> s_3 = packh<2>(s_32)',s_3),
251                              ('stream<2> s_2 = packl<2>(s_32)',s_2),
252                              ('stream<2> s_1 = packh<2>(s_10)',s_1),
253                              ('stream<2> s_0 = packl<2>(s_10)',s_0)])
254
255        aligned_streams = bitutil.aligned_streams([('Source Data ', data[::-1]), 
256                              ('stream<8> s_76543210 = read<8>(addr,3)',s_76543210),
257                              ('stream<4> s_7654 = packh<8>(s_76543210)',s_7654),
258                              ('stream<4> s_3210 = packl<8>(s_76543210)',s_3210),
259                              ('stream<2> s_76 = packh<4>(s_7654)',s_76),
260                              ('stream<2> s_54 = packl<4>(s_7654)',s_54),
261                              ('stream<2> s_32 = packh<4>(s_3120)',s_32),
262                              ('stream<2> s_10 = packl<4>(s_3120)',s_10),
263                              ('stream<2> s_7 = packh<2>(s_76)',s_7),
264                              ('stream<2> s_6 = packl<2>(s_76)',s_6),
265                              ('stream<2> s_5 = packh<2>(s_54)',s_5),
266                              ('stream<2> s_4 = packl<2>(s_54)',s_4),
267                              ('stream<2> s_3 = packh<2>(s_32)',s_3),
268                              ('stream<2> s_2 = packl<2>(s_32)',s_2),
269                              ('stream<2> s_1 = packh<2>(s_10)',s_1),
270                              ('stream<2> s_0 = packl<2>(s_10)',s_0)])
271
272        return aligned_streams
273
274# basis = Basis()
275basis_bits = Basis_bits()
276
277if __name__ == "__main__":
278
279#  input_file = sys.argv[1]
280#  global data
281#  data          = bitutil.readfile(input_file)
282
283  print "s2k Binary String Transposition"
284  print transposition_bstr("abc")
285
286  print "s2k Stream (unbounded integer) Transposition"
287  print transposition("abc")
288
289  print "Pablo Transposition"
290  print pablo_transposition("abc", basis_bits)
291       
292
293
294
Note: See TracBrowser for help on using the repository browser.