[讨论] 为什么我的提示没有定义呢?

yealien   2010-5-28 11:00 楼主
代码如下:
module top;
    wire[15:0] number;
    wire[3:0] conut;
    number_gen ng(number);
    bit_count bc(number,count);
endmodule
module number_gen(number);
    output[15:0] number;
    reg [15:0] number;
    event ready;
    initial
      number=0;
    always
       begin
           #50 number=number+1;
           #50 ->ready;
   end
endmodule
module bit_count(number,count);
    input[15:0] number;
    output[3:0] count;
    reg[3:0] count;
    reg[15:0] num_buf;
    integer i;
    always
       begin
           @ng.ready num_buf=number;
           count=0;
           for (i=0;i<16;i=i+1)
           if(num_buf[1])count=count+1;
       end
   endmodule
在用quartus ii进行综合时,提示“Error (10161): Verilog HDL error at top.v(27): object "ng" is not declared”,求高手指点是怎么回事?

回复评论 (9)

你在定义number_gen这个模块以前就使用了这个模块类型名,这是不行的!(number_gen ng(number);)
而且也不推荐像你这样在同一个程序中出现多个module,最好通过元件实例调用的方式。
科技应该让生活变得更简单!
点赞  2010-5-28 11:15
版主,我看资料是这样的啊?顶层模块调用number_gen模块,然后起一名称为ng,
然后在number_gen(ng)模块中触发有名事件.
点赞  2010-5-28 11:40

回复 板凳 yealien 的帖子

不好意思,我不太明白你的意思?你能不能说清楚一点呢
科技应该让生活变得更简单!
点赞  2010-5-28 13:20
呵呵,不好意思,我可能一时心急,没有说清楚。
我上面的代码是在一本《verilog HDL实用教程》上看来的例子,主要是想看看有名事件是如何个触发情况,所以抄下来自己用modulesim来仿真(不过我对这个modulesim还不是很熟),结果发现出错了,所以我就搞不清楚了。
多谢版主帮手!
点赞  2010-5-28 15:01
版主可否指点一下,具体是哪个地方出了错?看了半天,找不出来。惭愧!
点赞  2010-5-29 13:51

FPGA高手哦!!

这个好玩哦!!
点赞  2010-5-30 08:43
他说ng没有定义是出现在27行,我觉得就是前面没有有效的例化元件。可否把元件例化语句写到定义之后?或者是首先得声名number_gen模块?
科技应该让生活变得更简单!
点赞  2010-5-30 11:37
对于这个东西我还是新手刚学,还不懂得怎么修改,先看看,不知版主可否帮手修改一下,发上来让大家学习学习。
点赞  2010-5-31 15:04
从你代码来看。
你的顶层是是没有任何输入输出作用。
在quartus综合会直接把你顶层优化掉。
其实你那个错误也不是一个真正错误,实际上QUARTUS已经没有将你的模块综合化。
上面说的前后关系,在verilog没有关系。
veilog 编译软件会自动从本文件或者其他文件名寻找模块名称。没有任何先后顺序之分。

哎,你这些文件时用modelsim仿真时候是不会出错的。


还有警告你,要分成多个文件写。
到时候,有的苦受。
FPGA遥远的事情,我现在在画PCB
点赞  2010-6-1 11:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复