前言
本人永远记不住时钟周期和频率的对应关系,比如说1.5GHz的时钟周期是多少呢,1/1.5之后我就总是拿不准后面的单位应该是啥,所以我硬着头皮记了几次ms-K/us-M/ns-G/ps-T的关系,最后放弃了。
后来呢
后来我就自己做了简单的辅助脚本,但是发现之前写错了,有些情况会算错,因此今晚重新写了一下,大概其就是这个效果吧:
[xiaotu@xiaotu-eda ~/my_work/glb_env]$clk_dis -i 1.5G
==========freq info==============
1500000.000000 KHz
1500.000000 MHz
1.500000 GHz
0.001500 THz
==========priod info=============
0.000001 ms
0.000667 us
0.666667 ns
666.666667 ps
[xiaotu@xiaotu-eda ~/my_work/glb_env]$clk_dis -i 1.8GH
==========freq info==============
1800000.000000 KHz
1800.000000 MHz
1.800000 GHz
0.001800 THz
==========priod info=============
0.000001 ms
0.000556 us
0.555556 ns
555.555556 ps
[xiaotu@xiaotu-eda ~/my_work/glb_env]$clk_dis -i 2.7GHz
==========freq info==============
2700000.000000 KHz
2700.000000 MHz
2.700000 GHz
0.002700 THz
==========priod info=============
0.000000 ms
0.000370 us
0.370370 ns
370.370370 ps
[xiaotu@xiaotu-eda ~/my_work/glb_env]$clk_dis -i 270M
==========freq info==============
270000.000000 KHz
270.000000 MHz
0.270000 GHz
0.000270 THz
==========priod info=============
0.000004 ms
0.003704 us
3.703704 ns
3703.703704 ps
[xiaotu@xiaotu-eda ~/my_work/glb_env]$clk_dis -i 270ns
==========freq info==============
3703.703704 KHz
3.703704 MHz
0.003704 GHz
0.000004 THz
==========priod info=============
0.000270 ms
0.270000 us
270.000000 ns
270000.000000 ps
[xiaotu@xiaotu-eda ~/my_work/glb_env]$clk_dis -i 270us
==========freq info==============
3.703704 KHz
0.003704 MHz
0.000004 GHz
0.000000 THz
==========priod info=============
0.270000 ms
270.000000 us
270000.000000 ns
270000000.000000 ps
[xiaotu@xiaotu-eda ~/my_work/glb_env]$clk_dis -i 10m
==========freq info==============
0.100000 KHz
0.000100 MHz
0.000000 GHz
0.000000 THz
==========priod info=============
10.000000 ms
10000.000000 us
10000000.000000 ns
10000000000.000000 ps
[xiaotu@xiaotu-eda ~/my_work/glb_env]$clk_dis -i 1000n
==========freq info==============
1000.000000 KHz
1.000000 MHz
0.001000 GHz
0.000001 THz
==========priod info=============
0.001000 ms
1.000000 us
1000.000000 ns
1000000.000000 ps
实现
实现起来也很简单,之前不小心写了一些int计算,及时更正了:
#!/usr/bin/python
###############################################################
## Name : clk_dis
## Author : xiaotu
## Time : 2021-07-27 11:09:14
## Description:
##
##
###############################################################
import sys
import os
import re
import argparse
import math
def input_args_proc():
parser = argparse.ArgumentParser(description="argparse info")
parser.add_argument('-o', action='store_true', default=False, help='open this script')
parser.add_argument('-i', help='like 1GH or 100M or 10ns or 12p')
result = parser.parse_args()
if result.o == True:
os.system("gvim %s" % __file__)
sys.exit(0)
inp = str(result.i).strip()
return inp
def main():
inp = input_args_proc()
res = re.match(r"([\.\d]+)([pnumMGTKk])([sHzZ]+)?", inp)
if res:
value = res.group(1)
unit = res.group(2)
if res.group(3):
sel = res.group(3)
else:
if re.match(r"[pnum]", unit):#period
sel = "s"
else:#freq
sel = "Hz"
if sel == "H":
sel = "Hz"
value0 = value
value1 = value
if sel == "Hz":
if unit == "k" or unit == "K":
value0 = float(value) * 1000
if unit == "M":
value0 = float(value) * 1000000
if unit == "G":
value0 = float(value) * 1000000000
if unit == "T":
value0 = float(value) * 10000000000000
value1 = float(1/value0)
else:
if unit == "m":
value1 = float(value) / 1000
if unit == "u":
value1 = float(value) / 1000000
if unit == "n":
value1 = float(value) / 1000000000
if unit == "p":
value1 = float(value) / 1000000000000
value0 = float(1/value1)
print("==========freq info==============")
print(" %f KHz" % float(value0/1000))
print(" %f MHz" % float(value0/1000000))
print(" %f GHz" % float(value0/1000000000))
print(" %f THz" % float(value0/1000000000000))
print("==========priod info=============")
print(" %f ms" % float(value1*1000))
print(" %f us" % float(value1*1000000))
print(" %f ns" % float(value1*1000000000))
print(" %f ps" % float(value1*1000000000000))
if __name__ == "__main__":
main()