verilog中多次调用一个module实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog中多次调用一个module实例相关的知识,希望对你有一定的参考价值。

verilog中如何多次调用同一个module实例?如:
有一个数组实现的存储器 module mem(addr,data,out) 存储器将数据data写入addr位置,再将此数据作为out输出
现在在另一个module中要每个clk上升沿修改mem中的数据,那么
mem m(addr,data,out);//初始化mem实例和里面的数据
always@(posedge clk)
begin
//code
end
在code中如何再次调用之前创建的mem实例(由于是存储器,不可能每次都创建一个新的,否则之前的数据都没了)
我写m(addr,data,out); Quartz II说task m is not used as a task

你写mem m(addr,data,out)就是调用了,程序会一直将addr输入到调用的模块,如果addr改变了,那么out立刻就会变的,不用你单独写进always里,这样也是不行的task是任务,可以在always中调用,而你的men是模块不行 参考技术A 分开放,这是verilog coding style的一种良好习惯,每个文件里面只包含一个独立的module
把所有这些文件放在同一个目录下,在top文件里实例化这些module就可以调用了
---------------------------------------------------------
top文件和新建一个module一样的,不过模块里主要是定义连线和实例化子模块,你随便找本verilog的教程就有啦:)
实例化是这样的,greycode是你的module名字,G1是实例化名字(可任意),后面括号里的东东需要跟你定义的端口顺序一致。建议不要采用这种顺序绑定的形式,建议采用端口命名绑定方式
你可以先找本基本的verilog语法书看看,上手很快的
------------------------------------------------------------
你greycode.v的module名字是叫greycode吗
另外,greycode.v是放在同一个目录下吗
参考技术B 我明白你的意思:
没有你这么理解硬件逻辑的。
Verilog不是C语言,FPGA也不是CPU。
你的思想是串行调用函数思想,不是硬件的模块思想。

具体到你的问题:
Always里面从来不能调用模块。
都是在顶层模块里面连接底层模块。
参考技术C 实例模块都是要给一个名字的,但你可以给和模块相同的名字
一般不推荐这么做,因为有些模块会例化多次,通常例化的名字是根据模块名拓展的
例如一个模块叫
clk_gen
例化时可以
clk_gen
clk_gen_inst

verilog中模块例化的问题

我想把计时器模块的reg型的输出Q3Q2Q1Q0输给下一个模块的数码管的输入译码,该怎么实现啊?比如说计时器输出0001,那数码管就接受到这个然后显示1。

参考技术A 在顶层用wire 实现跨模块传输

以上是关于verilog中多次调用一个module实例的主要内容,如果未能解决你的问题,请参考以下文章

verilog 中顶层模块实例引用多个模块时端口怎么连接

verilog的module中怎样循环调用另外几个module?

verilog中模块例化的问题

Verilog中实例化子模块的问题!

verilog中,对一个模块的多次调用,比如前一个调用还没有结束的情况下,就再次调用,后者是不是会覆盖前者?

Verilog中,如何实现一个module调用另一个module中的reg变量?