用python构造verilog hdl源代码的库
veriloggen的Python项目详细描述
许可证
apache许可证2.0(http://www.apache.org/licenses/LICENSE-2.0)
出版物
如果你在研究中使用veriloggen,请引用我的论文 皮韦里洛。(veriloggen是在pyverilog上构建的。)
- shinya takamaeda yamazaki:pyverilog:基于python的硬件设计 Verilog HDL处理工具包,第11届国际研讨会 应用可重构计算(ARC 2015)(海报),课堂讲稿 《计算机科学》,第9040/2015卷,第451-460页,2015年4月。 Paper
@inproceedings{Takamaeda:2015:ARC:Pyverilog, title={Pyverilog: A Python-Based Hardware Design Processing Toolkit for Verilog HDL}, author={Takamaeda-Yamazaki, Shinya}, booktitle={Applied Reconfigurable Computing}, month={Apr}, year={2015}, pages={451-460}, volume={9040}, series={Lecture Notes in Computer Science}, publisher={Springer International Publishing}, doi={10.1007/978-3-319-16214-0_42}, url={http://dx.doi.org/10.1007/978-3-319-16214-0_42}, }
什么是veriloggen?
veriloggen是一个用于构建verilog hdl的开源库。 python中的源代码。
veriloggen不是行为合成(或高级合成)。 veriloggen提供了verilog hdl ast的轻量级抽象。你 可以很容易地通过 使用ast抽象和python的全部功能。
veriloggen不是为程序员设计硬件而设计的 直接的,但是提供了一个有效的抽象来开发 更有效的领域特定语言和工具。
为veriloggen做出贡献
veriloggen项目总是欢迎问题、错误报告、特性 提出建议,并提出请求 GitHub。
对于问题、错误报告和功能建议
请在github上的issue tracker上留下您的评论。
对于拉取请求
请检查“contributors.md”中提供pull的贡献者 请求。
veriloggen使用pytest进行集成测试。发送时 拉取请求,请包含pytest的测试示例。要编写 一个测试代码,请参阅“测试”中的现有测试示例 目录。
如果pull请求代码成功通过了所有测试,并且没有 明显的问题是,它将由main合并到develop分支 提交人。
安装
要求
- Python3:3.6或更高版本
- iCarus Verilog:10.1或更高版本
sudo apt install iverilog
- Pyverilog:1.1.4或更高版本
- Jinja2:2.10或更高版本
- numpy:1.14或更高版本
pip3 install pyverilog jinja2 numpy
可选安装
- pytest:3.2或更高版本
- pytest pythonpath:0.7或更高版本
在测试和 例子。
pip3 install pytest pytest-pythonpath
- Graphviz:2.38.0或更高版本
- pygraphviz:1.3.1或更高版本
这些是veriloggen图形可视化所必需的。数据流:
sudo apt install graphviz pip3 install pygraphviz
安装
安装veriloggen:
python3 setup.py install
在Docker上
DockerFile可用,因此您可以在Docker上尝试VerilogGen 主机平台上没有任何安装。
cd docker sudo docker build -t user/veriloggen . sudo docker run --name veriloggen -i -t user/veriloggen /bin/bash cd veriloggen/examples/led/ make
开始
您可以在“veriloggen/examples/”和 “veriloggen/测试”。
让我们从一个例子开始veriloggen。在中创建示例python脚本 Python如下。闪烁的led硬件是用python建模的。正常开放 根目录中的“hello_led.py”。
from__future__importabsolute_importfrom__future__importprint_functionimportsysimportosfromveriloggenimport*defmkLed():m=Module('blinkled')width=m.Parameter('WIDTH',8)clk=m.Input('CLK')rst=m.Input('RST')led=m.OutputReg('LED',width,initval=0)count=m.Reg('count',32,initval=0)seq=Seq(m,'seq',clk,rst)seq.If(count==1024-1)(count(0)).Else(count.inc())seq.If(count==1024-1)(led.inc())seq(Systask('display',"LED:%d count:%d",led,count))returnmdefmkTest():m=Module('test')# target instanceled=mkLed()uut=Submodule(m,led,name='uut')clk=uut['CLK']rst=uut['RST']simulation.setup_waveform(m,uut,m.get_vars())simulation.setup_clock(m,clk,hperiod=5)init=simulation.setup_reset(m,rst,m.make_reset(),period=100)init.add(Delay(1000*100),Systask('finish'),)returnmif__name__=='__main__':test=mkTest()verilog=test.to_verilog(filename='tmp.v')#verilog = test.to_verilog()print(verilog)sim=simulation.Simulator(test)rslt=sim.run()print(rslt)# sim.view_waveform()
运行脚本。
python3 hello_led.py
您将拥有一个完整的verilog hdl源代码,名为“tmp.v”,如下所示, 它是由源代码生成器生成的。
moduletest();localparamuut_WIDTH=8;reguut_CLK;reguut_RST;wire[uut_WIDTH-1:0]uut_LED;blinkleduut(.CLK(uut_CLK),.RST(uut_RST),.LED(uut_LED));initialbegin$dumpfile("uut.vcd");$dumpvars(0,uut,uut_CLK,uut_RST,uut_LED);endinitialbeginuut_CLK=0;foreverbegin#5uut_CLK=!uut_CLK;endendinitialbeginuut_RST=0;#100;uut_RST=1;#100;uut_RST=0;#100000;$finish;endendmodulemoduleblinkled#(parameterWIDTH=8)(inputCLK,inputRST,outputreg[WIDTH-1:0]LED);reg[32-1:0]count;always@(posedgeCLK)beginif(RST)begincount<=0;LED<=0;endelsebeginif(count==1023)begincount<=0;endelsebegincount<=count+1;endif(count==1023)beginLED<=LED+1;end$display("LED:%d count:%d",LED,count);endendendmodule
您还将在上看到生成的verilog代码的模拟结果 伊卡洛斯·韦里洛。
VCD info: dumpfile uut.vcd opened for output. LED: x count: x LED: x count: x LED: x count: x LED: x count: x LED: x count: x LED: x count: x LED: x count: x LED: x count: x LED: x count: x LED: x count: x LED: 0 count: 0 LED: 0 count: 1 LED: 0 count: 2 LED: 0 count: 3 LED: 0 count: 4 ... LED: 9 count: 777 LED: 9 count: 778 LED: 9 count: 779 LED: 9 count: 780 LED: 9 count: 781 LED: 9 count: 782 LED: 9 count: 783
如果安装了gtkwave并在中启用“sim.view_waveform()” “hello_led.py”,您可以看到模拟结果的波形。
波形.png
验证loggen扩展库
混合范式高级综合
- veriloggen.thread.thread:dma和 I/O控制
- veriloggen.thread.stream:基于数据流的高级合成 高性能流处理
常用摘要
- veriloggen.verilog:verilog hdl源代码合成和导入api
- veriloggen.simulation:通过verilog模拟器的模拟api
- veriloggen.seq:同步电路生成器(seq)
- veriloggen.fsm:有限状态机生成器(fsm)
请参阅示例和测试目录中的许多示例。