用python构造verilog hdl源代码的库

veriloggen的Python项目详细描述


veriloggen

Build Status

用python构建verilog hdl源代码的库

版权所有2015,Shinya Takamaeda Yamazaki和撰稿人

许可证

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”,您可以看到模拟结果的波形。

waveform.png

波形.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)

请参阅示例和测试目录中的许多示例。

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

推荐PyPI第三方库


热门话题
java基于Maven结果构建不同的Docker映像(与Jenkins一起)   java为什么在捕获异常时顺序很重要?   java如何创建或添加文本编辑器来使用swing输入数学方程?   构建/编译颤振应用程序时的java问题   java如何在调用方中返回数据之前等待JavaFX服务完成?   java如何将文件而不仅仅是文本发送到JMS队列?   c#将StringBuilder#AppendFormat转换为java   web应用程序中的java授权   java找不到元素:通过POM执行代码时出错,通过单个main()程序执行时,同一定位器工作正常   从Java运行带有自定义模块导入的Python脚本   多线程Java堆内存使用率波动   使用Java在MongoDB中进行动态聚合   unicode UTF8到Java中的EBCDIC   java项目不会在Android Studio中运行