我写了一个verilog代码但是得到的错误不是常数或未知类型

时间:2015-04-04 04:57:55

标签: error-handling verilog fpga system-verilog

如何删除标题中提到的错误?

  reg [3:0]count;
  reg [6:0]seg;

  always @ (posedge clock) begin
    if (reset)
      count = 0;
    else
      count = count+1'b0;   //starting A counter
  end

  begin // this seems to need an "always @*" just before "begin"
    case(count)
      4'b0000: seg = 7'b0000001;
    endcase
  end

  assign {a,b,c,d,e,f,g} = seg;

endmodule  // where is "module"?

它显示错误44,即计数不是常数  错误1059,即seg是未知类型。请帮忙。 无法弄清楚接下来该做什么

1 个答案:

答案 0 :(得分:0)

这似乎是一个7段计数器,它根据正在运行的4位计数器的值显示十六进制值。

首先,您需要声明模块的输入和输出,这可以完成(在Verilog 2001中),如下所示:

module counter7seg (
  input wire clock,
  input wire reset,
  output wire a,
  output wire b,
  output wire c,
  output wire d,
  output wire e,
  output wire f,
  output wire g
  );

这部分描述看起来很不错:一个4位计数器。但是你需要(正如摩根指出的那样)修复两件事:时钟always内的作业必须是非阻塞的(<=而不是=),而你的计数器可以计算,必须添加1,而不是0

  always @ (posedge clock) begin
    if (reset)
      count <= 0;
    else
      count <= count+1'b1;   //starting A counter
  end

以下部分,当您获取count的值并导出细分值时,不完整:此处需要16个案例。

我可以看到您使用否定逻辑来切换片段,因此有效地0000变为00000010001变为(仅根据下图中的内容进行猜测){{1 }},.... 1001111变为1000,依此类推。

7 segment display

0000000