Verilog:错误实例化模块

时间:2015-08-05 00:40:39

标签: verilog

我正在尝试编写可重用的模块并遇到问题。代码如下:

35  always @(BTN) begin  
36    case (BTN)  
37      4'b0001:  
38        begin  
39          digit1 <= digit1 + 1;  
40          sevensegcase digi1 (      // the module i'm trying to reuse  
41            .SEG_SEL_IN(n2B0[1:0],  // n2B0 is a defined constant  
42            .BIN_IN(digit1[3:0]),  
43            .DOT_IN(n1B1),          // another constant  
44            .SEG_SEL_OUT(AN[3:0]),  // Send digit selection to the anodes  
45            .HEX_OUT(A_TO_G[7:0])); // Select appropriate segments  
46         end  

......  
......  
......  

当我保存模块时,它会编译错误 当我合成模块时,我得到:

ERROR:HDLCompliers:26 - "Seven_Seg.v" line 40 unexpected token 'sevensegcase'

如果我将实例化放在always块之外,我会得到同样的错误。

2 个答案:

答案 0 :(得分:1)

您正在实例化always @块内的模块。在always @块之外实例化它,给它输入线,并在你always @块中将这些输入线分配给所需的信号。

sevensegcase digi1 (
  .SEG_SEL_IN(n2B0[1:0], // n2B0 is a defined constant
  .BIN_IN(digit1[3:0]),
  .DOT_IN(n1B1), // another constant
  .SEG_SEL_OUT(AN[3:0]), // Send digit selection to the anodes
  .HEX_OUT(A_TO_G[7:0])); // Select appropriate segments
)

reg digit_reg[3:0];

always @(BTN) begin
  case (BTN)
    4'b0001:
    begin
      digit_reg <= digit_reg + 1;
    end

assign digit1 = digit_reg;

旁注:不要忘记你的default:案件!

答案 1 :(得分:0)

我认为问题在于您可能正在交换模块名称和实例名称。在Verilog中实例化模块时,它需要采用以下格式:

module_name instance_name (port_a, port_b, ...);

我猜测digi1可能是你的模块名称而sevensegcase是实例名称?如果是这样,你已经转换了订单,如果你解决了这个问题,它应该编译。另外,请确保在顶层模块之前编译子模块。