时间问题:模拟(iverilog,gtkwave)工作,硬件(yosys)没有

时间:2017-05-20 21:46:46

标签: yosys

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

我有一个奇怪的问题:当我使用iverilog + GTKWave模拟我的设计时,接缝效果很好。但是硬件实现不起作用。

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

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

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

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

克里斯托夫

1 个答案:

答案 0 :(得分: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;

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