搜索
bottom↓
回复: 71

推荐开源 fpga 仿真工具:小巧的 iverilog 和使用 python 的 cocotb

  [复制链接]

出615入1076汤圆

发表于 2019-8-28 00:04:44 | 显示全部楼层 |阅读模式
本帖最后由 dukelec 于 2019-8-28 22:16 编辑

很多人想学 fpga,即使是由简单的流水灯开始学,但也经常学不下去。
我觉得,原因之一是:现有的 fpga ide 软件太复杂,动不动 10 几个 G 大小,过于复杂的开发环境给学者带来不小的阻力。

先简单为新手介绍下 verilog 的特点。(下面的 always 主要是指时钟驱动型的。)
学 fpga,最简单是学 verilog 语言(相对 vhdl),其实,也不复杂,跟 c 语言相比,多了并行的思想(每个 always 各自独立运行),和很多限制而已。
比如,我觉得最关键的几点:

1. 一个 reg 变量,可以被多个 always 读取,但只能被一个 always 赋值。
如果只写一个 always 就不会有限制,实现一些功能会简单很多,但一个 always 很大的话,生成的电路性能会很差,代码也不好维护,所以要尽可能小一点,模块化一些。

2. 在一个 always 中,赋值是下一次循环才生效,相比 c 有比较大区别:

  1. always @(posedge clk) begin
  2.     counter <= counter + 1; // 譬如本次自加前 counter 等于 5
  3.     data <= counter; // 自加后,给 data 赋值,赋的值依然是 5,即使颠倒这两条语句也没有区别
  4. end
复制代码


3. 但也不是说所有语句都可以调换顺序,譬如为同一个变量赋值,第二次赋值会覆盖第一次:
(常用此方式,输出一个 flag 脉冲)

  1. always @(posedge clk) begin
  2.     flag <= 0; // 默认赋值 0 (如果把此句放到尾部,那么 flag 将永远为 0)
  3.     if (a == b)
  4.         flag <= 1; // 当条件成立,改变 flag 的赋值为 1
  5. end
复制代码


其它的限制是,没法像 c 语言那样调用函数、for 循环遍历,很多情况都要很笨的写死。剩下其实跟 c 语言差不多。


## 下面介绍正题,先是单独使用 iverilog

可综合的 led 闪烁示例代码在 https://github.com/dukelec/cdpga ... ga_b/code/cdpga_bx/ 目录下的 cdpga_bx.v
单独 iverilog 测试代码在 https://github.com/dukelec/cdpga ... pga_bx/test_verilog 目录下的 cdpga_tb.v

cdpga_bx.v 的主要内容是:

  1. reg [7:0] counter;

  2. always @(posedge clk or negedge reset_n)
  3.     if (!reset_n) begin
  4.         counter <= 0;
  5.         tx_en <= 0;
  6.     end
  7.     else begin
  8.         counter <= counter + 1'b1;
  9.         if (counter >= 10) begin
  10.             counter <= 0;
  11.             tx_en <= !tx_en; // tx_en 接 led
  12.         end
  13.     end
复制代码


cdpga_tb.v 中比较关键的是最后面的:

  1. initial begin
  2.     $dumpfile("cdpga_bx.vcd"); // 把当前和子模块的所有数据波形保存到该文件中
  3.     $dumpvars();
  4. end
复制代码


最后两条命令进行仿真:
  1. cdpga_bx/test_verilog $ iverilog -o cdpga_bx cdpga_tb.v cdpga_pll_sim.v ../cdpga_bx.v
  2. cdpga_bx/test_verilog $ vvp cdpga_bx
  3. VCD info: dumpfile cdpga_bx.vcd opened for output.
  4.                20000 tx: 0, tx_en: 0
  5.                40000 tx: 1, tx_en: 0
  6.                60000 tx: 1, tx_en: 1
  7.                80000 tx: 1, tx_en: 0
  8.              2100000 tx: 1, tx_en: 1
复制代码

第一个命令是编译,跟 gcc 命令差不多,pll 可以忽略,因为示例代码有调用 pll,所以这里用个空的、假的代替,防止编译报错而已。
第二个命令是运行仿真,打印的 tx_en 数据是调用 $display 单独显示出来的,跟 printf 差不多。
仿真结束后,就可以使用开源的 GTKWave 工具查看生成的波形文件。
GTKWave 非常好用,你只要打开一次波形文件,接下来改了代码重新仿真生成新的波形文件后,只要点一下刷新按钮就可以了。

