社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python编写FPGA以太网MAC(附源码下载方式)

EETOP • 6 年前 • 1125 次点击  

来源:EETOP   作者:ccpp123

前段时间玩Python的时候好奇, 既然Python这么强大, 那么能不能用Python来写Verilog呢?然后就上Bing搜了一下, 发现了MyHDL这个Python的扩展包, 似乎真的可以用Python来写Verilog, 已经有牛人把这个轮子造出来了。(注:其实EETOP很早已经有人在讨论MyHDL了,感兴趣的可以在论坛里面搜一下,推荐阅读:用Python设计芯片

略作了解后发现, MyHDL不是高层次综合, 它实际上是用Python的一些功能实现了一个Verilog仿真器, 能对用Python写的仿Verilog语言进行仿真, 并把Python代码翻译成Verilog. 省事的地方在于Python的简洁,以及可以很方便的看波形,还有可以和其它Python代码结合来进行仿真输入和查看仿真结果. 比如写图像处理的模块就很容易把图像输入进行仿真然后查看结果.

在Python MyHDL环境下仿真测试好的代码,翻译成Verilog后就可以直接拿去编译使用了,可以不需要再到ISE或Vivado中去仿真.也就是说MyHDL的仿真和翻译结果都是没有问题的.通过做这个项目俺已经能确认这一点. MyHDL的作者Jan Decaluwe是个设计芯片的工程师,用MyHDL设计过芯片, 所以在正确性上是没有问题的.

使用Python MyHDL有以下几点需要注意 :

实际上只有@always_seq, @always_comb这两个语句块可用, 虽然MyHDL也支持assign, 但在翻译成Verilog时似乎会出问题, 所以就不要写assign了,全部用@always_comb.

在用@always_comb时, 如果你在一个@always_comb块中既赋值了一个信号,又引用了这个信号,MyHDL会报错. 这个问题不大, 可以再写一个@always_comb块,把赋值和引用语句分到不同@always_comb块里就行了.

对a = {b,c,d}这样的信号拼接支持的不好,虽然有个连接信号函数支持这个,但只支持仿真,翻译Verilog会出错.所以这样的信号拼接似乎也只能拆开来一个一个的写在@always_comb块里. 这也是用MyHDL要比Verilog麻烦的地方.

但总的来说Python MyHDL还是要比写Verilog省事一些的, 打算以后就用这个了,不再写Verilog了.

我尝试用MyHDL写了一个FPGA以太网MAC, 可以通过UDP协议向PC机传原始视频。

代码模块截图:


代码下载方式链接:http://bbs.eetop.cn/thread-765525-1-1.html

点击阅读原文下载代码


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/1hXAsKvxGh
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/21566
 
1125 次点击