本发明涉及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等工具进行测试分析。

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

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

  1. python基于什么语言-一种基于Python语言的EDA开发平台及其使用方法与流程

    本发明涉及EDA开发的技术领域,尤其是指一种基于Python语言的EDA开发平台及其使用方法. 背景技术: 目前,主流的EDA设计语言Verilog HDL能实现完整的芯片硬件逻辑电路开发,但是其代码 ...

  2. android 绘画笔迹回放_一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置与流程...

    本发明涉及笔迹显示领域,更具体地,涉及一种基于可缩放矢量图形的安卓平台笔迹回放方法及装置. 背景技术: 智能移动设备平台上的回放技术已遍布许多安卓(Android)软件中,比如:字帖类软件,画图类软件 ...

  3. python登录系统账号检测_一种基于python的惠普打印机默认用户名密码检测方法与流程...

    本发明涉及打印机检测技术领域,特别是一种基于python的惠普打印机默认用户名密码检测方法. 背景技术: 网络打印机是当前各大中小型企业正常办公比不可少的办公网络设备,但对于大中型企业而言,不同部门或 ...

  4. python应用如何实现升级_一种基于Python实现BMC批量升级的方法与流程

    本发明涉及BMC批量升级,尤其涉及一种基于Python实现BMC批量升级的方法. 背景技术: 随着现代服务器主板技术的发展,主板设计形态复杂多变.无论是设计成本还是后期使用过程中的维护成本都很高.如何 ...

  5. 语音识别维特比解码_一种基于维特比算法的花洒语音识别系统及方法与流程

    本发明涉及语音识别技术领域,具体涉及一种基于维特比算法的花洒语音识别系统及方法. 背景技术: 随着生活水平的提高和住房条件的改善,很多家庭都安装了沐浴设施,花洒是其中最常见的淋浴装置.目前花洒产品多为 ...

  6. java头像交互式差分演变_一种基于交互式差分进化计算的用户知识需求获取方法与流程...

    本发明属于知识服务领域,具体涉及一种基于交互式差分进化计算的用户知识需求获取方法. 背景技术: 在多数企业拥有庞大的知识数量和优质的知识资源的情况下,如何利用推送系统将知识主动推送给设计人员以提高企业 ...

  7. bim 模型web页面展示_一种基于BIM模型的Web端轻量化展示方法与流程

    本发明涉及基坑结构模型技术领域,尤其涉及一种基于bim模型的web端轻量化展示方法. 背景技术: 建筑信息模型(buildinginformationmodeling,bim)技术在土木工程领域快速推 ...

  8. 手机室内地磁定位软件_一种基于手机地磁和场景图像的室内定位方法与流程

    本发明属于室内定位领域,具体涉及一种利用地磁和场景图像搭建地图,并用卷积神经网络提取出位置特征,以粒子滤波算法进行动态定位的方法. 背景技术: 室内定位技术在现在的提高我们的日常生活便利中起着非常重大 ...

  9. python鱼眼图像识别_一种基于鱼眼摄像头的人脸识别锁以及识别方法与流程

    本发明涉及人脸识别领域,特别涉及一种基于鱼眼摄像头的人脸识别锁. 背景技术: 人脸识别具有用在门锁上存在一些不足.例如,门锁一般装在门上,其高度在安装时已经固定,针对不同身高的用户来说可能造成人脸图像 ...

最新文章

  1. 游戏开发者需要注意的4个内存使用问题
  2. SAP Cloud for Customer和Hybris Commerce的session保护机制
  3. 随机游走 Random Walk
  4. mysql的连接名是哪个文件_mysql连接名是什么
  5. 机器学习朴素贝叶斯算法_机器学习中的朴素贝叶斯算法
  6. 1218 鼠标样式 cursor
  7. 【分布式缓存系列】Redis实现分布式锁的正确姿势
  8. c# dynamic动态类型和匿名类
  9. Stanford机器学习---第九讲. 聚类
  10. linux中搭建git私有服务器
  11. ubuntu自带截图工具
  12. 验证是否精通Redis,从这八个问题开始
  13. 用linux运行vasp,科学网—VASP使用 - 李继存的博文
  14. ubuntu svn命令
  15. 油猴插件入门2之简单悬浮界面
  16. 使用C#创建快捷方式
  17. 逻辑清晰四个实用原则(金字塔原理)
  18. 推荐一款护眼的软件——f.lux。它可以随着时间,自己调节色温
  19. 京东安卓客户端values文件夹
  20. Scoks5 一键搭建脚本,解决nolanjdc被限制IP

热门文章

  1. python fine函数_python find()函数
  2. wpfdiagram 学习 教学_开启双自主学习模式 助力学生生命成长——长清湖实验学校开展“双自主合作学习”教学模式...
  3. Spring源码:AOP(1)
  4. 表头大小设置_Excel技巧:单线表头及多线表头的制作方法
  5. ios开发读取剪切板的内容_为你找到3款Mac平台好用的剪切板工具,你值得拥有!...
  6. pjsip php,VoIP应用在Ubuntu 14.04下编译FFmpeg libX264及PJSIP
  7. Quadratic equation(二次剩余)2019牛客多校第九场
  8. 【阿里妈妈营销科学系列】开篇:C.M.O——“人群.渠道.机会”营销分析导论
  9. 2013二级java真题_2013年计算机二级JAVA第八套模拟试题及答案详解
  10. sudo vi ~/etc/profile 报错E212:Can't open file for writing