iverilog 要用 v10 以上版本。
GTKWave 的截图可以参考下面一节。


## 用 cocotb,使用 python 仿真

由于 verilog 不能像 c 那样调用函数,用来写 test bench 很麻烦,所以复杂的系统可以用 SystemVerilog 等更高阶的语言来写,
但是,依然没有更通用的 python 方便,譬如用 python 甚至可以很方便的实现图片和视频数据的仿真。

操作方法是先下载 cocotb:https://github.com/cocotb/cocotb
下载下来不用管它。

然后参考 https://github.com/dukelec/cdpga ... dpga_bx/test_python
建立一个 cdpga_bx_wrapper.v,目的是生成 cdpga_bx.vcd 波形文件。

然后最核心的 python 测试脚本 test_cdpga_bx.py,完整内容:
  1. import cocotb
  2. from cocotb.binary import BinaryValue
  3. from cocotb.triggers import RisingEdge, ReadOnly, Timer
  4. from cocotb.clock import Clock
  5. from cocotb.result import ReturnValue, TestFailure

  6. CLK_FREQ = 40000000
  7. CLK_PERIOD = 1000000000000 / CLK_FREQ


  8. @cocotb.test()
  9. def test_cdpga_bx(dut):
  10.     """
  11.     test_cdpga_bx
  12.     """
  13.     dut._log.info("test_cdpga_bx start.")
  14.     dut.rx = 0

  15.     cocotb.fork(Clock(dut.clk, CLK_PERIOD).start())
  16.     yield Timer(5000000) # wait reset
  17.    
  18.     dut._log.info("get tx: %d, tx_en: %d" % (dut.tx, dut.tx_en))
  19.     dut._log.info("set rx = 1")
  20.     dut.rx = 1;
  21.    
  22.     yield Timer(CLK_PERIOD)
  23.     dut._log.info("get tx: %d, tx_en: %d" % (dut.tx, dut.tx_en))
  24.     dut._log.info("set rx = 0")
  25.     dut.rx = 0;
  26.    
  27.     yield Timer(CLK_PERIOD * 6)
  28.     dut._log.info("get tx: %d, tx_en: %d" % (dut.tx, dut.tx_en))
  29.     dut._log.info("set rx = 1")
  30.     dut.rx = 1;
  31.    
  32.     yield Timer(5000000)
  33.     dut._log.info("test_cdpga_bx done.")
复制代码


然后是一个 makefile:
  1. CDCTL_HDL = $(PWD)/..
  2. VERILOG_SOURCES = $(PWD)/cdpga_bx_wrapper.v \
  3.                   $(PWD)/cdpga_pll_sim.v \
  4.                   $(CDCTL_HDL)/cdpga_bx.v

  5. TOPLEVEL = cdpga_bx_wrapper
  6. MODULE = test_cdpga_bx
  7. include $(COCOTB)/makefiles/Makefile.inc
  8. include $(COCOTB)/makefiles/Makefile.sim
复制代码


最后用一条命令就可以生成波形文件:
  1. $ COCOTB=/path/to/cocotb make
复制代码


同样是用 GTKWave 查看波形:


clk_i 和 clk_o 是接外部无源晶体的,内部是一个反向器,为了节省成本。具体细节可参考:http://blog.dukelec.com/crystal-input-to-fpga
关于 cocotb 具体用法请自行前往其项目专页查阅相关文档。
cocotb 调用的是标准的 verilog 仿真后台的 c 语言的 api 接口,理论上商业 ide 也是可以集成使用的,如果现在不支持,以后也可能会支持。
(cocotb 默認調用 iverilog 進行仿真。)

这几个工具应该都是可以跨平台的,只不过,做开发,linux 下最简单方便。
再次附上 linux 学习方法:https://www.amobbs.com/thread-5715819-1-1.html (1 楼)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-8-28 00:12:25 | 显示全部楼层
正好有块cpld的板子,翻出来玩玩。

出0入0汤圆

发表于 2019-8-28 00:23:40 | 显示全部楼层
不错不错。

出0入0汤圆

发表于 2019-8-28 01:04:09 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2019-8-28 06:13:42 来自手机 | 显示全部楼层
不错,谢谢

出0入17汤圆

发表于 2019-8-28 07:04:07 | 显示全部楼层
不错不错

出0入42汤圆

发表于 2019-8-28 07:08:03 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2019-8-28 07:57:01 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2019-8-28 08:14:48 | 显示全部楼层
http://blog.dukelec.com这是你的blog?

出0入4汤圆

