python语言的编程模式_一种基于Python语言的EDA开发平台及其使用方法与流程

032824039012.gif

本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法。

背景技术:

目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码密度低,可移植性和编程效率等等都存在问题。芯片设计耗时,绝大多数需求的实现都必须从头开始设计,编写大量的HDL代码,很难实现复用。一旦需求改变,大量接口需要重新设计。同时,对于硬件架构好坏的评估通常都要在所有设计工作都完成的前提下,才能得到关于架构设计的反馈。该过程非常耗时,根据反馈做出的调整还必须再次验证。上述情况造成的硬件芯片开发周期过长已经成为阻碍EDA设计快速发展的重要瓶颈。

在现代编程语言和编译器技术的支持下,EDA业界也尝试改善EDA设计方法的设计效率,例如基于C/C++语言的高层次综合(high-level synthesis,HLS)硬件描述方式。但是,HLS硬件描述方法目前仅仅在信号处理及人工智能等特定算法领域获得一些进展,在面向对象和高级语言特性支持方面有所欠缺。

Chisel是U.C.Berkeley大学在2012年提出的另一种基于Scala语言的硬件描述方式。不同于传统的Verilog硬件描述语言,Chisel利用Scala语言的面向对象、函数式编程等特点,使得硬件描述的抽象水平大大提高。在很大程度上简化和加速了硬件设计,但是,Chisel的基础——Scala语言使用相对复杂,应用领域狭窄,很少人能了解和掌握,不利于Chisel大规模推广应用。

Python语言是近些年来新兴的编程语言,拥有很强的面向对象编程能力,它的类模块支持多态,操作符重载和多继承等高级概念。Python语法简洁,使用范围广,学习成本低,通过调用有大量现成的函数库就能进行开发。Python的使用和分发是完全免费的,同时Python在线社区对用户需求的响应和商业软件一样非常快,在不同系统平台上进行移植也非常简单。综上所述,Python语言是EDA设计中实现硬件描述的理想编程语言。

技术实现要素:

本发明的目的在于克服现有技术的缺点与不足,提出了一种基于Python语言的EDA开发平台及其使用方法,通过增加Python语言及FIRRTL语言的解释器,充分利用Python语言面向对象,支持函数式编程,以及支持多态,操作符重载和多继承等的特点,使得开发平台的用户可以直接使用Python语言实现对FPGA/ASIC芯片的硬件描述及测试,极大提高了EDA开发的效率。

为实现上述目的,本发明所提供的技术方案如下:

一种基于Python语言的EDA开发平台,包括:

基于Python的硬件描述类库,为使用Python语言编写的专为描述硬件电路逻辑描述的Python库,定义一系列硬件描述所用到的对象以及特性;

语言解释器,用于将Python语言解释为RTL级Verilog代码,包括Python到FIRRTL的P2F解释器和FIRRTL到RTL级Verilog的F2V解释器;

Verilator仿真工具,用于将基于Python语言的测试用例,转换到能够综合的Verilog代码后,使用Verilator编译为能够仿真的C++代码进行仿真测试。

进一步,对于基于Python的硬件描述类库,在Python脚本代码中,能够通过import接口引用Python语言构造的硬件描述类库来描述硬件逻辑,该库实现了一系列硬件逻辑电路构造所必须的组件,封装在Python库当中,包括寄存器、模块、存储器和信号输入输出;该库还实现了一系列专为硬件设计的类型,能够用于位操作、可综合为硬件算术、逻辑运算的对象类型,包括无符号、有符号和布尔类型,以及一系列的重载符号,包括赋值和重赋值符号。

进一步,在编写Python代码时,能够直接调用已有的硬件描述类库,也能够加载第三方类库,还能够在平台上编写及封装自定义的类库。

进一步,所述语言解释器包括:

FIRRTL中间表示层,为平台框架中的中间层,是一种高层次抽象的RTL级描述语言,不同于底层的平台指向的RTL级Verilog语言,它能够作为独立的编译层次,生成不同平台的RTL级Verilog代码;同样,不同的高级编程语言前端也能够灵活替换;它在本平台的编译框架中的角色,类似于高级编程语言解析中的LLVM所扮演的角色;

Python语言到FIRRTL中间表示层的P2F解释器,用于将用户编写的Python硬件描述代码解释为FIRRTL中间表示层语言,对其中调用的硬件描述类库中的各类组件对象解释为FIRRTL对应的模块;

