硬件开源编程利器MyHDL简介

硬件开源编程利器myhdl简介
verilog缺点
自从1995年verilog hdl 1364-1995标准发布至今已经20多年了,说他经久不衰并不恰当,主要是没有新的语言可以替代,现今数字电路高速发展,verilog的一些缺点暴露的越来越多,下面总结一下:
借用知乎上“马車”的观点:
例化不方便:有人会说,有辅助插件帮你完成 (确实有很多好的插件,emacs verilog-mode , vim 的autoinst) 即便这样,但是对带参数的模块例化, 一对多例化同样需要手动处理,非常不方便
大量的重复声明:无休止的变量声明,无休止的位宽声明,容易出错, 作为一门上古时期的语言,对编译器不能要求太高
函数不能带参数:verilog中函数的使用只能是零零星星,哪怕是一个位宽的变化都要重写函数, 作为一门语言函数不能广泛使用,实为鸡肋
参数化实在是笨:虽然支持参数化,parameter 也只能做一些简单的加减左移操作, 没有基本math包。利用宏做参数化,对于变量比较多的设计,非常复杂,并且也不好维护
错误检测很弱:编译工具对错误的处理比较保守, 这种保守可能也源于语言本身,以及编译器的能力不及。
以下问题需要工程师自己处理
位宽不匹配
input/output端口写反
饱和截位弄错
跨时钟域问题锁存器检查组合逻辑环自己查....
基于前仿的编译,会遗漏大量的错误,必须要lint, 综合检查, 费时费力又费钱。
重构、增减信号,bist/dft逻辑插入麻烦
需要手动处理, 编写脚本, 即便是脚本也不通用
(内容来源:https://www.zhihu.com/question/440688150 作者:温戈 公众号:openic)
基于以上各种各样的缺点,一些基于verilog语言的第三方语言(本质仍然是hdl)陆续出现,像spinalhdl,chisel和本文的主角myhdl都是这类语言,关于spinalhdl,chisel请查看(https://www.zhihu.com/question/440688150)
myhdl介绍
你能想象有一天能用python编写“硬件”吗?
(本系列基于myhdl 0.10.0 版 on python3)
译自 http://docs.myhdl.org/en/stable/manual/intro.html
myhdl项目的目标是通过python语言的优雅和简洁性来增强硬件设计者的能力。
myhdl是一种免费、开源的软件包,用于使用python作为硬件描述和验证语言。python是一种非常高级的语言,硬件设计者可以利用它的全部力量来建模和仿真他们的设计。此外,可以将设计转换为verilog或vhdl语言。这提供了一个融入传统设计流程的切入口。
建模
python的强大和清晰性使myhdl成为高层次建模的理想解决方案。python以为复杂建模问题提供优雅解决方案而闻名。此外,python对于快速应用程序开发和试验是非常优秀的。
myhdl背后的关键思想是使用python生成器来建模硬件并发性。生成器最好被描述为可(从暂停状态中)恢复函数。myhdl生成器类似于verilog的always块和vhdl中的过程。
一个硬件模块(myhdl术语中的块)建模为返回生成器的函数。这种方法使支持诸如任意层次结构、命名端口关联、实例数组和条件实例化等特性变得简单明了。此外,myhdl提供了实现传统硬件描述概念的类。它提供了一个信号类来支持生成器之间的通信、支持面向位操作的类以及枚举类型类。
仿真与验证
内置仿真器运行在python解释器的顶部。它支持通过观看波形来跟踪vcd文件中的信号变化。
使用myhdl,python单元测试框架可以用于硬件设计。虽然单元测试是一种流行的现代软件验证技术,但在硬件设计领域还是比较少见的。
myhdl还可以作为verilog设计的硬件验证语言,通过与传统的hdl模拟器进行仿真。
转换为verilog语言与vhdl语言
遵从一定的限制后,可将myhdl设计转换为verilog语言或vhdl语言,这是切入传统设计流程的一条路径,包括综合和实现。可转换子集受到限制,但比标准可综合子集要宽得多。它包括可用于高层次建模和test benches的功能。
转换器处理一个已完全解析的设计实例。因此,原有的设计结构可以任意复杂。此外,转换限制仅适用于生成器内部的代码。除了外部生成器,python的能力可以充分释放,而不影响可转换性。
最后,转换器自动地实现了许多用verilog或vhdl编写困难的任务。一个显著点是自动处理有符号算术问题。

一氧化碳传感器—CO气体检测方案
人工智能的含义是什么
超全解析Linux文件系统之ext2路径名查找
发动机中的85BSD030PA4-3BSR传感器,你了解多少?
温度记录仪LED指示灯电路原理图
硬件开源编程利器MyHDL简介
荣联助力车企建立车联网平台,帮助客户重新配置数据存储策略
激光枪射击游戏电路
固态硬盘的接口类型有哪些
PLC中常用进制及相互转换方法
华为企业云打造大数据产业生态圈
介绍一款带锂电充电管理的MCU
软件工程师如何获得更好的发展
分析API和机器学习未来的发展方式
私有云、公有云和本地化部署,它们之间的区别以及联系
人工智能应对数字化转型挑战的5个领域
推挽输出、开漏输出、三态输出原理详解
松下彩电开关电源电路工作原理及工作过程
电机驱动中的功率转换器框图分析
大对决!iPhone 7Plus对垒全新三星S8,谁更厉害?