发表于 2019-8-28 08:17:40 来自手机 | 显示全部楼层
非常不错,又找到一个捡起fpga的理由

出0入0汤圆

发表于 2019-8-28 08:30:42 | 显示全部楼层
学习了,很不错

出0入0汤圆

发表于 2019-8-28 08:39:39 | 显示全部楼层
fpga没有合适的项目,还真用不上。芯片现在不知贵不贵?

出0入22汤圆

发表于 2019-8-28 08:42:57 | 显示全部楼层
小白问一下,很多书上或者教程上都说 有if就要有else,有case就要有default,如果不写就容易综合出锁存器什么的,如果程序中实在没有else和default要干的事情,这个要怎么写?写个空的else??

我买了你的超小fpga开发板,做了个小东西,现在已经开卖了,确实不错

出0入25汤圆

发表于 2019-8-28 09:01:06 | 显示全部楼层
vermon 发表于 2019-8-28 08:17
非常不错,又找到一个捡起fpga的理由


这个组合只能用来学习verilog和仿真,,用FPGA还得装厂商的IDE吧

出0入4汤圆

发表于 2019-8-28 09:04:31 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2019-8-28 09:24:02 | 显示全部楼层
以前搞 FPGA 还没仿真过。看这个仿真有点意思。

出0入0汤圆

发表于 2019-8-28 10:29:51 | 显示全部楼层
好东西,可以仿真验证方便

出0入0汤圆

发表于 2019-8-28 11:20:25 | 显示全部楼层
文不对题,Verilog仿真而已,并不是对应FPGA,也不能直接FPGA实验。

还得用厂家IDE。

出615入1076汤圆

 楼主| 发表于 2019-8-28 11:42:42 | 显示全部楼层
本帖最后由 dukelec 于 2019-8-28 13:16 编辑
jiaowoxiaolu 发表于 2019-8-28 08:42
小白问一下,很多书上或者教程上都说 有if就要有else,有case就要有default,如果不写就容易综合出锁存器什 ...


不要想太复杂,譬如我最开始的例子 3,在最开始给 flag 赋默认值,跟加一个 else 是一样的,但我的方式更简单易读。
对于初学者,完全没必要去纠结这些,譬如书上说一个 FSM 状态机有 3 种以上的写法:1 段式、2 段式、3 段式等,
其实也不过是一楼开始的这一句:「一个 always 很大的话,生成的电路性能会很差,代码也不好维护,所以要尽可能小一点,模块化一些」,所谓的 FSM 不过是弄一个变量,判断是 1 干嘛,是 2 干嘛而已。
如果代码不多,一个 always 就可以,当然,其中有一些优化技巧,譬如:

  1. always @(posedge clk) begin
  2.     ....
  3.     if (a + b >= 1000) begin
  4.         ....
  5.     end
  6.     ....
  7. end
复制代码


一个时钟内,又要加两个数,又要比较结果,最大可以跑的主频 Fmax 可能会低很多,
如果分两步,Fmax 会提升很多。
功能上的区别是 ab 这个中间数据会慢一个时钟。

  1. always @(posedge clk) begin
  2.     ....
  3.     ab <= a + b;
  4.     if (ab >= 1000) begin
  5.         ....
  6.     end
  7.     ....
  8. end
复制代码


这些优化技巧和编程思想,需要你在项目中慢慢积累,在这之前,只要记住一楼提到的跟 c 的区别就可以了。

出615入1076汤圆

 楼主| 发表于 2019-8-28 11:53:04 | 显示全部楼层
sme 发表于 2019-8-28 11:20
文不对题,Verilog仿真而已,并不是对应FPGA,也不能直接FPGA实验。

还得用厂家IDE。 ...

我搞 fpga,流程是:

一边写 verilog 代码,一边用 cocotb 去测试写的对不对。
写完之后,再打开厂家 ide 工具,增加管脚配置、sdc 约束,只要综合的时序满足,烧到 fpga 就可以一次成功。

对于初学者,即使不用厂家 ide 工具,看到一楼最后一张图的最后一个方波信号,也知道接上 led 是会闪的吧(当然可能会闪很快,肉眼看不见)。

出615入1076汤圆

 楼主| 发表于 2019-8-28 11:55:04 | 显示全部楼层
four_zhg 发表于 2019-8-28 08:39
fpga没有合适的项目,还真用不上。芯片现在不知贵不贵?

lattice 的 ice40 系列片子,便宜的批量价 0.7 usd 左右。
国产的同等规格有 0.3 usd.

