我正在学习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-代码被删除,因为不再相关)
克里斯托夫
发布于 2017-05-21 20:01:57
是100兆赫的时钟快吗?
是。该设计适用于39.67 MHz:
$ 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的幂:
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次方的预分频器并不总是安全的。)
https://stackoverflow.com/questions/44091108
复制相似问题