硬件构造语言
py-hcl的Python项目详细描述
盐酸吡咯
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
特点
- 支持多种数据类型:
UInt
,SInt
,Vector
,Bundle
,Clock
,Memory
,以及它们之间的随意组合。在 - 支持面向对象的继承,可以通过编写较少的代码来组合模块。在
- 支持一组方便的操作,如
UInt
s、SInt
s、Vector
s和{}s的加法 - 使用宿主语言Python的语法功能支持变量的参数化,例如位宽度。在
托多
- []支持更多操作
- []PyHCL的验证设施
- 项目
标签: