本发明涉及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. python椭圆形骨料_一种基于python再生混凝土三维随机球形骨料模型的构建方法与流程...

    本发明涉及建筑技术领域,尤其涉一种基于python再生混凝土三维随机球形骨料模型的构建方法. 背景技术: 再生混凝土是指利用再生粗骨料部分或者全部代替天然骨料配置而成的混凝土,再生混凝土技术的开发和利 ...

  3. python 生成列向量_python_mmdt:一种基于敏感哈希生成特征向量的python库(一)

    概述 python_mmdt是一种基于敏感哈希的特征向量生成工具.核心算法使用C实现,提高程序执行效率.同时使用python进行封装,方便研究人员使用. 本篇幅主要介绍涉及的相关基本内容与使用,相关内 ...

  4. python检索论文_一种基于Python的音乐检索方法的研究

    应用技术 0 前言 最近两年,人们对于流行音乐的追求与需求量日益增 加,但如何保证用户能在不知歌名只知歌词的情况下,完成 自己的全方面多种类的听歌需求呢?于是,电脑工程师就推 出了"听歌识曲 ...

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

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

  6. ts20芯片c语言例程,种基于C语言的DSP程序通用固化方法.PDF

    种基于C语言的DSP程序通用固化方法.PDF 第38卷 第3期(总第 149期) 火控雷达技术 Vo1.38No.3(Serse148) 2009年9月 FireControlRadarTechnol ...

  7. upfst是什么函数C语言,一种基于KF和STUPF组合滤波的SINS大方位失准角初始对准方法技术...

    本发明专利技术公开了一种基于KF和STUPF组合滤波的SINS大方位失准角初始对准方法,将大失准角下非线性初始对准滤波模型分解为线性与非线性两部分,建立了线性滤波模型离散化的状态方程和量测方程,采用卡 ...

  8. 激光雷达角点检测 c语言,一种基于事件帧的角点检测方法与流程

    本发明属于图像处理领域,用于解决基于事件相机的SLAM项目的角点检测. 背景技术: 在过去几十年里,由于计算机视觉算法的研究与发展,人们对机器人感知的兴趣也日益增加.这种传统相机能够捕获相机周围环境的 ...

  9. python测试代码运行时间_10种检测Python程序运行时间、CPU和内存占用的方法

    在运行复杂的Python程序时,执行时间会很长,这时也许想提高程序的执行效率.但该怎么做呢? 首先,要有个工具能够检测代码中的瓶颈,例如,找到哪一部分执行时间比较长.接着,就针对这一部分进行优化. 同 ...

最新文章

  1. 阿里云Redis多线程性能提升思路解析
  2. 如何一键部署php应用,我们怎样来使用宝塔面板一键部署安装博客程序ZBlogPHP
  3. 第二章 数据结构(二)
  4. php创建压缩文件 保存路径,通过php生成zip压缩文件,支持文件和压缩包路径查找...
  5. 笔记-项目质量管理-质量保证和质量控制
  6. 《王者荣耀》主策划Xavier分享腾讯游戏10年在职经历
  7. md3600i存储服务器连接 iscsi+multipath配置
  8. 使用 header 头下载文件
  9. Sonar-project.properties配置
  10. 乘方取模计算(模幂计算)
  11. 【TCP/IP】TCP的三次握手和四次挥手
  12. 【Oracle】开、关、删归档日志(archivelog)
  13. **踩坑之通用Mapper中 Mapper.selectByExample(example)**的返回
  14. linux多个svn仓库权限管理,svn建立仓库而且设置用户的权限
  15. HTML5期末大作业:我的家乡网站设计5
  16. 微型计算机上的tab作用,TAB键有什么用处
  17. 知识点滴 - 大麦、小麦、燕麦和荞麦的区别
  18. 数独大师级技巧_数独游戏技巧(图解)
  19. GSM+GPRS通信模块SIM800C介绍
  20. 简单的创建app id 的流程

热门文章

  1. HDU 2149.Public Sale-巴什博奕
  2. 技术走向管理一些思考(1)-性格特质和自我管理
  3. ZLComboBox自定义控件开发详解
  4. VirtualBox Linux Samba 设置
  5. git版本控制工具(二)----本地版本库的常用操作
  6. WPF窗体置于桌面最底层
  7. 洛谷:P1901 发射站
  8. javaScript基本功001
  9. 正则判断 手机邮箱的正确格式
  10. VMWare虚拟机迁移时,打开后提示主机不支持 CPUID 错误