【发布时间】:2017-03-07 11:37:04
【问题描述】:
我的方案中有一些模块,我想用大量电线连接它。它在我心中的样子:
当顶级模块中的变量 some_trigger 发生变化时,此时顶级模块通过模块input_output_wire 发送信号a1-> 模块a1 做一些东西-> 模块a1 发送太模块@ 987654325@ massive_input_output_wire[0] -> 模块 a2 做一些东西 -> a2 通过大量massive_input_output_wire[1] 发送到模块a3 -> a3 做一些东西 -> 发送到@987654332 @ by massive_input_output_wire[2] 等等...
module a(
input_output_wire;
);
input input_output_wire;
output input_output_wire;
always @(posedge input_output_wire)
begin
if(input_output_wire) begin
....
make some stuff
....
end
end
end module
`include "a.v"
module top_level(
clk,
rst,
some_trigger
);
input clk, rst, some_trigger;
parameter NUM_OF_MODULES_A = 5;
wire massive_input_output_wire[0:NUM_OF_MODULES_A];
a a1(.input_output_wire(massive_input_output_wire[0]));
a an(.input_output_wire(massive_input_output_wire[NUM_OF_MODULES_A-1]));
genvar i;
genarate
for(i=1;i<NUM_OF_MODULES_A-2; i = i + 1)
begin : modules_a
a modules_a(
.(input_output_wire(massive_input_output_wire[i]))
);
end
endgenerate
always @(posedge some_trigger)
begin
if(some_trigger)
massive_input_output_wire[0] = 1;
end
endmodule
【问题讨论】:
-
对不起:我不明白你在问什么。请您添加更多解释吗?
-
连线不像编程语言中的变量。他们不会将分配与最后一场胜利联系起来。经常导致 Xs 的驱动器并发。您不应该使用
assign或force语句在 always 块中分配连线(我猜这就是您当前正在做的事情)。 -
@MatthewTaylor 好的,我想在这个逻辑中连接我所有的模块(
a1,a2,....an):来自a1(massive_input_output_wire[0])的输出线) 必须转到a2的输入。 a2(massive_input_output_wire[1]) 的输出线必须连接到 a3 的输入端。a[n-1](massive_input_output_wire[n]) 的输出线必须连接到输入端a[n]。问题是如何正确编写代码生成模块 (modules_a) 以及我编写的未生成模块a1和an -
@Greg 谢谢你,我理解我的错误,但我现在的问题不在此。
-
Module
a应该至少有两个端口:一个输入和一个输出。a inst_a( .output_wire(massive_input_output_wire[i]), .input_wire(massive_input_output_wire[i-1]) );