FIRRTL中间表示层到RTL级Verilog的F2V解释器,用于将FIRRTL中间表示层语言解释为底层RTL级能够综合的Verilog代码,该代码能够通过EDA工具进行综合,进而下载到FPGA芯片或用于ASIC芯片流片;用户能够通过对F2V解释器进行参数配置,使得同一段FIRRTL代码根据用户最终开发的需要,生成基于不同架构的RTL级Verilog代码。

进一步,对于Verilator仿真工具,用户使用Python语言编写仿真用例进行测试,仿真用例以及包含在硬件描述类库中的测试功能首先解释为能够综合的Verilog代码,然后调用Verilator工具生成相应的能够仿真的C++代码,并进一步生成相应的时序精确的结果波形文件.vcd,通过gtkwave工具进行测试分析。

上述基于Python语言的EDA开发平台的使用方法,包括以下步骤:

1)使用Python语言编写硬件描述脚本以及对应的测试用例;其中在编写Python代码时,能够直接调用已有的硬件描述类库,也能够加载第三方类库,还能够在平台上编写及封装自定义的类库;

2)调用P2F解释器,将Python代码,即脚本或测试用例解释为FIRRTL语言中间表示层;

3)调用F2V解释器,将FIRRTL语言中间表示层的代码解释为RTL级Verilog代码;

4)调用Verilator仿真工具,根据Verilog代码描述的测试用例,对Verilog代码描述的脚本进行测试,生成相应的时序精确的结果波形文件.vcd,再通过gtkwave工具进行测试分析;其中,需先用Verilator仿真工具把Verilog代码描述的测试用例编译为可仿真的C++代码,然后再进行仿真测试。

本发明与现有技术相比,具有如下优点与有益效果:

本发明充分利用Python语言面向对象、支持函数式编程以及支持多态、操作符重载和多继承等的特点,通过增加了基于Python的硬件描述类库、Python语言到FIRRTL的语言解释器以及FIRRTL到Verilog的语言解释器,实现了基于Python的硬件描述方法,使得开发平台的用户可以直接使用Python语言实现对FPGA/ASIC芯片的硬件描述及测试,提高了硬件描述代码的抽象性,缩减了EDA开发的迭代周期,提高了EDA设计以及验证效率,具有实际推广价值。

附图说明

图1为本发明基于Python语言的EDA开发平台的基本结构示意图。

图2为本发明基于Python语言的EDA开发平台的运行流程图。

具体实施方式

下面结合具体实施例对本发明作进一步说明。

如图1所示,本实施例所提供的基于Python语言的EDA开发平台,包括:

基于Python的硬件描述类库,为使用Python语言编写的专为描述硬件电路逻辑描述的Python库,定义一系列硬件描述所用到的对象以及特性。在Python脚本代码中,可以通过import接口引用Python语言构造的硬件描述类库来描述硬件逻辑。该库实现了一系列硬件逻辑电路构造所必须的组件,封装在Python库当中,如寄存器、模块、存储器、信号输入输出等。该库还实现了一系列专为硬件设计的类型,如可用于位操作、可综合为硬件算术(加、减、位移)、逻辑(与、或、异或)运算的对象类型,包括无符号、有符号以及布尔(布尔串)类型,以及一系列的重载符号,如赋值(“=”)、重赋值(“:=”)等符号。在编写Python代码时,可以直接调用已有的硬件描述类库,也可以加载第三方类库,还可以在平台上编写及封装自定义的类库。

语言解释器,用于将Python语言解释为RTL级Verilog代码,包括:

FIRRTL中间表示层,为平台框架中的中间层,是一种灵活的、高层次抽象的RTL级描述语言,不同于底层的平台指向的RTL级Verilog语言,它可以作为独立的编译层次,生成不同平台的RTL级Verilog代码(ASIC或FPGA);同样,不同的高级编程语言前端也可以灵活替换。它在本平台的编译框架中的角色,与高级编程语言解析中的LLVM所扮演的角色类似;

Python语言到FIRRTL中间表示层的P2F解释器,用于将用户编写的Python硬件描述代码解释为FIRRTL中间表示层语言,对其中调用的硬件描述类库中的各类组件对象解释为FIRRTL对应的模块;

FIRRTL中间表示层到RTL级Verilog的F2V解释器,用于将FIRRTL中间表示层语言解释为底层RTL级能够综合的Verilog代码,该代码可以通过EDA工具进行综合,进而下载到FPGA芯片或用于ASIC芯片流片;用户可以通过对F2V解释器进行参数配置,使得同一段FIRRTL代码根据用户最终开发的需要,生成基于不同架构的RTL级Verilog代码。

