在Verilog中的置换处理,为将一个数据的数据位按照某种规则进行重新排列。
以DES算法的初始置换为例
初始置换将64比特的明文,按照初始置换表进行置换,得到一个乱序的64bit明文组。
初始置换表如下:
第一个数58表示,将明文M的第58位放置在第1位。
data
14 17 11 24 1 5 3 28
15 6 21 10 23 19 12 4
26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40
51 45 33 48 44 49 39 56
34 53 46 42 50 36 29 32
def get_varinfo(config_path:str)->[str,[]]:
f = open(config_path,"r")
varname = f.readline().strip()
varidxs = []
for line in f.readlines():
for idx in line.split():
varidxs.append(int(idx.strip()))
f.close()
return [varname,varidxs]
def output_expression(varname:str,varidxs:[int],linenum=8,databit=2)->None:
print("{")
for idx in range(len(varidxs)-1):
print(("{}[{:"+str(databit)+"}],").format(varname,varidxs[idx]),end=' ')
if (idx+1)%linenum == 0 :
print("")
print(("{}[{:"+str(databit)+"}]").format(varname,varidxs[len(varidxs)-1]))
print("};")
def main():
varname , varidxs = get_varinfo("./config.txt")
output_expression(varname,varidxs)
if __name__ == "__main__":
main()