【python脚本】致永远记不住时钟周期和频率关系也算不对的人

前言

本人永远记不住时钟周期和频率的对应关系,比如说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()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼德兰的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值