2013-05-15 57 views
-1

在以下代码中,我将存储按钮播放器1和播放器2的历史记录。代码编译没有错误,但有警告。我无法解决这些警告。我在这里发布代码。赛灵思中的意外警告

module game(clk50,red,green,blue,hsync,vsync, button,led); 

input [8:0] button; 
input clk50; 
output red; 
output green; 
output blue,led; 
output hsync; 
output vsync; 
// divide input clock by two, and use a global 
// clock buffer for the derived clock 
reg clk25_int; 
always @(posedge clk50) begin 
clk25_int <= ~clk25_int; 
end 
wire clk25; 
BUFG bufg_inst(clk25, clk25_int); 
wire [9:0] xpos; 
wire [9:0] ypos; 

Grid_Display Grid_Displayinst(clk25,xpos, ypos, red, green, blue, button,led); 

endmodule 

module Grid_Display(clk25,xpos,ypos,red,green,blue, button,led); 

input clk25; 
input [9:0] xpos;//responsible for current pixel display location 
input [9:0] ypos;// responsible for current display row 

input [8:0] button; 

//spartan 3 kit has 3-bits per pixel, so 2^3 means 8 colours can be selected. 

output red; // colour 1 
output green; // colour 2 
output blue; // colur 3 
output led; 

//reg tempRed,tempGreen,tempBlue, GridRed,GridGreen,GridBlue; 

reg player1,player2; 

reg [8:0] player1History=0,player2History=0; 


wire grid = ((xpos >= 4 && xpos <= 799 && ypos >= 160 && ypos <= 165) || 
       (xpos >= 4 && xpos <= 790 && ypos >= 310 && ypos <= 315) || 
       (xpos >= 200 && xpos <= 205 && ypos >= 0 && ypos <= 520) || 
       (xpos >= 440 && xpos <= 445 && ypos >= 0 && ypos <= 520)); 



always @(posedge clk25) 
begin 

    player1History= button^player2History; 
    player2History= button^player1History; 

    player1 = ((player1History[0] && (xpos >=50 && xpos<=150 && ypos >= 20 && ypos <=120)) || (player1History[1] && (xpos >=250 && xpos<=350 && ypos >= 20 && ypos <=120)) 
      || (player1History[2] && (xpos >=490 && xpos<=590 && ypos >= 20 && ypos <=120)) || (player1History[3] && (xpos >=50 && xpos<=150 && ypos >= 180 && ypos <=280)) 
      || (player1History[4] && (xpos >=250 && xpos<=350 && ypos >= 180 && ypos <=280)) || (player1History[5] && (xpos >=490 && xpos<=590 && ypos >= 180 && ypos <=280)) 
      || (player1History[6] && (xpos >=50 && xpos<=150 && ypos >= 330 && ypos <=430)) || (player1History[7] && (xpos >=250 && xpos<=350 && ypos >= 330 && ypos <=430)) 
      || (player1History[8] && (xpos >=490 && xpos<=590 && ypos >= 330 && ypos <=430))); 

    player2 = ((player2History[0] && (xpos >=50 && xpos<=150 && ypos >= 20 && ypos <=120)) || (player2History[1] && (xpos >=250 && xpos<=350 && ypos >= 20 && ypos <=120)) 
      || (player2History[2] && (xpos >=490 && xpos<=590 && ypos >= 20 && ypos <=120)) || (player2History[3] && (xpos >=50 && xpos<=150 && ypos >= 180 && ypos <=280)) 
      || (player2History[4] && (xpos >=250 && xpos<=350 && ypos >= 180 && ypos <=280)) || (player2History[5] && (xpos >=490 && xpos<=590 && ypos >= 180 && ypos <=280)) 
      || (player2History[6] && (xpos >=50 && xpos<=150 && ypos >= 330 && ypos <=430)) || (player2History[7] && (xpos >=250 && xpos<=350 && ypos >= 330 && ypos <=430)) 
      || (player2History[8] && (xpos >=490 && xpos<=590 && ypos >= 330 && ypos <=430))); 

end 

assign red = (grid || player1); 
assign green = (grid || player2); 
assign blue = (grid); 

endmodule 

如何解决这些警告?

WARNING:Xst:2211 - "grid.v" line 104: Instantiating black box module <dummyModule>. 
WARNING:Xst:1710 - FF/Latch <player2> (without init value) has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <player2History_0> has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <player2History_1> has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <player2History_2> has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <player2History_3> has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <player2History_4> has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <player2History_5> has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <player2History_6> has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <player2History_7> has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <player2History_8> has a constant value of 0 in block <Grid_Display>. This FF/Latch will be trimmed during the optimization process. 
WARNING:Xst:2036 - Inserting OBUF on port <led> driven by black box <dummyModule>. Possible simulation mismatch. 

问候

+0

-1为我们倾销大量的代码和编译器输出而没有显示你自己的公平努力。请将您的问题缩小为能够再现您问题的最小示例。是VETSMOD。 – Philippe

回答

5

所有你对FF /锁存微调基本上可以归结为问题是player2History总是0,因此它被优化掉了警告。

它看起来不应该总是为0,但它证明是真实的,因为您使用了错误类型的阻塞语句的一个有趣的副作用。

的问题是在你总是块以下两行:然后

always @(posedge clk25) begin 
player1History= button^player2History; 
player2History= button^player1History; 

你的逻辑计算是这样的:

  1. 在时间player2History(P2H)的开始是零。
  2. 在时钟的某个位置上,假设按钮不为零。此时p2h仍然为零,因此p1h = button^0仅表示p1h被赋予了按钮的值。
  3. 现在下面的语句是评估,你正在评估button^p1h,但由于我们刚分配p1h = button,你真的评估button^button,这是我们所知道的是始终为0
  4. 由于在这种情况下P2H是不可能的永远是非零的,拖鞋已从您的设计中删除。

你可能意思做的是使P1H和P2H 阻塞赋值,与<=运营商。当你使用非阻塞的时候,它意味着两个语句都是并行的,所以p1h和p2h都是对它们的旧值进行求值,而不是先计算第一行,然后在第二行使用这个结果。

理解阻塞和非阻塞语句之间的差异在verilog中非常重要,如果您不理解概念或何时使用它们,那么您应该寻求额外的培训资料。

+0

+1为烦恼阅读整个事情... :) – EML