0

我正在学习verilog,尝试在ice40LX1K 板(olimex ice40HX1K + VGA I/O 板)上制作VGA 世界(一个弹跳球)中的“hello world”。

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

奇怪的是,在硬件实现中,球是不动的......并且它的位置全为零(0,0),尽管verilog代码永远不应该将它设置在那里。看起来改变 xpos_ball 或 ypos_ball 的值实际上并没有改变这些值。(硬件问题?yosys 问题)?在iverilog 模拟中,球的位置确实会按预期发生变化。

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

有关如何解决此问题或此类问题的后续步骤的任何建议?我可以使用其他调试技巧吗?

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

克里斯托夫

4

1 回答 1

0

100 Mhz 时钟快吗?

是的。该设计适用于 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;

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

于 2017-05-21T12:01:57.427 回答