#!/usr/bin/python3 import glob import re import os re_mux = re.compile(r'mux_(index|case|if_bal|if_unbal)_(\d+)_(\d+)\.v') area = {} # 1 2 3 4 5 6 F7 F8 area[2] = [ 0, 0, 1, 0, 0, 0, 0, 0 ] area[3] = [ 0, 0, 0, 0, 1, 0, 0, 0 ] area[4] = [ 0, 0, 0, 0, 0, 0, 2, 1 ] area[5] = [ 0, 0, 1, 0, 0, 0, 2, 1 ] area[7] = [ 0, 0, 3, 0, 0, 0, 2, 1 ] area[8] = [ 0, 0, 4, 0, 0, 0, 2, 1 ] area[9] = [ 0, 0, 3, 0, 1, 0, 2, 1 ] area[15] = [ 0, 0, 0, 0, 1, 3, 2, 1 ] area[16] = [ 0, 0, 0, 0, 0, 4, 2, 1 ] area[17] = [ 0, 0, 1, 0, 0, 4, 2, 1 ] area[31] = [ 0, 0, 1, 0, 1, 7, 4, 2 ] area[32] = [ 0, 0, 1, 0, 0, 8, 4, 2 ] area[33] = [ 0, 0, 0, 0, 1, 8, 4, 2 ] area[63] = [ 0, 0, 0, 0, 1,15,10, 5 ] area[64] = [ 0, 0, 0, 0, 0,16,10, 5 ] area[65] = [ 0, 0, 1, 0, 0,16,10, 5 ] area[127] = [ 0, 0, 4, 0, 1,31,18, 9 ] area[128] = [ 0, 0, 4, 0, 0,32,18, 9 ] area[129] = [ 0, 0, 3, 0, 1,32,18, 9 ] area[255] = [ 0, 0, 0, 0, 1,67,34,17 ] area[256] = [ 0, 0, 0, 0, 0,68,34,17 ] area[257] = [ 0, 0, 1, 0, 0,68,34,17 ] for fn in glob.glob('*.v'): m = re_mux.match(fn) if not m: continue N,W = map(int, m.group(2,3)) assert N in area bn,_ = os.path.splitext(fn) with open(fn, 'a') as f: assert_area = ['select t:{0} -assert-count {1}'.format(r,v*W) for r,v in zip(['LUT1','LUT2','LUT3','LUT4','LUT5','LUT6','MUXF7','MUXF8'], area[N])] print(''' `ifndef _AUTOTB module __test ; wire [4095:0] assert_area = "cd; %s"; endmodule `endif ''' % '; '.join(assert_area), file=f)