Verilator仿真工具,用于将基于Python语言的测试用例,转换到可综合的Verilog代码后,使用Verilator编译为可仿真的C++代码进行仿真测试;用户使用Python语言编写仿真用例进行测试,仿真用例以及包含在硬件描述类库中的测试功能首先解释为可综合的Verilog代码,然后调用Verilator工具生成相应的可仿真的C++代码,并进一步生成相应的时序精确的结果波形文件.vcd,通过gtkwave等工具进行测试分析。

如图2所示,本实施例上述的基于Python语言的EDA开发平台的具体运行流程,如下:

1)用户调用Python硬件描述类库,编写硬件逻辑描述的Python脚本。

2)用户根据所设计的脚本,使用硬件描述类库中提供的仿真测试组件,编写相对应的Python测试用例。

3)根据用户编写的基于硬件描述类库的Python脚本及其测试用例,调用P2F解释器,解释生成对应的FIRRTL中间表示代码。

4)调用F2V解释器,将FIRRTL解释为RTL级Verilog代码,并且可以通过EDA工具进行综合并下载到FPGA芯片或直接用于ASIC芯片流片。

5)调用Verilator仿真工具,把可综合的RTL级Verilog代码生成可仿真的C++代码。

6)运行C++代码进行仿真测试,生成相应的时序精确的结果波形文件.vcd,通过gtkwave等工具进行测试分析。

以上所述实施例只为本发明之较佳实施例,并非以此限制本发明的实施范围,故凡依本发明之形状、原理所作的变化,均应涵盖在本发明的保护范围内。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么只有奇次谐波_我们为什么要用UPS不间断电源?

所谓不间断电源系统,就是当停电时能够接替市电持续供应电力的设备,它的动力来自电池组,由于不间断电源反应速度快,停电的瞬间在4~8毫秒内或无中段时间下继续供应电力。为什么要用UPS不间断电源?现在全世界各国的大众供…

计算机一般的应用课题方向,计算机类哪个方向的课题好立项

课题申报计算机类哪个方向的课题好立项时间:2020年01月17日 所属分类:课题申报 点击次数:计算机技术如今应用也是非常广泛的,很多计算机从业者也需要申报课题来评定职称,然而他们课题申报关心的问题也很多:…

angular语言前端开发_web前端开发入门全套学习方法路径,兼职在家做网站也能月入上万...

前端学习路径1.WEB前端快速入门在本阶段,我们需要掌握 HTML 与 CSS 基础,当然,也包含 H5 和 C3 的新特性。这个部分内容非常简单,而且非常容易掌握。相信你也更愿意学习这个部分,毕竟他可以让你最直观的感受到前端的魅…

bagging算法_集成算法——三个“臭皮匠”级算法优于一个“诸葛亮”级算法

最近在打算法竞赛的时候用到了集成算法,效果还不错,索性就总结了一篇集成算法的文章,希望能帮到正在转行的数据分析师们。集成算法核心思想集成算法的核心思想是通过构建并结合多个学习器来完成学习任务,也就是通俗意义上的三个“…

计算机u盘驱动坏了如何的修复,U盘识别不了,小编教你U盘识别不了怎么修复

最近收到一个用户的提问,他说新买了了一个U盘,用了没几天,就发现电脑识别不了U盘。不像是U盘坏了,相信用过u盘的朋友遇到过U盘无法识别的情况吧,对于怎么解决这个问题,每个人都各有说辞,各种方案…

python读取html_从零开始的Python爬虫教程(一):获取HTML文档

前言:在上一节从零开始的Python爬虫教程(零):粗识HTML结构中,粗略给大家介绍了一下HTML文档,是为了在接下来的教程中让大家更容易理解和掌握。在接下来的教程中,需要大家提前安装python3.x版本,…

cmd长ping记录日志和时间_四个网络命令ping、arp、tracert、route的详细用法

网络相关的从业人员,都需要面对检测和解决网络故障的各种问题,实际案例中因为网络导致的故障也是最多的,今天我们和大家一起来学习一下解决网络故障时使用最多的四个网络命令。希望对大家以后的实际工作中的故障排除起到作用。1、Ping命令的用…

计算机d盘给c盘,win10 c盘与d盘都是主分区如何将d盘空间分给c盘

在安装win10系统的时候,用户都喜欢将硬盘分为多个主分区盘符,可是在使用过程中,发现win10系统中c盘空间越来越小,因此就想要将d盘空间分一些给c盘,那么win10系统c盘与d盘都是主分区时如何将d盘空间分给c盘呢&#xff1…