出615入1076汤圆

 楼主| 发表于 2019-8-28 11:58:23 | 显示全部楼层
XIVN1987 发表于 2019-8-28 09:01
这个组合只能用来学习verilog和仿真,,用FPGA还得装厂商的IDE吧

是的,见 20 楼描述。

其实跟我在 linux 下写 stm8 代码有点类似,写代码是在主系统用 eclipse,iar 安装在 windows 虚拟机中,只是用来编译。

出615入1076汤圆

 楼主| 发表于 2019-8-28 11:59:08 | 显示全部楼层
jjj 发表于 2019-8-28 08:14
http://blog.dukelec.com这是你的blog?

是的    

出0入0汤圆

发表于 2019-8-28 12:52:24 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2019-8-28 13:01:14 | 显示全部楼层

牛人呀

出0入0汤圆

发表于 2019-8-28 16:05:47 | 显示全部楼层
这样折腾有意思 PLD芯片的IDE是够大的,要求不高尽量选早期的,越新体积越大。怎么没人折腾一个精简版本

出0入0汤圆

发表于 2019-8-28 21:45:34 | 显示全部楼层
iverilog原来是这么用的。每次装ubuntu都会装这个软件

出615入1076汤圆

 楼主| 发表于 2019-8-28 22:20:12 | 显示全部楼层
本帖最后由 dukelec 于 2019-8-28 22:22 编辑
rifjft 发表于 2019-8-28 16:05
这样折腾有意思 PLD芯片的IDE是够大的,要求不高尽量选早期的,越新体积越大。怎么没人折腾一个精 ...


Lattice ice40 系列用的 ICEcube2 Linux 版本相對比較小,最新版安裝包 361MB.
操作示範:https://github.com/dukelec/cdpga/blob/master/cdpga_b/readme_zh.md

出0入0汤圆

发表于 2019-8-28 22:53:42 | 显示全部楼层
iverilog能力还是有限制的,只适合早期调调FIFO,学学Verilog语法,逻辑稍微一复杂结果就出不来了。而且GTKWAVE只能说勉强能用,同样是看波形,功能和Verdi这种专业EDA差距巨大。

出615入1076汤圆

 楼主| 发表于 2019-8-28 23:36:34 | 显示全部楼层
AlexYzhov 发表于 2019-8-28 22:53
iverilog能力还是有限制的,只适合早期调调FIFO,学学Verilog语法,逻辑稍微一复杂结果就出不来了。而且GTK ...

最开始用 v10 之前的版本问题比较多,后来用新版本,我做了几个项目,目前还没遇到问题。当然,项目也不是很大,差不多 ice40ul1k 几乎用满的样子。

商业仿真软件只用过 早期 Quartus 自带的、ModelSim 和 Active-HDL,感觉都比较麻烦,每次改了代码要点很多下鼠标才能看到新的波形。这还是已经用 tcl 命令批量操作的情况下。

当然,专业性而言,肯定是商业软件更优。

出0入0汤圆

发表于 2019-8-29 15:54:26 | 显示全部楼层
本帖最后由 givealittletime 于 2019-8-29 16:13 编辑
dukelec 发表于 2019-8-28 23:36
最开始用 v10 之前的版本问题比较多,后来用新版本,我做了几个项目,目前还没遇到问题。当然,项目也不 ...


如modelsim,tcl运行后,改代码后重新仿真,怎么可能还需要鼠标很多下??

只需:在tcl命令行运行的窗口下,上下左右键的上键按一下然后回车键,就出波形了,哪里还有鼠标什么事,接下来看细节什么的该用鼠标+键盘那谁家软件都免不掉。


再提一下:我自己的体会,该用windows的干活挣钱养家的还是多数,所以win下该用altera就就用quartus,该xilinx的就vivado,仿真用modelsim利用tcl脚本,边写代码边写工作日记、工作汇报、调试记录等用微软office,是大部分人的常态。

不管是win还是lnx,只要是小众的软件,那么自己玩玩可以,千万不要带到工作中去,一堆麻烦。单说office文档,内部、外部交流,ppt汇报,归档,你不用office也许能完事,但真的麻烦大了,一堆人都是用office你不用?格式怎么兼容?交给老板一个ppt让他出去忽悠,你说用什么linux,老板你学学吧很好学的,老板不骂你还给你开工资他是昏头了。

然后软件用小众的,出了问题找谁解决,搜索引擎都找不到答案,一个项目组那么多人就等着你一个人啃次憋肚的抠,谁受的了。

出0入4汤圆

