硬件构造语言

py-hcl的Python项目详细描述


盐酸吡咯

Build StatuscodecovPyPI

PyHCL是一种类似于Chisel的硬件构造语言,但它更轻量级,使用起来更轻松。 PyHCL作为一种嵌入Python中的新型硬件构造框架,它支持面向对象、函数式编程、面向对象、面向对象、面向对象、面向对象、面向对象、面向对象、面向对象、面向对象、面向对象的函数式编程等, 以及动态类型化对象。在

PyHCL的目标是灵活地使用相同的设计方法为异构计算系统提供完整的设计和验证工具流。在

PyHCL由FIRRTL驱动,这是数字电路设计的中间表示。用FIRRTL 编译器框架下,PyHCL生成的电路可以编译成广泛使用的HDL Verilog。在

入门

安装PyHCL

$ pip install py-hcl

编写全加器

PyHCL只使用简单的Python语法定义模块,如下所示:

^{pr2}$

编译为FIRRTL

通过调用compile_to_firrtl编译模块:

compile_to_firrtl(FullAdder,'full_adder.fir')

将生成以下FIRRTL代码:

circuit FullAdder :
  module FullAdder :
    input clock : Clock
    input reset : UInt<1>
    input FullAdder_io_a : UInt<1>
    input FullAdder_io_b : UInt<1>
    input FullAdder_io_cin : UInt<1>
    output FullAdder_io_sum : UInt<1>
    output FullAdder_io_cout : UInt<1>

    node _T_0 = xor(FullAdder_io_a, FullAdder_io_b)
    node _T_1 = xor(_T_0, FullAdder_io_cin)
    FullAdder_io_sum <= _T_1
    node _T_2 = and(FullAdder_io_a, FullAdder_io_b)
    node _T_3 = and(FullAdder_io_b, FullAdder_io_cin)
    node _T_4 = or(_T_2, _T_3)
    node _T_5 = and(FullAdder_io_a, FullAdder_io_cin)
    node _T_6 = or(_T_4, _T_5)
    FullAdder_io_cout <= _T_6

编译到Verilog

在生成FIRRTL时,PyHCL的工作就完成了。要进一步编译到Verilog,需要FIRRTL compiler framework

$ firrtl -i full_adder.fir

然后生成FullAdder.v

moduleFullAdder(inputclock,inputreset,inputFullAdder_io_a,inputFullAdder_io_b,inputFullAdder_io_cin,outputFullAdder_io_sum,outputFullAdder_io_cout);wire_T_0;wire_T_2;wire_T_3;wire_T_4;wire_T_5;assign_T_0=FullAdder_io_a^FullAdder_io_b;assign_T_2=FullAdder_io_a&FullAdder_io_b;assign_T_3=FullAdder_io_b&FullAdder_io_cin;assign_T_4=_T_2|_T_3;assign_T_5=FullAdder_io_a&FullAdder_io_cin;assignFullAdder_io_sum=_T_0^FullAdder_io_cin;assignFullAdder_io_cout=_T_4|_T_5;endmodule

特点

  • 支持多种数据类型:UIntSIntVectorBundleClockMemory,以及它们之间的随意组合。在
  • 支持面向对象的继承,可以通过编写较少的代码来组合模块。在
  • 支持一组方便的操作,如UInts、SInts、Vectors和{}s的加法
  • 使用宿主语言Python的语法功能支持变量的参数化,例如位宽度。在

托多

  • []支持更多操作
  • []PyHCL的验证设施

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用数组的java bubblesort alg   java如何比较和分组ArrayList对象   java Spring批处理问题:“将远程目录同步到本地目录时出现问题”   java Tapestry重写验证器   java如何在包装类中重写方法?   java有多少种类型可以有一个由Autobox元素分配的变量?   jsp如何使用Java以CSV格式导出数据?   当条件被叠加时,如何在Java中中断“while”循环   java Selenium webdriver无法在模式对话框中找到元素   java如何通过HTMLUnit单击锚来下载ZIP文件   java如何从另一个类调用抽象内部类的方法?   @Transactional内部的java无状态会话   java默认情况下maven pmd插件使用哪些规则集?   JavaEclipse插件/RCP:通过处理程序显示菜单   java测试IllegalArgumentException未按预期捕获   java在jsp(Spring MVC)中按下后退按钮后如何保持注销状态?   nginx背后的javaweb服务   java BoofCV运动结构(Sfm)示例