大学计算机用的笔记本,推荐一款大学生用笔记本电脑

现在的大学生,基本上都会购买一台适合适合自己的电脑。但是市面上那么多品牌,要怎么选择呢?下面是小编整理的详细内容,一起来看看吧!大学生用笔记本电脑推荐一、惠普ENVY 13这款惠普笔记本电脑只有13英寸,外…

数字图像处理技术详解程序_大学专业详解系列135——数字媒体技术(工学学士)...

数字媒体技术(工学学士)毕业生应具备的知识和能力(1)系统掌握数字媒体技术专业的基本理论、基础知识和基本技能;(2)掌握数字影视技术、数字影视制作技术的理论与方法,能熟练运用拍摄、编辑、特效制作等技巧创作数字影视作品;(3)掌握网络传播的…

乐高收割机器人_乐高圣诞45002作品来啦!——驯鹿拉雪橇、圣诞树、圣诞棒棒糖...

圣诞节快乐圣诞系列作品第五弹来袭大家好我是zfeng老师,今天我们继续来圣诞节系列作品吧!有粉丝朋友留言说希望出一起用百变工程系列积木搭建的圣诞主题作品,今天它来了,wedo、ev3的作品也已经安排接下来会陆续更新。闲话不多说啦…

w7系统关闭打印服务器,w7打印后台处理程序服务总是自动停止如何解决【照片】...

今天我要向您介绍的是,此w7打印后台处理程序服务始终会自动停止. 怎么解决呢?如何解决此问题,我将向您介绍具体的解决方案.计算机系统推荐下载: 雨林木风win7系统下载具体解决方案:1. 打印机服务启动设置开始打印服务要启动和查看打印服务&am…

域服务器怎么修改管理员密码,域服务器更改客户端管理员的密码

域服务器更改客户端管理员的密码 内容精选换一换管理员应定期修改Kerberos管理员“kadmin”的密码,以提升系统运维安全性。修改此用户密码将同步修改OMS Kerberos管理员密码。已在集群内的任一节点安装了客户端,并获取此节点IP地址。cd /opt/hadoopclien…

.classpath文件有什么用_干货分享:Windows目录结构剖析,C盘目录常见文件夹都有什么用?...

我们天天和文件夹打交道,但是有好多的碍眼的文件夹我们能不能删除呢,来看看今天的文章。先问一个问题,你对你电脑的文件系统了解多少?很多人只管用,但是有些时候,想要自己清理一下文件的时候,不…

手机型号云服务器,手机型号查询接口

手机型号查询接口 内容精选换一换通过调用云手机服务提供的接口,您可以完整地使用云手机的所有功能。例如查询云手机列表、重启云手机、为云手机推送文件。华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问…

python counter_教你Python的collections.Counter类型

collections.Counter 类型可以用来给可散列的对象计数,或者是当成多重集合来使用 —— 多重集合就是集合里的元素可以出现多次1。collections.Counter 类型类似于其它编程语言中的 bags 或者 multisets2。(1)基本用法counter collections.Counter([生物, 印记, 考古…

华为云classroom应用_华为任正非:将来所有应用都会长在云土地上,但现在还不是...

IT之家1月1日消息 昨日,华为心声社区公开了任正非 11 月 4 日在企业业务及云业务汇报会上的讲话。任正非表示,将来所有应用都会长在云土地上,但现在还不是,如何建成 “黑土地”是华为努力的任务,应一步一步来。IT之家了…

java不同进程的相互唤醒_Java线程生命周期与状态切换

前提最近有点懒散,没什么比较有深度的产出。刚好想重新研读一下JUC线程池的源码实现,在此之前先深入了解一下Java中的线程实现,包括线程的生命周期、状态切换以及线程的上下文切换等等。编写本文的时候,使用的JDK版本是11。Java线…

32查运行内存的map文件_linux内存管理

概念先行先理解内存管理中的几个概念:内存,主存,缓存,外存,虚拟内存,物理内存,虚拟地址,物理地址外存:计算机的外部存储,比如硬盘(机械硬盘、固态硬盘、混合硬盘)&#x…

react usecontext_鬼才!我居然把 Vue3 的原理用到了 React 上?

前言vue-next是Vue3的源码仓库,Vue3采用lerna做package的划分,而响应式能力vue/reactivity被划分到了单独的一个package中。如果我们想把它集成到React中,可行吗?来试一试吧。使用示例话不多说,先看看怎么用的解解馋吧…