发表于 2019-8-29 16:53:07 | 显示全部楼层
很喜欢看到 dukelec 的贴子,每次都是很高的质量!

出615入1076汤圆

 楼主| 发表于 2019-8-29 23:09:18 | 显示全部楼层
本帖最后由 dukelec 于 2019-8-29 23:37 编辑
givealittletime 发表于 2019-8-29 15:54
如modelsim,tcl运行后,改代码后重新仿真,怎么可能还需要鼠标很多下??

只需:在tcl命令行运行的窗口 ...


好吧,至少 Active-HDL 我曾经试了很久,刷新波形很麻烦。

altera 和 xilinx 等官方工具也是会用的,至少要用来综合,而且这些软件都是有 linux 版本的,我们的目光没必要局限在国内环境,而是应该向上看看,
上游都是 base 在 linux 的居多,而且这些工具基本上都是围绕 linux 开发出来,譬如你看这个帖子的标题:

现在win10版本的ISE14.7 居然安装一个Linux虚拟机跑的
https://www.amobbs.com/thread-5703037-1-1.html
(出处: amoBBS 阿莫电子论坛)

其它的国际大厂,用 linux 也非常多,譬如 google,我 5 年前曾经跟他们某些部门打过交道。

ppt 和 word 用 wps 兼容性还可以。工作日记、工作汇报、调试记录 我是用 开源的项目管理工具 redmine 在线操作(类似论坛发帖),可以很直观的看到各项目及子任务的进度条,还有邮件自动提示、通知等各种功能,很方便。
简单的文档我喜欢用 markdown 写,复杂的用 latex 写。这些文本格式方便用 git 管理版本。
如果是别人丢过来的 word 需要改写,那我就用 wps 或者 openoffice 之类。用 word 的人对格式不会有太高追求,如果有少量移位等问题没所谓。
(p.s. 同样版本和功能的 wps 软件,相对于 windows 版本,linux 版本没有任何广告。)
(反倒是,大型会议演讲时,见过好几次 windows 中途强制升级的情况,最后工作人员给演讲者换的 mac 电脑,ppt 兼容的很差。)

放眼全球,业界 linux 并不小众,截至目前,我还真没遇到搜索引擎都找不到答案的情况。
(linux 下的问题反而比较少,譬如 kicad 画板,很多 bug 是 windows 和 mac os 专有的,我曾经试同事的 windows 版本觉得比较卡,他电脑性能比我电脑强很多。)
(而且,我从来不用防毒软件和防火墙软件,根本就不担心勒索病毒和其它病毒。)

回到主题,用 python 写 test bench 效率很高, 商业 fpga ide 软件目前貌似做不到。

出0入0汤圆

发表于 2019-8-29 23:39:20 | 显示全部楼层
本帖最后由 givealittletime 于 2019-8-29 23:58 编辑

这个不需要争论的,因为这个分歧不是今天才有,当初不是有个姓王的名字那个字我不会念,把linux推崇得无与伦比,事实又如何。

我说的,是有个前提的,所有的讨论必须要有前提,离开前提的争论没意思。

我要用matlab,quartus,vivado,modelsim,mentor expedition,cadence allegro。。。这些都有lnx版本,都好用,也都用过;但还是被工作和生活打败。如果推lnx,那么得你说了算才行,公司是你的,你要求员工个个用lnx,你是项目主管你要求你的手下个个用lnx,那么都没问题。

广告这个不是问题,windows和office一般公司还是买得起的;用word的,工作上,应该对格式要求还是非常在意的,而不是你说的不会有太高追求,字体,字号,对齐,表格被后续改写的人给变掉了,那是不能接受的。格式统一是基本要求,一个文档转一圈回来了,内容可以变,格式绝对不可以变。

以latex为例,不知道坛子里会用、在用的有多少?自己会用,和同事/老板/甲方乙方会用的有多少,不是一回事,交互时用pdf或者打印纸质?我觉得就学习成本来讲,lnx要大于win,大学里搞搞学术可以,大部分糊口养家的人耗不起的。

以redmine为例,公司一个保密的要求,就干掉了所有的在线的文档存储方式,自己本地部署的话,网管有无这个能力还不知。

放眼全球这样的角度,我个人还达不到。lnx我只用于家里的老本本,lnx也很好用,不像以前各种驱动装不上,现在也进步很多很多,装了干啥用,就用来测试软件而不是用于开发。但是,单位的工作用机那是打死也不装lnx的。

