vivado项目的编码错误

时间:2017-12-04 07:15:32

标签: verilog vivado

我想合成这个编码,但它一直告诉我“reg button_old,button_raise;”有错误。有没有人知道我在编码中有什么错误?非常感谢您的帮助。 我们正在使用nexys 4进行项目,我们能够模拟编码,但无法合成它,因此我们无法继续下一步。希望有人能帮助我们。

`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

    always@(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

1 个答案:

答案 0 :(得分:0)

好的,我们这样做:

1。您的module端口说明后错过了分号。

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。您也无法在模块定义的顶部声明所有输入/输出,并将此输出声明降低:

output [3:0] digit;

因此,将其与其他输出相提并论。

3. 你在这里错过了一个分号:

button_raise <= 1'b1

4。这是一个错字,需要1'b1

if(button_raise == 1b'1)

与此相同:

count <= 32d'0;

5. 这没有做任何事情:

LED_ON [0];
else LED_ON [7];

我认为您的意思是指定LED_ON[0] <= 1'b1LED_ON[7] <= 1'b1

但是,您还将LED_ON定义为仅1位,因此我假设您要将其定义为:

output reg [7:0] LED_ON,

6。你在某个地方也遗漏了一个end语句,可能是因为你试图为多行没有包含在{{1}中的if语句}和begin,就像这里:

end

7。您在顺序区块中使用了阻止分配end else button <=0; button_old <=0; button_raise <=0; ,这是不允许的,如下所示:

=

请执行这些非阻止分配,例如always @(posedge clk or posedge rst) begin // detect rising edge button_old = 0;

8。您正在尝试在组合块中执行非阻塞分配:

<=

请执行这些阻止分配,例如always @ (rd_ptr) begin //... assign setlist[0] <= 29'b01111110100110011111101001111; 。v

9。你正试图在这样的组合模块中进行分配:

=

always @ (rd_ptr) begin set = setlist[rd_ptr]; assign answer = set [totlen-1]; 块之外进行分配或完全摆脱always

10. 这些信号未在任何地方定义。所以编译器不知道如何处理它们。

assign

11。 Clk; rd_ptr; setlist; totlen; Score_P1都被定义为寄存器和电线两次。

Score_P2

reg [3:0] Score_P1, Score_P2; wire [3:0] Score_P1, Score_P2; / output wire相同。

12。您正在为您的输入分配answer,就像它是一个寄存器一样。这没有任何意义。您只需将其指定为button,因此请删除作业并将其作为输入。

您还要分配到您的输入0

13。您在组合块中分配set,就像它是一个reg,但您已将其定义为连线。因此将其定义为reg。

14。您还将setlist定义为一位,但您要将其编入setlist[0]的索引,所以我们将其定义为4位。您还要为每个索引分配29位。所以我们把它称为二维数组,即使它从来没有读过,这没有任何意义。

15。 [3]seg1被定义为4位,但您要将它们编入索引,一直到seg2,所以让我们称它们为42位。

而且你有它,有15个以上的简单修复,现在你的代码毫无意义,可能什么也没做什么仍然没有意义,什么都不做,但实际上可以编译。最终结果:

[41:35]