dp BlockRow1 ( in dataIn : tc( 256 ); out dataOut : tc( 256 ); in write : ns( 8 ) ) { reg data1 : tc( 32 ); reg data2 : tc( 32 ); reg data3 : tc( 32 ); reg data4 : tc( 32 ); reg data5 : tc( 32 ); reg data6 : tc( 32 ); reg data7 : tc( 32 ); reg data8 : tc( 32 ); sfg run { data1 = write[7] ? dataIn[255:224] : data1; data2 = write[6] ? dataIn[223:192] : data2; data3 = write[5] ? dataIn[191:160] : data3; data4 = write[4] ? dataIn[159:128] : data4; data5 = write[3] ? dataIn[127:96] : data5; data6 = write[2] ? dataIn[95:64] : data6; data7 = write[1] ? dataIn[63:32] : data7; data8 = write[0] ? dataIn[31:0] : data8; dataOut = (data1 & 0xFFFFFFFF) # (data2 & 0xFFFFFFFF) # (data3 & 0xFFFFFFFF) # (data4 & 0xFFFFFFFF) # (data5 & 0xFFFFFFFF) # (data6 & 0xFFFFFFFF) # (data7 & 0xFFFFFFFF) # (data8 & 0xFFFFFFFF); } } hardwired BlockRow1_Ctrl( BlockRow1 ) { run; } dp BlockRow2 ( in dataIn : tc( 256 ); out dataOut : tc( 256 ); in write : ns( 8 ) ) { reg data1 : tc( 32 ); reg data2 : tc( 32 ); reg data3 : tc( 32 ); reg data4 : tc( 32 ); reg data5 : tc( 32 ); reg data6 : tc( 32 ); reg data7 : tc( 32 ); reg data8 : tc( 32 ); sfg run { data1 = write[7] ? dataIn[255:224] : data1; data2 = write[6] ? dataIn[223:192] : data2; data3 = write[5] ? dataIn[191:160] : data3; data4 = write[4] ? dataIn[159:128] : data4; data5 = write[3] ? dataIn[127:96] : data5; data6 = write[2] ? dataIn[95:64] : data6; data7 = write[1] ? dataIn[63:32] : data7; data8 = write[0] ? dataIn[31:0] : data8; dataOut = (data1 & 0xFFFFFFFF) # (data2 & 0xFFFFFFFF) # (data3 & 0xFFFFFFFF) # (data4 & 0xFFFFFFFF) # (data5 & 0xFFFFFFFF) # (data6 & 0xFFFFFFFF) # (data7 & 0xFFFFFFFF) # (data8 & 0xFFFFFFFF); } } hardwired BlockRow2_Ctrl( BlockRow2 ) { run; } dp BlockRow3 ( in dataIn : tc( 256 ); out dataOut : tc( 256 ); in write : ns( 8 ) ) { reg data1 : tc( 32 ); reg data2 : tc( 32 ); reg data3 : tc( 32 ); reg data4 : tc( 32 ); reg data5 : tc( 32 ); reg data6 : tc( 32 ); reg data7 : tc( 32 ); reg data8 : tc( 32 ); sfg run { data1 = write[7] ? dataIn[255:224] : data1; data2 = write[6] ? dataIn[223:192] : data2; data3 = write[5] ? dataIn[191:160] : data3; data4 = write[4] ? dataIn[159:128] : data4; data5 = write[3] ? dataIn[127:96] : data5; data6 = write[2] ? dataIn[95:64] : data6; data7 = write[1] ? dataIn[63:32] : data7; data8 = write[0] ? dataIn[31:0] : data8; dataOut = (data1 & 0xFFFFFFFF) # (data2 & 0xFFFFFFFF) # (data3 & 0xFFFFFFFF) # (data4 & 0xFFFFFFFF) # (data5 & 0xFFFFFFFF) # (data6 & 0xFFFFFFFF) # (data7 & 0xFFFFFFFF) # (data8 & 0xFFFFFFFF); } } hardwired BlockRow3_Ctrl( BlockRow3 ) { run; } dp BlockRow4 ( in dataIn : tc( 256 ); out dataOut : tc( 256 ); in write : ns( 8 ) ) { reg data1 : tc( 32 ); reg data2 : tc( 32 ); reg data3 : tc( 32 ); reg data4 : tc( 32 ); reg data5 : tc( 32 ); reg data6 : tc( 32 ); reg data7 : tc( 32 ); reg data8 : tc( 32 ); sfg run { data1 = write[7] ? dataIn[255:224] : data1; data2 = write[6] ? dataIn[223:192] : data2; data3 = write[5] ? dataIn[191:160] : data3; data4 = write[4] ? dataIn[159:128] : data4; data5 = write[3] ? dataIn[127:96] : data5; data6 = write[2] ? dataIn[95:64] : data6; data7 = write[1] ? dataIn[63:32] : data7; data8 = write[0] ? dataIn[31:0] : data8; dataOut = (data1 & 0xFFFFFFFF) # (data2 & 0xFFFFFFFF) # (data3 & 0xFFFFFFFF) # (data4 & 0xFFFFFFFF) # (data5 & 0xFFFFFFFF) # (data6 & 0xFFFFFFFF) # (data7 & 0xFFFFFFFF) # (data8 & 0xFFFFFFFF); } } hardwired BlockRow4_Ctrl( BlockRow4 ) { run; } dp BlockRow5 ( in dataIn : tc( 256 ); out dataOut : tc( 256 ); in write : ns( 8 ) ) { reg data1 : tc( 32 ); reg data2 : tc( 32 ); reg data3 : tc( 32 ); reg data4 : tc( 32 ); reg data5 : tc( 32 ); reg data6 : tc( 32 ); reg data7 : tc( 32 ); reg data8 : tc( 32 ); sfg run { data1 = write[7] ? dataIn[255:224] : data1; data2 = write[6] ? dataIn[223:192] : data2; data3 = write[5] ? dataIn[191:160] : data3; data4 = write[4] ? dataIn[159:128] : data4; data5 = write[3] ? dataIn[127:96] : data5; data6 = write[2] ? dataIn[95:64] : data6; data7 = write[1] ? dataIn[63:32] : data7; data8 = write[0] ? dataIn[31:0] : data8; dataOut = (data1 & 0xFFFFFFFF) # (data2 & 0xFFFFFFFF) # (data3 & 0xFFFFFFFF) # (data4 & 0xFFFFFFFF) # (data5 & 0xFFFFFFFF) # (data6 & 0xFFFFFFFF) # (data7 & 0xFFFFFFFF) # (data8 & 0xFFFFFFFF); } } hardwired BlockRow5_Ctrl( BlockRow5 ) { run; } dp BlockRow6 ( in dataIn : tc( 256 ); out dataOut : tc( 256 ); in write : ns( 8 ) ) { reg data1 : tc( 32 ); reg data2 : tc( 32 ); reg data3 : tc( 32 ); reg data4 : tc( 32 ); reg data5 : tc( 32 ); reg data6 : tc( 32 ); reg data7 : tc( 32 ); reg data8 : tc( 32 ); sfg run { data1 = write[7] ? dataIn[255:224] : data1; data2 = write[6] ? dataIn[223:192] : data2; data3 = write[5] ? dataIn[191:160] : data3; data4 = write[4] ? dataIn[159:128] : data4; data5 = write[3] ? dataIn[127:96] : data5; data6 = write[2] ? dataIn[95:64] : data6; data7 = write[1] ? dataIn[63:32] : data7; data8 = write[0] ? dataIn[31:0] : data8; dataOut = (data1 & 0xFFFFFFFF) # (data2 & 0xFFFFFFFF) # (data3 & 0xFFFFFFFF) # (data4 & 0xFFFFFFFF) # (data5 & 0xFFFFFFFF) # (data6 & 0xFFFFFFFF) # (data7 & 0xFFFFFFFF) # (data8 & 0xFFFFFFFF); } } hardwired BlockRow6_Ctrl( BlockRow6 ) { run; } dp BlockRow7 ( in dataIn : tc( 256 ); out dataOut : tc( 256 ); in write : ns( 8 ) ) { reg data1 : tc( 32 ); reg data2 : tc( 32 ); reg data3 : tc( 32 ); reg data4 : tc( 32 ); reg data5 : tc( 32 ); reg data6 : tc( 32 ); reg data7 : tc( 32 ); reg data8 : tc( 32 ); sfg run { data1 = write[7] ? dataIn[255:224] : data1; data2 = write[6] ? dataIn[223:192] : data2; data3 = write[5] ? dataIn[191:160] : data3; data4 = write[4] ? dataIn[159:128] : data4; data5 = write[3] ? dataIn[127:96] : data5; data6 = write[2] ? dataIn[95:64] : data6; data7 = write[1] ? dataIn[63:32] : data7; data8 = write[0] ? dataIn[31:0] : data8; dataOut = (data1 & 0xFFFFFFFF) # (data2 & 0xFFFFFFFF) # (data3 & 0xFFFFFFFF) # (data4 & 0xFFFFFFFF) # (data5 & 0xFFFFFFFF) # (data6 & 0xFFFFFFFF) # (data7 & 0xFFFFFFFF) # (data8 & 0xFFFFFFFF); } } hardwired BlockRow7_Ctrl( BlockRow7 ) { run; } dp BlockRow8 ( in dataIn : tc( 256 ); out dataOut : tc( 256 ); in write : ns( 8 ) ) { reg data1 : tc( 32 ); reg data2 : tc( 32 ); reg data3 : tc( 32 ); reg data4 : tc( 32 ); reg data5 : tc( 32 ); reg data6 : tc( 32 ); reg data7 : tc( 32 ); reg data8 : tc( 32 ); sfg run { data1 = write[7] ? dataIn[255:224] : data1; data2 = write[6] ? dataIn[223:192] : data2; data3 = write[5] ? dataIn[191:160] : data3; data4 = write[4] ? dataIn[159:128] : data4; data5 = write[3] ? dataIn[127:96] : data5; data6 = write[2] ? dataIn[95:64] : data6; data7 = write[1] ? dataIn[63:32] : data7; data8 = write[0] ? dataIn[31:0] : data8; dataOut = (data1 & 0xFFFFFFFF) # (data2 & 0xFFFFFFFF) # (data3 & 0xFFFFFFFF) # (data4 & 0xFFFFFFFF) # (data5 & 0xFFFFFFFF) # (data6 & 0xFFFFFFFF) # (data7 & 0xFFFFFFFF) # (data8 & 0xFFFFFFFF); } } hardwired BlockRow8_Ctrl( BlockRow8 ) { run; } dp BlockDeMux ( in dataIn : tc( 256 ); out dataOut1, dataOut2, dataOut3, dataOut4, dataOut5, dataOut6, dataOut7, dataOut8 : tc( 256 ); in row : ns( 3 ) ) { sfg run { dataOut1 = row == 0 ? dataIn : 0; dataOut2 = row == 1 ? dataIn : 0; dataOut3 = row == 2 ? dataIn : 0; dataOut4 = row == 3 ? dataIn : 0; dataOut5 = row == 4 ? dataIn : 0; dataOut6 = row == 5 ? dataIn : 0; dataOut7 = row == 6 ? dataIn : 0; dataOut8 = row == 7 ? dataIn : 0; } } hardwired BlockDeMux_Ctrl( BlockDeMux ) { run; } dp BlockWriteDeMux ( in writeIn : ns( 8 ); out writeOut1, writeOut2, writeOut3, writeOut4, writeOut5, writeOut6, writeOut7, writeOut8 : ns( 8 ); in row : ns( 3 ) ) { sfg run { writeOut1 = row == 0 ? writeIn : 0; writeOut2 = row == 1 ? writeIn : 0; writeOut3 = row == 2 ? writeIn : 0; writeOut4 = row == 3 ? writeIn : 0; writeOut5 = row == 4 ? writeIn : 0; writeOut6 = row == 5 ? writeIn : 0; writeOut7 = row == 6 ? writeIn : 0; writeOut8 = row == 7 ? writeIn : 0; } } hardwired BlockWriteDeMux_Ctrl( BlockWriteDeMux ) { run; } dp BlockMux ( in dataIn1, dataIn2, dataIn3, dataIn4, dataIn5, dataIn6, dataIn7, dataIn8 : tc( 256 ); out dataOut : tc( 256 ); in row : ns( 3 ) ) { sfg run { dataOut = ( row == 0 ? dataIn1 : ( row == 1 ? dataIn2 : ( row == 2 ? dataIn3 : ( row == 3 ? dataIn4 : ( row == 4 ? dataIn5 : ( row == 5 ? dataIn6 : ( row == 6 ? dataIn7 : ( dataIn8 ) ) ) ) ) ) ) ); } } hardwired BlockMux_Ctrl( BlockMux ) { run; } dp Block ( in dataIn : tc( 256 ); out dataOut : tc( 256 ); in write : ns( 8 ); in row : ns( 3 ) ) { sig dataIn1, dataIn2, dataIn3, dataIn4, dataIn5, dataIn6, dataIn7, dataIn8 : tc( 256 ); sig dataOut1, dataOut2, dataOut3, dataOut4, dataOut5, dataOut6, dataOut7, dataOut8 : tc( 256 ); sig writeOut1, writeOut2, writeOut3, writeOut4, writeOut5, writeOut6, writeOut7, writeOut8 : ns( 8 ); use BlockDeMux( dataIn, dataOut1, dataOut2, dataOut3, dataOut4, dataOut5, dataOut6, dataOut7, dataOut8, row ); use BlockWriteDeMux( write, writeOut1, writeOut2, writeOut3, writeOut4, writeOut5, writeOut6, writeOut7, writeOut8, row ); use BlockMux( dataIn1, dataIn2, dataIn3, dataIn4, dataIn5, dataIn6, dataIn7, dataIn8, dataOut, row ); use BlockRow1( dataIn1, dataOut1, write1 ); use BlockRow2( dataIn2, dataOut2, write2 ); use BlockRow3( dataIn3, dataOut3, write3 ); use BlockRow4( dataIn4, dataOut4, write4 ); use BlockRow1( dataIn5, dataOut5, write5 ); use BlockRow1( dataIn6, dataOut6, write6 ); use BlockRow1( dataIn7, dataOut7, write7 ); use BlockRow1( dataIn8, dataOut8, write8 ); sfg run { } } hardwired Block_Ctrl( Block ) { run; } dp BlockTest ( in dataIn : tc( 256 ); out dataOut : tc (256 ); out write : ns( 8 ); out row : ns ( 3 ) ) { sfg test1 { dataOut = (1 & 0xFFFFFFFF) # (2 & 0xFFFFFFFF) # (3 & 0xFFFFFFFF) # (4 & 0xFFFFFFFF) # (5 & 0xFFFFFFFF) # (6 & 0xFFFFFFFF) # (7 & 0xFFFFFFFF) # (8 & 0xFFFFFFFF); write = 0b11111111; row = 1; } sfg test2 { dataOut = (1 & 0xFFFFFFFF) # (2 & 0xFFFFFFFF) # (3 & 0xFFFFFFFF) # (4 & 0xFFFFFFFF) # (5 & 0xFFFFFFFF) # (6 & 0xFFFFFFFF) # (7 & 0xFFFFFFFF) # (8 & 0xFFFFFFFF); write = 0b11111111; row = 5; } sfg test3 { dataOut = (1337 & 0xFFFFFFFF) # (1337 & 0xFFFFFFFF) # (1337 & 0xFFFFFFFF) # (1337 & 0xFFFFFFFF) # (1337 & 0xFFFFFFFF) # (1337 & 0xFFFFFFFF) # (1337 & 0xFFFFFFFF) # (1337 & 0xFFFFFFFF); write = 0b10011001; row = 5; } sfg test4 { dataOut = (5 & 0xFFFFFFFF) # (6 & 0xFFFFFFFF) # (7 & 0xFFFFFFFF) # (8 & 0xFFFFFFFF) # (9 & 0xFFFFFFFF) # (10 & 0xFFFFFFFF) # (11 & 0xFFFFFFFF) # (12 & 0xFFFFFFFF); write = 0b01010101; row = 8; } sfg read1 { dataOut = (10 & 0xFFFFFFFF) # (20 & 0xFFFFFFFF) # (30 & 0xFFFFFFFF) # (40 & 0xFFFFFFFF) # (50 & 0xFFFFFFFF) # (60& 0xFFFFFFFF) # (70 & 0xFFFFFFFF) # (80 & 0xFFFFFFFF); write = 0b00000000; row = 1; $display($cycle,$dec, dataOut[255:224], dataOut[223:192], dataOut[191:160], dataOut[159:128], dataOut[127:96], dataOut[95:64]);, dataOut[63:32], dataOut[31:0]); } sfg read2 { dataOut = (10 & 0xFFFFFFFF) # (20 & 0xFFFFFFFF) # (30 & 0xFFFFFFFF) # (40 & 0xFFFFFFFF) # (50 & 0xFFFFFFFF) # (60& 0xFFFFFFFF) # (70 & 0xFFFFFFFF) # (80 & 0xFFFFFFFF); write = 0b00000000; row = 2; $display($cycle,$dec, dataOut[255:224], dataOut[223:192], dataOut[191:160], dataOut[159:128], dataOut[127:96], dataOut[95:64]);, dataOut[63:32], dataOut[31:0]); } sfg read3 { dataOut = (10 & 0xFFFFFFFF) # (20 & 0xFFFFFFFF) # (30 & 0xFFFFFFFF) # (40 & 0xFFFFFFFF) # (50 & 0xFFFFFFFF) # (60& 0xFFFFFFFF) # (70 & 0xFFFFFFFF) # (80 & 0xFFFFFFFF); write = 0b00000000; row = 3; $display($cycle,$dec, dataOut[255:224], dataOut[223:192], dataOut[191:160], dataOut[159:128], dataOut[127:96], dataOut[95:64]);, dataOut[63:32], dataOut[31:0]); } sfg read4 { dataOut = (10 & 0xFFFFFFFF) # (20 & 0xFFFFFFFF) # (30 & 0xFFFFFFFF) # (40 & 0xFFFFFFFF) # (50 & 0xFFFFFFFF) # (60& 0xFFFFFFFF) # (70 & 0xFFFFFFFF) # (80 & 0xFFFFFFFF); write = 0b00000000; row = 4; $display($cycle,$dec, dataOut[255:224], dataOut[223:192], dataOut[191:160], dataOut[159:128], dataOut[127:96], dataOut[95:64]);, dataOut[63:32], dataOut[31:0]); } sfg read5 { dataOut = (10 & 0xFFFFFFFF) # (20 & 0xFFFFFFFF) # (30 & 0xFFFFFFFF) # (40 & 0xFFFFFFFF) # (50 & 0xFFFFFFFF) # (60& 0xFFFFFFFF) # (70 & 0xFFFFFFFF) # (80 & 0xFFFFFFFF); write = 0b00000000; row = 5; $display($cycle,$dec, dataOut[255:224], dataOut[223:192], dataOut[191:160], dataOut[159:128], dataOut[127:96], dataOut[95:64]);, dataOut[63:32], dataOut[31:0]); } sfg read6 { dataOut = (10 & 0xFFFFFFFF) # (20 & 0xFFFFFFFF) # (30 & 0xFFFFFFFF) # (40 & 0xFFFFFFFF) # (50 & 0xFFFFFFFF) # (60& 0xFFFFFFFF) # (70 & 0xFFFFFFFF) # (80 & 0xFFFFFFFF); write = 0b00000000; row = 6; $display($cycle,$dec, dataOut[255:224], dataOut[223:192], dataOut[191:160], dataOut[159:128], dataOut[127:96], dataOut[95:64]);, dataOut[63:32], dataOut[31:0]); } sfg read7 { dataOut = (10 & 0xFFFFFFFF) # (20 & 0xFFFFFFFF) # (30 & 0xFFFFFFFF) # (40 & 0xFFFFFFFF) # (50 & 0xFFFFFFFF) # (60& 0xFFFFFFFF) # (70 & 0xFFFFFFFF) # (80 & 0xFFFFFFFF); write = 0b00000000; row = 7; $display($cycle,$dec, dataOut[255:224], dataOut[223:192], dataOut[191:160], dataOut[159:128], dataOut[127:96], dataOut[95:64]);, dataOut[63:32], dataOut[31:0]); } sfg read8 { dataOut = (10 & 0xFFFFFFFF) # (20 & 0xFFFFFFFF) # (30 & 0xFFFFFFFF) # (40 & 0xFFFFFFFF) # (50 & 0xFFFFFFFF) # (60& 0xFFFFFFFF) # (70 & 0xFFFFFFFF) # (80 & 0xFFFFFFFF); write = 0b00000000; row = 8; $display($cycle,$dec, dataOut[255:224], dataOut[223:192], dataOut[191:160], dataOut[159:128], dataOut[127:96], dataOut[95:64]);, dataOut[63:32], dataOut[31:0]); } } sequencer BlocTest_Ctrl( BlockTest ) { test1; } dp main { sig dataIn, dataOut : tc( 256 ); sig write : ns( 8 ); sig row : ns( 3 ); use Block( dataIn, dataOut, write, row ); use BlockTest( dataOut, dataIn, write, row ); sfg run { } } hardwired main_Ctrl( main ) { run; } system S { main; }