家里七老八十的老人,玩win也很溜,还会做帐,帮人每月申报税务报表,这些国内的税务报表软件哪里会有lnx版本哦,什么金税、地税的好几个软件都要装,我看了很晕;再用word写个文档,excel登记个啥的,完全没问题,群众基础太好了windows。

最后,大家各取所需,生活不愁的尽可以按自己方式去玩,没毛病。微软内部也有linux系统,装linux系统的人往往也装个winne,或者vm、vbox不是吗。

出0入0汤圆

发表于 2019-8-30 08:37:28 | 显示全部楼层
Verilog在学校学了个皮毛

出0入8汤圆

发表于 2019-8-30 09:22:27 | 显示全部楼层
顶楼主,分享的都是实战方法。

出0入0汤圆

发表于 2019-8-31 03:45:37 来自手机 | 显示全部楼层
楼主分享经验很好,不过写得感觉不清晰,还不如讲下使用体验,具体办法留下链接就行,讲iverilog使用网上有很好的几篇

出615入1076汤圆

 楼主| 发表于 2019-8-31 14:17:53 | 显示全部楼层
本帖最后由 dukelec 于 2019-8-31 14:33 编辑
xycfwrj 发表于 2019-8-31 03:45
楼主分享经验很好,不过写得感觉不清晰,还不如讲下使用体验,具体办法留下链接就行,讲iverilog使用网上有 ...


我就随便写下刷刷积分而已,你批评的对。

其实本文重点是用 python 写 test bench,体验也有说:方便。(稳定性也很好,否则就不方便了)
之所以先介绍 iverilog 是因为 cocotb 默认使用 iverilog 仿真。

cocotb 的具体链接也是有给出的。
实际上,如果你会 python 的话,你自然就能联想到用 python 写 tb 的高效和便捷。
譬如,这个是 cdbus ip 的简单测试,需要计算 crc 啥的直接调用 python 的库,读写寄存器等都可以封装成函数,最爽是用了 20 行代码在总线上独立生成一帧 cdbus 数据:
https://github.com/dukelec/cdbus ... tests/test_cdbus.py

最后,如果你想开源一个项目,为了用户的方便,也应该优先使用开源软件,首先开源界用开源软件的人比较多,
其次,如果你开源给的工程是 quartus 的项目,别人用的是 xilinx 的片子,这样就很麻烦。
同理,stm32 的开源项目普遍使用 makefile 和 gcc 编译,也是同样的道理。

出0入0汤圆

发表于 2019-8-31 14:40:23 | 显示全部楼层
dukelec 发表于 2019-8-31 14:17
我就随便写下刷刷积分而已,你批评的对。

其实本文重点是用 python 写 test bench,体验也有说:方便。 ...

LZ, iverilog能从哪里下载?我打开他的主页要翻墙,然后里面有个FTP给下载,但是打不开

出615入1076汤圆

 楼主| 发表于 2019-8-31 14:55:19 | 显示全部楼层
本帖最后由 dukelec 于 2019-8-31 15:08 编辑
mangolu 发表于 2019-8-31 14:40
LZ, iverilog能从哪里下载?我打开他的主页要翻墙,然后里面有个FTP给下载,但是打不开 ...


你找的 ftp 那个是下载源码,在 windows 上编译很麻烦,所以官网有提到一个第三方可下载编译好的:http://bleyer.org/icarus/
gtkwave windows 版本编译好的: https://sourceforge.net/projects/gtkwave/files/
cocotb 按一楼链接下载源码。

如果是 linux,一条命令就安装好,譬如:apt-get install verilog gtkwave
如果是 gentoo,从源码下载、编译、安装也不过是一条命令:emerge iverilog gtkwave

出0入0汤圆

发表于 2019-8-31 15:00:29 | 显示全部楼层
dukelec 发表于 2019-8-31 14:55
你找的 ftp 那个是下载源码,在 windows 上编译很麻烦,所以官网有提到一个第三方可下载编译好的:http:/ ...

谢谢!目前只用win,linux以前只用过arch linux。

其他的软件包和代码等,你能否打包整理一下,这里基本上很多人都是用win吧?像他那个主页打开还要翻墙,太麻烦。

出0入0汤圆

发表于 2019-8-31 16:01:24 | 显示全部楼层
这种不针对具体型号的软件完成的工作包括哪些  厂家那种ide都很大很慢  这种是不是只跑代码仿真时序不综合到具体芯片具体布线用起来速度飞快

出615入1076汤圆

 楼主| 发表于 2019-8-31 16:19:52 | 显示全部楼层
