2017-12-04 4 views
-2

Ich wollte diese Codierung synthetisieren, aber es sagt mir, dass es einen Fehler bei "reg button_alt, button_raise;". Gibt es jemanden, der weiß, welche Fehler ich in der Codierung habe? Vielen Dank für Ihre Hilfe. Wir machen Projekt mit Nexys 4, wir sind in der Lage, die Codierung zu simulieren, aber sind nicht in der Lage, es zu synthetisieren, so dass wir nicht in der Lage sind, mit den nächsten Schritten fortzufahren. Hoffe jemand kann uns helfen.Codierungsfehler für vivado Projekt

`timescale 1ns/1ps 

module Player (input clk, input rst,input button, input [29:0] set, input button_p1, input button_p2, output [3:0]oscore1, output [3:0]oscore2, output LED_ON, output answer, output [3:0]seg1, output [3:0]seg2) 
    reg button_old, button_raise; 
    reg number; 
    reg [3:0] Score_P1, Score_P2; 
    wire [3:0] Score_P1, Score_P2; 
    reg [6:0] sevseg; 
    wire answer; 
    reg Clk_10000; 
    reg [31:0] count; 
    reg [3:0] digit; 
    output [3:0] digit; 

    always @(posedge clk or posedge rst) begin 
     // detect rising edge 
     button_old = 0; 
     button = 0; 
     button_raise =1'b0; 
     if (button_old != button && button == 1'b1) 
      button_raise <= 1'b1 
     button_old <= button; 
     // increment number 
     if(button_raise == 1b'1) 
     begin 
      Score_P1 = 4'b0000; 
      Score_P2 =4'b0000; 
      if(~rst) number <= 0; 
      else if(button_p1 && !button_p2 && answer==1'b1) 
         Score_P1 <= (Score_P1 + 1); 
      else if(button_p2 && !button_p1 && answer==1'b1) 
         Score_P2 <= (Score_P2 + 1); 
      else if(button_p1 && button_p2 && answer==1'b1 || answer==1'b0) 
         LED_ON [0]; 
      else LED_ON [7]; 
     end 
     end 
     end else 
     button <=0; 
     button_old <=0; 
     button_raise <=0; 

    end 

    assign oscore1= Score_P1; 
    assign oscore2= Score_P2; 

    always @ (rd_ptr) begin 
    set = setlist[rd_ptr]; 
    assign answer = set [totlen-1]; 
    case (digit) 
    4'b1000: sevseg = set [27:21]; 
    4'b0100: sevseg = set [20:14]; 
    4'b0010: sevseg = set [13:7]; 
    4'b0001: sevseg = set [6:0]; 
    default: sevseg= 7'b0000000; 
    endcase 

    assign setlist[0] <= 29'b01111110100110011111101001111; 
    assign setlist[1] <= 29'b11111110100111111111101001111; 
    assign setlist[2] <= 29'b01111110000000111111100000000; 
    assign setlist[3] <= 29'b01111110100111111111100100000; 
    end 

    [email protected](digit or seg1 or seg2) begin 
    case(digit) 
    4'b1110: sevseg = seg1[41:35]; 
    4'b1101: sevseg = seg1[34:28]; 
    4'b1011: sevseg = seg2[27:21]; 
    4'b0111: sevseg = seg2[20:14]; 
    endcase 
    end 

    always @ (posedge Clk or negedge rst) begin 
    if (!rst) begin 
    count <= 32'd0; 
    Clk_10000<=0; 
    end else begin 
    if (count == 'd10000) begin 
    count <= 32d'0; 
    Clk_10000 <= ~Clk_10000; 
    end else begin 
    count <= count +1; 
    end 
    end 
    end 

    always @ (posedge Clk_10000 or negedge rst) begin 
    if (!rst) begin 
    digit <= 4'b1110; 
    end else if (Clk_10000) begin 
    digit <= {digit [2:0], digit [3]}; 
    end 
    end 

    always @ (Score_P1) 
    begin 
    case (Score_P1) 
    4'b0000: seg1 <= 14'b0000001_0000001; 
    4'b0001: seg1 <= 14'b0000001_1001111; 
    4'b0010: seg1 <= 14'b0000001_0010010; 
    4'b0011: seg1 <= 14'b0000001_0000110; 
    4'b0100: seg1 <= 14'b0000001_1001100; 
    4'b0101: seg1 <= 14'b0000001_0100100; 
    4'b0110: seg1 <= 14'b0000001_0100000; 
    4'b0111: seg1 <= 14'b0000001_0001111; 
    4'b1000: seg1 <= 14'b0000001_0000000; 
    4'b1001: seg1 <= 14'b0000001_0001100; 
    4'b1010: seg1 <= 14'b1001111_0000001; 
    4'b1011: seg1 <= 14'b1001111_1001111; 
    4'b1100: seg1 <= 14'b1001111_0010010; 
    4'b1101: seg1 <= 14'b1001111_0000110; 
    4'b1110: seg1 <= 14'b1001111_0100100; 
    4'b1111: seg1 <= 14'b1001111_0100000; 
    endcase 
    end 

    always @ (Score_P2) 
    begin 
    case (Score_P2) 
    4'b0000: seg2 <= 14'b0000001_0000001; 
    4'b0001: seg1 <= 14'b0000001_1001111; 
    4'b0010: seg2 <= 14'b0000001_0010010; 
    4'b0011: seg2 <= 14'b0000001_0000110; 
    4'b0100: seg2 <= 14'b0000001_1001100; 
    4'b0101: seg2 <= 14'b0000001_0100100; 
    4'b0110: seg2 <= 14'b0000001_0100000; 
    4'b0111: seg2 <= 14'b0000001_0001111; 
    4'b1000: seg2 <= 14'b0000001_0000000; 
    4'b1001: seg2 <= 14'b0000001_0001100; 
    4'b1010: seg2 <= 14'b1001111_0000001; 
    4'b1011: seg2 <= 14'b1001111_1001111; 
    4'b1100: seg2 <= 14'b1001111_0010010; 
    4'b1101: seg2 <= 14'b1001111_0000110;   
    4'b1110: seg2 <= 14'b1001111_0100100; 
    4'b1111: seg2 <= 14'b1001111_0100000; 
    endcase 
    end 
    endmodule 
+0

Eine Beschreibung, was Ihr Code möglicherweise nützlich ist. –

+1

Ihr Code weist eine enorme Anzahl von Syntaxfehlern auf, einschließlich fehlender ';', doppelter Deklarationen, schlecht formatierter numerischer Literale. Ich bezweifle, dass du das simuliert hast. –

+0

Von eyeballing es gibt ungefähr 20 einige Fehler, mindestens 7 eindeutige Fehlertypen. Zu den Fehlern gehören fehlende ';', fehlerhafte Anweisungen, abgeleitete Latches, prozedurale kontinuierliche Anweisungen, asynchrones Verwenden eines Taktsignals, Mehrfachdeklaration, falsche Verwendung von blockierenden/nicht blockierenden Zuweisungen usw.Wenn Sie auf FPGA sind, sollte Ihr Board mit asynchronem Reset Flops? Immer vor der Synthese simulieren. – Greg

Antwort

0

Okay, lassen Sie uns dies tun:

1. Sie ein Semikolon nach dem module Ports Beschreibung fehlt.

module Player (
    input clk, 
    input rst, 
    input button, 
    input [29:0] set, 
    input button_p1, 
    input button_p2, 
    output [3:0]oscore1, 
    output [3:0]oscore2, 
    output LED_ON, 
    output answer, 
    output [3:0]seg1, 
    output [3:0]seg2); 

2. Sie auch nicht all Ein-/Ausgänge an der Spitze in der Moduldefinition erklären kann, und erklärt diese Ausgabe weiter unten:

output [3:0] digit; 

Damit mit dem nach oben andere Ausgänge.

3. Sie fehlt ein Semikolon hier:

button_raise <= 1'b1 

4. Dies ist ein Tippfehler ist, muss es 1'b1 sein:

if(button_raise == 1b'1) 

Gleiche mit diesem:

count <= 32d'0; 

5. macht dies nicht alles:

LED_ON [0]; 
else LED_ON [7]; 

Ich glaube, Sie LED_ON[0] <= 1'b1 und LED_ON[7] <= 1'b1 zuweisen bedeuten.

Allerdings haben Sie definiert auch LED_ON als nur 1 Bit, so dass ich nehme an, Sie es wie definieren möchten:

output reg [7:0] LED_ON, 

6. Sie sind auch fehlt eine end Aussage irgendwo , wahrscheinlich, weil Sie versuchen, wenn Anweisungen für mehrere Zeilen zu tun, die nicht einem in begin und end, wie hier eingewickelt werden:

end else 
button <=0; 
button_old <=0; 
button_raise <=0; 

7. Sie verwenden Zuweisungen = in einem sequentiellen Block blockiert, die wie hier nicht erlaubt ist:

always @(posedge clk or posedge rst) begin 
    // detect rising edge 
    button_old = 0; 

So diese nicht blockierende Aufgaben wie <= machen.

8. Sie versuchen, in einem kombinatorischen Block nonblocking Zuordnungen zu tun:

always @ (rd_ptr) begin 
    //... 
    assign setlist[0] <= 29'b01111110100110011111101001111; 

Also diese Blockierung Zuweisungen machen wie = .v

9. Sie versuchen, Zuordnungen in einem kombinatorischen Block zu tun wie hier:

always @ (rd_ptr) begin 
    set = setlist[rd_ptr]; 
    assign answer = set [totlen-1]; 

Es macht die Zuweisungen außerhalb der always Blöcke oder die assign ganz loszuwerden.

10. Diese Signale sind nirgends definiert. Der Compiler weiß also nicht, was er damit machen soll.

Clk; 
rd_ptr; 
setlist; 
totlen; 

11.Score_P1 und Score_P2 haben beide doppelt so sowohl ein Register und einen Draht definiert.

reg [3:0] Score_P1, Score_P2; 
wire [3:0] Score_P1, Score_P2; 

Gleiche mit dem output/wireanswer.

12. Sie ordnen Ihre Eingabe button wie es ist ein Register. Das ergibt keinen Sinn. Sie vergeben es immer nur als 0, also entfernen Sie die Zuweisungen und lassen Sie es einfach eine Eingabe sein.

Sie weisen auch Ihre Eingabe set zu.

13. Sie weisen setlist in einem Kombinationsblock zu, als wäre es ein reg, aber Sie haben es als Draht definiert. Definieren Sie es als eine reg.

14. Sie haben definiert auch setlist als ein einzelnes Bit, aber du bist die Indizierung auf sie als [0]-[3] so ist es als 4 Bits definieren lassen. Sie weisen auch jeden Index mit 29 Bits zu. Also nennen wir es ein 2D-Array, obwohl es noch nicht einmal gelesen wurde und das macht keinen Sinn.

15.seg1 und seg2 sind als 4-Bits definiert sind, aber Sie sind die Indizierung auf sie den ganzen Weg bis zu [41:35], so lasst sie uns beide 42-Bit nennen.


Und dort haben Sie es, mit 15 Jahren einfach Fixes, jetzt Ihr Code, der keinen Sinn macht und wahrscheinlich nichts tut macht noch keinen Sinn, und tut nichts, kann aber tatsächlich kompilieren. Endergebnis:

`timescale 1ns/1ps 

