前言 作者身处甲方公司,有幸近两次参与到攻防演练行动当中,在这两次行动中也帮助公司逐步建立起来了一套SOC平台,完成对接了NGFW、IDS、APT、WAF、终端安全等安全设备并投入运营,运营过程中发现一个痛点没有得到很好的解决 在演练期间,公司领导每天会抽出5分钟时间听防守小组汇报,SOC平台所能展示的内容过于复杂与专业,不能很好地表达与反应当日的安全攻击态势,于是诞生出这个造轮子的想法。 简介 SOC Sankey Generator是一款从SOC日志中进行数据ETL与数据可视化的工具,可以快速将日志呈现为Sankey图,Sankey图常常应用于具有数据流向关系的可视化分析,在安全中适合描述源对目标发起了何种攻击事件 欢迎各位Star,Fork、Issue、PR(GitHub:https://github.com/LennyLeng/SOC_Sankey_Generator) 环境&依赖 python3 pandas
简介 已经有很长一段时间不做 SoC Integration 方面的工作了,这篇是芯片 IO 相关的一些设计经验总结,主要是方便自己将来重新拾起,同时也希望能和大家分享、讨论和学习。 这项工作不是从头去设计一个IO或者PAD的电路结构,做 SoC 的 Design House 一般都是在 SoC 芯片中例化现成的 IO cell 和 PAD,这些 cell 一般是由 foundry
用“麻雀虽小五脏俱全”来形容SoC,再确切不过了。SoC是模仿计算机系统,微缩成了一个微系统。 在我接触过的SOC芯片中,硬件的大概的组成是:核心(core),存储,外设接口(高速外设和低速外设),总线,中断模块,时钟模块等。在验证阶段,这些都是用verilog代码实现的,你是看不到实体的。 SOC是一个整体的概念,再细化一下,便到了每个模块。在一个SOC成型之前,设计工程师用verilog代码把每个模块敲出了,粗略进行模块级的验证,在模块级验证通过之后,会通过总线把各个模块集成在一起。 国内很多公司的“葫芦娃”并不是自己“长”的,都是从国内外一下专门做IP的公司买的IP,也就是模块,然后把这些IP,集成到一起,组把“葫芦娃”都挂在藤上,成一个SOC芯片。 当然,并不是所有的模块都是买,也有一些小的模块是可以自己写的。 看到这里,不知道你对SOC的概念,有没有多一点理解,希望对你有帮助,如果对你有帮助,麻烦点个赞。我是不二鱼,欢迎关注我。
使用模块 ‘the first line is zhushi’ _author_ = ‘syz’ import sys def test(): args = sys.argv if len
小结 本篇详细介绍了 MyBatis 缓存模块的底层原理,包括缓存的基础实现、具备各种扩展功能的缓存装饰器,以及缓存 Key 的设计思想。 个人认为,缓存模块中的精髓就是装饰器设计模式的灵活运用,它使得用户在使用缓存时,可以根据不同的需求来灵活地定制化功能。这种设计思想非常值得我们借鉴。
functools functools 包含了用于创建装饰函数,启动面向切面的编程,超出面向对象编程范围的代码复用,同时提供了装饰函数用于丰富的快捷比较的API, partial 模块还创建了包含函数参数的函数引用 item: {}".format(i)) if __name__ == "__main__": # 传入两个不同的类型参数,其处理逻辑也是不同 myfunc([1,2,3,6,4,5] myfunc("Hello World") 输出: List item: 1 List item: 2 List item: 3 List item: 6 List item: 4 List item: 5
当然,作为整体的芯片功耗,还得包括各种加速器和接口,尤其是会被用到的模块。 在设计SoC的时候,性能,功耗和价格就转换成了PPA。啥是PPA?其实就是性能,功耗和面积。其中,性能有两层含义。 如下图所示,这就是一个5x4的交叉矩阵: 根据我看到的数据,在28纳米制程上,5x4的配置下,这个总线的频率可以跑到300Mhz。 因此,切记,弱壁垒只能保证你给出的指令次序,并不能保证在它们之间没有别的模块去访问内存,哪怕这个模块来自于同一个核。 还有,在SoC系统上,对有些设备模块进行DMA时,如果不是缓存行对齐,那么可能每32字节都会被拆成2段分别做DMA,这个效率就要差了1倍了。 如果使用了带ecc的内存,那么更需要ddr带宽对齐了。 我这有个数据,快速傅立叶变化,在powerpc上如果使用软浮点,性能是1,那么用了自带的矢量运算协处理器(运算能力不强,是浮点器件的低成本替换模块)后,gcc自动编译,性能提高5倍。
什么是模块化? 1.一系列相关联的结构组成的整体 2.这个整体带有一定语义化 比如说page分页、比如说图片轮播。 怎么做? 1.为模块分类命名如(m-,md-)表示一个模块 2.唯一的根节点 3.使用以主选择器开头的后代选择器 <! html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> /*导航模块 */ .m-nav{}/*模块容器*/ .m-nav li{} .m-nav a{} .m-nav .active a{} </style html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> /*导航模块
5、模块化开发 为什么需要模块化 JavaScript原始功能 在网页开发的早期,js制作作为一种脚本语言,做一些简单的表单验证或动画实现等,那个时候代码还是很少的。 那个时候的代码是怎么写的呢? 使用模块作为出口 我们可以使用将需要暴露到外面的变量,使用一个模块作为出口,什么意思呢? 来看下对应的代码: 我们做了什么事情呢? 非常简单,在匿名函数内部,定义一个对象。 我们只需要使用属于自己模块的属性和方法即可 这就是模块最基础的封装,事实上模块的封装还有很多高级的话题: 但是我们这里就是要认识一下为什么需要模块,以及模块的原始雏形。 幸运的是,前端模块化开发已经有了很多既有的规范,以及对应的实现方案。 常见的模块化规范: CommonJS、AMD、CMD,也有ES6的Modules image.png
使用time模块打印当前时间 # 导入time模块 >>> import time # 打印当前时间,返回浮点数 >>> seconds = time.time() >>> seconds 1588858156.6146255 浮点数转时间结构体 >>> local_time = time.localtime(seconds) >>> local_time time.struct_time(tm_year=2020, tm_mon=5, %d %H:%M:%S') time.struct_time(tm_year=2020, tm_mon=5, tm_mday=7, tm_hour=21, tm_min=29, tm_sec=16, tm_wday
欢迎大家加入2022届数字IC交流群,QQ群号 1060380138 做过SoC的同学们基本都会接触到一个词,tradeoff。什么是tradeoff呢?为什么要tradeoff? 只要是做SoC设计就离不开这三个概念。首先,性能不用讲大家都明白。我们经常会看到关于性能的宣传,比如某新发布的手机跑分多少多少,比如某款CPU芯片的最高主频等等。 对于大规模的SoC,这时候就需要架构工程师统筹考虑三个指标,在PPA三项指标间做出权衡。是用功耗换性能,还是用面积换性能,抑或是在满足基本性能的前提下大力优化功耗或者面积。 就像某水果公司的SoC,有钱任性,其L3 cache做的不小,哈哈。 最后总结一下,芯片设计中PPA既是对立的,又是统一的,其矛盾贯穿SoC设计始终。没有完美的芯片,只有完美的tradeoff。 END
SoC功能验证的挑战 系统复杂性提高增加验证难度 设计层次提高增加了验证工作量 发展趋势 2.功能验证方法与验证规划 仿真为基本出发点的功能验证方法 功能验证开发流程制订验证计划 功能验证需求 协议验证 根据总线协议对各个模块的接口部分进行验证 系统级的测试平台 边界条件 设计的不连续处 出错的条件 极限情况 系统级的测试平台标准 性能指标 覆盖率指标 4.仿真验证自动化 激励的生成 coverage @ifc.cb; // Wait a cycle end end endprogram 5. 目前,SoC设计中常用的静态形式验证方法是相等性检查。 半形式验证是一种混合了仿真技术与形式验证技术的方法。常用的半形式验证是混合属性检查或模型检查,它将形式验证的完整性与仿真的速度、灵活性相结合。
MediaTeck Dimenstiy 1000 5G SoC提供空前的(unparalled)性能,超快的网络速度和无缝的连接。 ? MediaTek于2019年11月26日发布 5G SoC产品线,支持无与伦比的性能组合 - 连接,多媒体,AI,图像处理能力的创新,是高端和旗舰5G手机芯片的有力争夺者。 Dimensity 1000是MTK 5G SoC产品家族的第一款产品,集成5G Modem,7nm工艺制造。 第一款支持Dimensity的智能手机将于2020年第一季度上市。 Dimenity 1000 5G SoC支持双运营商聚合(two carrier aggregation, 2CC CA),在sub-6GHz频段,下行速率高达4.7Gbps,上行速率高达2.5Gbps MTK Dimensity 1000主要技术能力如下 - World's First Dual 5G SIM - 世界第一款支持双5G SIM Most Power Efficient 5G Modem
接下来从功耗构成的角度,我们来看有哪些和SoC设计相关的提示。 首先是 ,可以在满足功能的前提下尽量降低供电电压值,这里面包含的技术有多电压域(multi voltage domain)设计,比如内部模块工作在低电压域,与IO相关的模块工作在高电压域;多电源域(multi 输入向量控制就是当芯片/模块置于休眠模式时,通过一组输入使芯片/模块的泄漏最小。这些输入向量可以通过寄存器上的置位/复位输入端或通过扫描链加入(听起来是不是有点丧心病狂的感觉!。 上面讲的都是从功耗构成角度考虑,我们也可以结合SoC设计流程来看看在SoC设计的各个阶段都能做些什么来降低功耗。毕竟低功耗的设计贯穿了SoC设计的整个流程。 总结一下,SoC的低功耗设计方法有很多,具体还要结合项目本身的实际情况来定。正如前一篇所讲,在芯片设计的世界里没有完美的技术,只有完美的tradeoff。 END
logging模块提供了通用的日志系统,可以采用不同的方式记录日志,比如文件,HTTP、GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式; 日志分不同提醒级别,级别顺序为: logging.warning("user hh try wrong password more than 3 times") logging.critical("sever is down") 效果: logging模块包括 #4设置日志格式 screen.setFormatter(logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')) #5添加到 message') logging.info('This is info message') logging.warning('This is warning message') 执行结果:屏幕 文件: 案例5: logger.addHandler(screen) returnlogger logger=get_logger('access') logger.warning("hhh") 执行结果: 案例6:在一个程序中实际应用日志模块的案例
在上一节中我们初步了解了webpack可以利用内置静态模块类型(asset module type)来处理资源文件,我们所知道的本地服务,资源的压缩,代码分割,在webpack构建的工程中有一个比较显著的特征是 ,模块化,要么commonjs要么esModule,在开发环境我们都是基于这两种,那么通过webpack打包后,如何让其支持浏览器能正常的加载两种不同的模式呢? IFEE模式,一个匿名的自定义自行函数内包裹了几大块区域 1、初始化定义了webpack依赖的模块 var __webpack_modules__ = { '. value就是一个函数,函数体内就是引入的具体代码内容,并且内部传入了一个形参module,实际上这个module就是为{exports: {}}定义的对象,把内部函数twoSum绑定了在对象上 2、调用模块优先从缓存对象模块取值 ' }); } Object.defineProperty(exports, '__esModule', { value: true }); }; })(); 5、
2 并发容器 Java5提供了多种并发容器来改进同步容器的性能。 同步容器将所有对容器状态的访问都串行化,以实现他们的线程安全性。 在Java 5中增加了 ConcurrentHashMap,用来替代同步且基于散列的Map,增加了对一些常见符合操作的支持,例如“若没有则添加”、替换以及有条件删除等。
Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义了 ORM 的特性和 API 以及一系列整合的 SPIs。
python模块分为系统内置的模块、第三方的模块和用户编写的模块 默认情况下,python第三方的模块安装在python 的安装目录下site-packages下,以文件或者目录的形式存放 用户模块,程序模块化对区分功能和结构,代码清晰度有很好的帮助 默认情况下,在python运行时只是加载了少数的系统内置的模块,可以使用vars()查看 >>> print vars() ,赋值给scoekt import语句是将python模块导入,模块应该放置在pythonpath目录下 import module name 或者 import module name 模块中的sqrt方法导入 from math import sqrt as q #将math模块中的sqrt方法导入,并取别名q python预留的关键字可以使用keyword模块检查 主要用于执行字符串内包含有python的算术表达式 exec("print (1+100-20)/2") exec('print "hello world"') print eval('5+
Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义了 ORM 的特性和 API 以及一系列整合的 SPIs。