huangqi412 发表于 2019-8-31 16:01
这种不针对具体型号的软件完成的工作包括哪些  厂家那种ide都很大很慢  这种是不是只跑代码仿真时序不综合 ...

是的,从构思到全部写好、仿真顺利通过后,最后再开厂商 IDE 综合出固件。

出100入101汤圆

发表于 2019-8-31 16:26:00 | 显示全部楼层
lz高手!

出0入0汤圆

发表于 2019-8-31 20:26:08 | 显示全部楼层
谢谢分享

出10入12汤圆

发表于 2019-9-2 01:52:59 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2019-9-10 11:41:38 | 显示全部楼层
dukelec 发表于 2019-8-28 11:55
lattice 的 ice40 系列片子,便宜的批量价 0.7 usd 左右。
国产的同等规格有 0.3 usd. ...

楼主,这个价格的ice401K是啥封装的,另外方便介绍下国产的哪家哪个型号能做到这个价格么,谢谢

出0入25汤圆

发表于 2019-9-30 09:26:00 | 显示全部楼层

找到一个cocotb的资料,,感兴趣的可以看下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入25汤圆

发表于 2019-9-30 09:32:43 | 显示全部楼层

求教下:我看cocotb的资料上说访问信号的值需要访问信号的value属性,即sig.value,或者使用“sig <= ...”,,而你的示例中直接使用“dut.rx = 0”,请问这两种使用方式有什么区别?cocotb的文档上也没有提“dut.rx = 0”这种用法啊,请问哪里有说明?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-9-30 10:39:56 | 显示全部楼层
谢谢分享   支持一下

出615入1076汤圆

 楼主| 发表于 2019-9-30 12:46:50 | 显示全部楼层
XIVN1987 发表于 2019-9-30 09:32
求教下:我看cocotb的资料上说访问信号的值需要访问信号的value属性,即sig.value,或者使用“sig  ...

<= 估計是爲了更像 verilog,我表示不喜歡,python 就應該有 python 的亞子

不清楚是我自己試出來的,還是老的文檔有這樣教

應該一樣,你不放心可以查查 cocotb 的代碼

出615入1076汤圆

 楼主| 发表于 2019-9-30 12:56:08 | 显示全部楼层
DepravedLucien 发表于 2019-9-10 11:41
楼主,这个价格的ice401K是啥封装的,另外方便介绍下国产的哪家哪个型号能做到这个价格么,谢谢 ...


iCE40UL 系列 36 腳的 bga, 0.4 mm pitch,具體你問代理,不同客戶、不同應用、不同的用量 能申請到的價格不同
國產 alta-gate 的:AG1280 AG1K, 我目前沒用過,軟件麻煩一些

出0入0汤圆

发表于 2019-10-8 08:45:33 | 显示全部楼层
dukelec 发表于 2019-9-30 12:56
iCE40UL 系列 36 腳的 bga, 0.4 mm pitch,具體你問代理,不同客戶、不同應用、不同的用量 能申請到的價 ...

好的,多谢   

出0入0汤圆

发表于 2019-10-8 13:53:59 | 显示全部楼层
dukelec 发表于 2019-8-29 23:09
好吧,至少 Active-HDL 我曾经试了很久,刷新波形很麻烦。

altera 和 xilinx 等官方工具也是会用的,至 ...

做开发,其实linux很方便,我现在就是画高速板时使用cadence(win),简单的板子用kicad(linux),写代码、记笔记啥的都是linux

出0入0汤圆

发表于 2019-10-13 23:15:54 | 显示全部楼层
cocotb仿真,有机会看看

出0入0汤圆

发表于 2019-11-15 15:17:33 | 显示全部楼层
mark一下,非常感谢

出0入228汤圆

发表于 2019-11-20 16:18:47 | 显示全部楼层
楼主的 PrinCube 好牛

出0入0汤圆

发表于 2019-11-26 14:19:30 | 显示全部楼层
好!很好!非常好!

出0入0汤圆

发表于 2019-11-26 14:32:20 | 显示全部楼层
推荐一个在线仿真  https://hdlbits.01xz.net/wiki/Iverilog

出0入0汤圆

发表于 2020-1-30 14:16:17 | 显示全部楼层
https://dornerworks.com/blog/ins ... cation-productivity   Install Cocotb on Windows 10 to Boost FPGA Verification Productivity
搜到个老外在WIN10下搭环境,还是要用到仿LINUX环境的软件,有人试试吗。

出0入0汤圆