module Player (
    input wire clk, 
    input wire rst, 
    input wire button, 
    input wire [29:0] set, 
    input wire button_p1, 
    input wire button_p2, 
    output wire [3:0]oscore1, 
    output wire [3:0]oscore2, 
    output reg [7:0] LED_ON, 
    output reg answer, 
    output reg [3:0] digit, 
    output reg [42:0]seg1, 
    output reg [42:0]seg2 
); 

wire Clk; 
wire rd_ptr; 
reg [28:0] setlist [3:0]; 
wire totlen; 


reg button_old, button_raise; 
reg number; 
reg [3:0] Score_P1, Score_P2; 
reg [6:0] sevseg; 
reg Clk_10000; 
reg [31:0] count; 

always @(posedge clk or posedge rst) begin 
    // detect rising edge 
    button_old <= 0; 
    button_raise <= 1'b0; 
    if (button_old != button && button == 1'b1) begin 
     button_raise <= 1'b1; 
     button_old <= button; 
     // increment number 
     if(button_raise == 1'b1) begin 
      Score_P1 = 4'b0000; 
      Score_P2 =4'b0000; 
      if(~rst) begin 
       number <= 0; 
      end 
     end else if(button_p1 && !button_p2 && answer==1'b1) begin 
      Score_P1 <= (Score_P1 + 1); 
     end else if(button_p2 && !button_p1 && answer==1'b1) begin 
      Score_P2 <= (Score_P2 + 1); 
     end else if(button_p1 && button_p2 && answer==1'b1 || answer==1'b0) begin 
      LED_ON [0] <= 1'b1; 
     end else begin 
      LED_ON [7] <= 1'b1; 
     end 
    end else begin 
     button_old <=0; 
     button_raise <=0; 
    end 
end 

assign oscore1= Score_P1; 
assign oscore2= Score_P2; 

always @ (rd_ptr) begin 
    assign answer = set [totlen-1]; 
    case (digit) 
     4'b1000: sevseg = set [27:21]; 
     4'b0100: sevseg = set [20:14]; 
     4'b0010: sevseg = set [13:7]; 
     4'b0001: sevseg = set [6:0]; 
     default: sevseg= 7'b0000000; 
    endcase 

    setlist[0] = 29'b01111110100110011111101001111; 
    setlist[1] = 29'b11111110100111111111101001111; 
    setlist[2] = 29'b01111110000000111111100000000; 
    setlist[3] = 29'b01111110100111111111100100000; 
end 

[email protected](digit or seg1 or seg2) begin 
    case(digit) 
     4'b1110: sevseg = seg1[41:35]; 
     4'b1101: sevseg = seg1[34:28]; 
     4'b1011: sevseg = seg2[27:21]; 
     4'b0111: sevseg = seg2[20:14]; 
    endcase 
end 

always @ (posedge Clk or negedge rst) begin 
    if (!rst) begin 
     count <= 32'd0; 
     Clk_10000<=0; 
    end else begin 
     if (count == 'd10000) begin 
      count <= 32'd0; 
      Clk_10000 <= ~Clk_10000; 
     end else begin 
      count <= count +1; 
     end 
    end 
end 

always @ (posedge Clk_10000 or negedge rst) begin 
    if (!rst) begin 
     digit <= 4'b1110; 
    end else if (Clk_10000) begin 
     digit <= {digit [2:0], digit [3]}; 
    end 
end 

always @ (Score_P1) 
begin 
    case (Score_P1) 
     4'b0000: seg1 <= 14'b0000001_0000001; 
     4'b0001: seg1 <= 14'b0000001_1001111; 
     4'b0010: seg1 <= 14'b0000001_0010010; 
     4'b0011: seg1 <= 14'b0000001_0000110; 
     4'b0100: seg1 <= 14'b0000001_1001100; 
     4'b0101: seg1 <= 14'b0000001_0100100; 
     4'b0110: seg1 <= 14'b0000001_0100000; 
     4'b0111: seg1 <= 14'b0000001_0001111; 
     4'b1000: seg1 <= 14'b0000001_0000000; 
     4'b1001: seg1 <= 14'b0000001_0001100; 
     4'b1010: seg1 <= 14'b1001111_0000001; 
     4'b1011: seg1 <= 14'b1001111_1001111; 
     4'b1100: seg1 <= 14'b1001111_0010010; 
     4'b1101: seg1 <= 14'b1001111_0000110; 
     4'b1110: seg1 <= 14'b1001111_0100100; 
     4'b1111: seg1 <= 14'b1001111_0100000; 
    endcase 
end 

always @ (Score_P2) 
begin 
    case (Score_P2) 
     4'b0000: seg2 <= 14'b0000001_0000001; 
     4'b0001: seg1 <= 14'b0000001_1001111; 
     4'b0010: seg2 <= 14'b0000001_0010010; 
     4'b0011: seg2 <= 14'b0000001_0000110; 
     4'b0100: seg2 <= 14'b0000001_1001100; 
     4'b0101: seg2 <= 14'b0000001_0100100; 
     4'b0110: seg2 <= 14'b0000001_0100000; 
     4'b0111: seg2 <= 14'b0000001_0001111; 
     4'b1000: seg2 <= 14'b0000001_0000000; 
     4'b1001: seg2 <= 14'b0000001_0001100; 
     4'b1010: seg2 <= 14'b1001111_0000001; 
     4'b1011: seg2 <= 14'b1001111_1001111; 
     4'b1100: seg2 <= 14'b1001111_0010010; 
     4'b1101: seg2 <= 14'b1001111_0000110; 
     4'b1110: seg2 <= 14'b1001111_0100100; 
     4'b1111: seg2 <= 14'b1001111_0100000; 
    endcase 
end 
endmodule