@@ -168,8 +168,8 @@ module XC2CDevice(
168
168
// TODO: pipeline this or are we OK in one cycle?
169
169
// If we go multicycle, how do we handle this with no clock? Real chip is self-timed internally
170
170
if (config_erase) begin
171
- for (i = 0 ; i < MEM_DEPTH; i = i + 1 )
172
- ram_bitstream[i ] <= {SHREG_WIDTH{1'b1 }};
171
+ for (row = 0 ; row < MEM_DEPTH; row = row + 1 )
172
+ ram_bitstream[row ] <= {SHREG_WIDTH{1'b1 }};
173
173
end
174
174
175
175
end
@@ -256,8 +256,8 @@ module XC2CDevice(
256
256
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
257
257
// PLA AND array
258
258
259
- reg [56 * 80 - 1 :0 ] left_and_config;
260
- reg [56 * 80 - 1 :0 ] right_and_config;
259
+ reg [80 * 56 - 1 :0 ] left_and_config;
260
+ reg [80 * 56 - 1 :0 ] right_and_config;
261
261
262
262
wire [55 :0 ] left_pterms;
263
263
wire [55 :0 ] right_pterms;
@@ -277,24 +277,33 @@ module XC2CDevice(
277
277
);
278
278
279
279
// Hook up the config bits
280
+ integer nterm;
280
281
always @(* ) begin
281
282
282
283
for (row= 0 ; row< 40 ; row= row+ 1 ) begin
283
284
284
285
// We have stuff at the top and bottom of array, with OR array in the middle
285
- // Left side: 249:138
286
- // Right side: 121:10 (mirrored)
286
+ // Each row is two bits from PT0, two from PT1, two from PT2, etc
287
+
288
+ // Right side: 249:138 (mirrored)
289
+ // Left side: 121:10
287
290
if (row >= 20 ) begin
288
- for (nbit= 0 ; nbit< 112 ; nbit= nbit+ 1 ) begin
289
- right_and_config[row* 112 + nbit] <= ram_bitstream[row- 8 ][138 + nbit];
290
- left_and_config[row* 112 + nbit] <= ram_bitstream[row- 8 ][121 - nbit];
291
+ for (nterm= 0 ; nterm< 56 ; nterm= nterm+ 1 ) begin
292
+ right_and_config[nterm* 80 + row* 2 + 0 ] <= ram_bitstream[row- 8 ][249 - nterm* 2 - 1 ];
293
+ right_and_config[nterm* 80 + row* 2 + 1 ] <= ram_bitstream[row- 8 ][249 - nterm* 2 - 0 ];
294
+
295
+ left_and_config[nterm* 80 + row* 2 + 0 ] <= ram_bitstream[row- 8 ][10 + nterm* 2 + 0 ];
296
+ left_and_config[nterm* 80 + row* 2 + 1 ] <= ram_bitstream[row- 8 ][10 + nterm* 2 + 1 ];
291
297
end
292
298
end
293
299
294
300
else begin
295
- for (nbit= 0 ; nbit< 112 ; nbit= nbit+ 1 ) begin
296
- right_and_config[row* 112 + nbit] <= ram_bitstream[row][138 + nbit];
297
- left_and_config[row* 112 + nbit] <= ram_bitstream[row][121 - nbit];
301
+ for (nterm= 0 ; nterm< 56 ; nterm= nterm+ 1 ) begin
302
+ right_and_config[nterm* 80 + row* 2 + 0 ] <= ram_bitstream[row][249 - nterm* 2 - 1 ];
303
+ right_and_config[nterm* 80 + row* 2 + 1 ] <= ram_bitstream[row][249 - nterm* 2 - 0 ];
304
+
305
+ left_and_config[nterm* 80 + row* 2 + 0 ] <= ram_bitstream[row][10 + nterm* 2 + 0 ];
306
+ left_and_config[nterm* 80 + row* 2 + 1 ] <= ram_bitstream[row][10 + nterm* 2 + 1 ];
298
307
end
299
308
end
300
309
@@ -313,11 +322,7 @@ module XC2CDevice(
313
322
// Drive all unused outputs to 0, then hook up our outputs
314
323
// Should be X, !X, X, X
315
324
assign iob_out[31 :7 ] = 25'h0 ;
316
- // assign iob_out[6:3] = {right_pterms[19], right_pterms[22], right_pterms[25], right_pterms[28]};
317
- assign iob_out[6 ] = & right_pterms;
318
- assign iob_out[5 ] = & left_pterms;
319
- assign iob_out[4 ] = & left_and_config[19 * 80 + : 80 ];
320
- assign iob_out[3 ] = & right_and_config[19 * 80 + : 80 ];
325
+ assign iob_out[6 :3 ] = {right_pterms[19 ], right_pterms[22 ], right_pterms[25 ], right_pterms[28 ]};
321
326
assign iob_out[2 :0 ] = 3'h0 ;
322
327
323
328
endmodule
0 commit comments