发表于 2020-1-30 14:35:11 | 显示全部楼层
感谢分享,正好有空学一学,有块板子吃灰很久了。

出0入0汤圆

发表于 2020-2-7 21:01:27 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2020-2-14 19:34:02 来自手机 | 显示全部楼层
感谢,学习中

出20入0汤圆

发表于 2020-7-7 22:49:08 | 显示全部楼层
楼主资深linuxer啊

出215入118汤圆

发表于 2020-7-21 18:12:32 | 显示全部楼层
Windows下 Modelsim + GTKWave 或者 Debussy(Verdi前身) 也是不错的。前仿命令行调用Modelsim,生成的波形用GTKWave或者Debussy看。

出0入0汤圆

发表于 2020-7-22 08:58:03 | 显示全部楼层
最近看了下,添加波形文件可以直接在python里面完成吗?

出215入118汤圆

发表于 2020-7-27 12:06:07 | 显示全部楼层
liurangzhou 发表于 2020-7-22 08:58
最近看了下,添加波形文件可以直接在python里面完成吗?

波形文件的生成还是要写个verilog的wrapper。

出5入0汤圆

发表于 2022-2-20 23:10:07 来自手机 | 显示全部楼层
这个必须点赞

出100入312汤圆

发表于 2022-2-21 08:31:55 来自手机 | 显示全部楼层
学习,收藏

出0入4汤圆

发表于 2022-2-21 10:22:25 来自手机 | 显示全部楼层
能不能仿真xilinx带ip的代码

出615入1076汤圆

 楼主| 发表于 2022-2-21 17:07:58 | 显示全部楼层
本帖最后由 dukelec 于 2022-2-21 17:20 编辑
gwj221 发表于 2022-2-21 10:22
能不能仿真xilinx带ip的代码
(引用自70楼)


理論上是可以的,廠商自帶的 ip 應該都有提供 verilog 仿真模型,你在安裝目錄找應該能找到
如果嫌廠商提供的仿真模型文件太亂,你也可以自己在網上找第三方的模型,或者自己寫模型,譬如我上面提到的 pll ip,就是自己寫的一個超簡單的版本
如果廠商 ip 太複雜且很多,那麼還是用原廠推薦的方式做仿真,開源的只用來仿真局部模塊

順便補充一下:
這幾年研究 ASIC 領域,發現芯片行業 EDA 軟件,主流的商業軟件都是 Linux only 的,基本沒有支持 windows 的軟件。

再補充一下,用此文的方法做仿真,可以寫很多測試用例,每次修改代碼之後,可以跑一個腳本把所有測試用例都過一遍,譬如:
https://github.com/dukelec/cdbus_ip/tree/master/tests
而單個測試用例寫起來也比較簡單。


順便更新一下一樓的测试脚本 test_cdpga_bx.py 內容,兩年前就升級改用 async/await 的寫法,取代 yield 了:

  1. import cocotb
  2. from cocotb.binary import BinaryValue
  3. from cocotb.triggers import RisingEdge, ReadOnly, Timer
  4. from cocotb.clock import Clock

  5. CLK_FREQ = 40000000
  6. CLK_PERIOD = 1000000000000 / CLK_FREQ


  7. @cocotb.test()
  8. async def test_cdpga_bx(dut):
  9.     """
  10.     test_cdpga_bx
  11.     """
  12.     dut._log.info("test_cdpga_bx start.")
  13.     dut.rx = 0

  14.     cocotb.fork(Clock(dut.clk, CLK_PERIOD).start())
  15.     await Timer(5000000) # wait reset
  16.    
  17.    
  18.     dut._log.info("get tx: %d, tx_en: %d" % (dut.tx, dut.tx_en))
  19.     dut._log.info("set rx = 1")
  20.     dut.rx = 1;
  21.    
  22.     await Timer(CLK_PERIOD)
  23.     dut._log.info("get tx: %d, tx_en: %d" % (dut.tx, dut.tx_en))
  24.     dut._log.info("set rx = 0")
  25.     dut.rx = 0;
  26.    
  27.     await Timer(CLK_PERIOD * 6)
  28.     dut._log.info("get tx: %d, tx_en: %d" % (dut.tx, dut.tx_en))
  29.     dut._log.info("set rx = 1")
  30.     dut.rx = 1;
  31.    
  32.     await Timer(5000000)
  33.     dut._log.info("test_cdpga_bx done.")
复制代码

出0入79汤圆

发表于 2022-2-21 19:07:34 | 显示全部楼层
像我这样的小白,还是安心的用 Modelsim SE吧。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 03:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表