为什么在模块part1中给出错误?

时间:2014-12-24 22:32:05

标签: verilog

在我之前的一个问题中,我说我被要求设计一个装瓶系统,用所需数量的药片填充瓶子。在我的项目的第1部分中,用户将按下FPGA上的按钮,以确定将在每个瓶子中放入多少平板电脑,并显示所需的数字。这是我为我的项目编写的第1部分的代码,我有不知道为什么它会在模块part1中给出错误。

module count(clk,clr,cntEn,dout);
    input clk,clr,cntEn;
    output reg [8:0] dout ;

    always@(posedge clk)
    begin
      if(clr) 
        dout<=0;
      else if(cntEn)
        dout<=dout+1;
    end

endmodule


module sevenseg(num,dout);
    input      [3:0] num;
    output reg [6:0] dout;

    always@(*) begin
    case(num)
        0:dout=7'b1111110;
        1:dout=7'b1100000;
        2:dout=7'b1011011;
        3:dout=7'b1001111;
        4:dout=7'b1100110;
        5:dout=7'b1101101;
        6:dout=7'b1111101;
        7:dout=7'b0000111;
        8:dout=7'b1111111;
        9:dout=7'b1101111;
    endcase
end

endmodule


module part1(clk,clr,cntEn,dout);
    input   clk, clr, cntEn;
    output  dout;
    wire    w1;

    begin
        count    count_1   (clk, clr, cntEn, w1);
        sevenseg sevenseg_1(w1,  dout );
    end

endmodule

1 个答案:

答案 0 :(得分:0)

错误是由ljk07指出的,模块1中的开始端不是必需的,一些解析器可能只是忽略它们,其他人会抛出错误。它应该是:

module part1(clk,clr,cntEn,dout);
  input   clk, clr, cntEn;
  output  dout;
  wire    w1;

  count    count_1   (clk, clr, cntEn, w1);
  sevenseg sevenseg_1(w1,  dout );

endmodule

我认为值得指出的是,除非你受限于Verilog-95然后采用ANSI样式的端口声明,否则它会更容易维护代码。

module part1(
  input   clk, clr, cntEn,
  output  dout
);
  wire    w1;

  count    count_1   (clk, clr, cntEn, w1);
  sevenseg sevenseg_1(w1,  dout );

endmodule

模块sevenseg也有一个不完整的case语句,这将导致隐含的锁存器。添加默认值或完全指定num:

的所有选项的输出
module sevenseg(num,dout);
  input      [3:0] num;
  output reg [6:0] dout;

  always @(*) begin
    case(num)
      0:dout=7'b1111110;
      1:dout=7'b1100000;
      2:dout=7'b1011011;
      3:dout=7'b1001111;
      4:dout=7'b1100110;
      5:dout=7'b1101101;
      6:dout=7'b1111101;
      7:dout=7'b0000111;
      8:dout=7'b1111111;
      9:dout=7'b1101111;
      default: dout='b0;
    endcase
  end
endmodule