首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时序问题:模拟(iverilog,gtkwave)工作,硬件(yosys)不工作

时序问题:模拟(iverilog,gtkwave)工作,硬件(yosys)不工作
EN

Stack Overflow用户
提问于 2017-05-21 05:46:46
回答 1查看 335关注 0票数 0

我正在学习verilog,试图在ice40LX1K板(olimex ice40HX1K + VGA /O板)上创建VGA世界中的"hello world“(一个弹跳球)。

我有一个奇怪的问题:当我使用iverilog + GTKWave模拟我的设计时,它看起来工作得很好。但在硬件中的实现不起作用。

奇怪的是,在硬件实现中,球是不动的..并且它的位置都是零(0,0),尽管verilog代码永远不会把它设置在那里。看起来更改xpos_ball或ypos_ball的值实际上并不会更改这些值。(硬件问题?一个yosys问题)?在iverilog模拟中,球的位置确实如预期的那样改变。

我不知道这是不是我自己的verilog代码中的错误(因为我是新手,这是很有可能的),是yosys的问题,还是硬件的问题(速度问题,100 Mhz时钟太快了?)还是别的什么?

对于如何解决此问题,或此类问题的后续步骤,有什么建议吗?我还可以使用其他的调试技巧吗?

(编辑:链接到实际的verilog-代码被删除,因为不再相关)

克里斯托夫

EN

回答 1

Stack Overflow用户

发布于 2017-05-21 20:01:57

是100兆赫的时钟快吗?

是。该设计适用于39.67 MHz:

代码语言:javascript
复制
$ make vga_bounceball.rpt
icetime -d hx1k -mtr vga_bounceball.rpt vga_bounceball.asc
// Reading input .asc file..
// Reading 1k chipdb file..
// Creating timing netlist..
// Timing estimate: 25.21 ns (39.67 MHz)

编辑重新注释:

通过使用FF作为时钟分频器,您始终可以安全地将时钟除以2的幂:

代码语言:javascript
复制
input clk_100MHz;

reg clk_50MHz = 0; // initialization needed for simulation
reg clk_25MHz = 0;

always @(posedge clk_100MHz) clk_50MHz <= !clk_50MHz;
always @(posedge clk_50MHz) clk_25MHz <= !clk_25MHz;

(如果不通过时序分析确保预分频器本身可以在高频域中运行,则非2次方的预分频器并不总是安全的。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44091108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档