我有一个模块,需要很多副本,因此为了简化代码,我使用了索引数组(在很多次之前都已完成此操作)。但是,在这种情况下,连接到我的设备的总线比我的阵列短,因此我必须从阵列元素中读取/写入数据。我还没有找到一种优雅的方式来做到这一点(不要相信下面的代码会起作用)。我可以将数组分成几部分,但是这会使它重新构造为可用变量(往返于模块)很痛苦。关于如何实现此目标有任何想法吗?
谢谢, 戴夫
module xMain(
input wire clk48M, // System clock
inout wire [7:0] ucDb, // Data bus value
input wire ucMsb, // Variable Lsb/Msb
input wire ucAd, // Module address
input wire ucRdb, // Micro read\
input wire ucWrb, // Micro write\
input wire ucCsb // Micro chip select\
);
reg [7:0] UcOut; // Output register
reg [13:0] ModInp [1:0]; // Module input
wire [15:0] ModOut [1:0]; // Module output
assign ucDb = (!ucCsb && !ucRdb && ucWrb) ? UcOut : 8'bz;
xModule U1 ( .modClk(clk48M), .inVal(ModInp[0]), .outVal(ModOut[0]) );
xModule U2 ( .modClk(clk48M), .inVal(ModInp[1]), .outVal(ModOut[2]) );
always @( posedge clk48M )
begin
if ( !UcCsb && UcRdb && !UcWrb ) begin
if ( ucMsb ) begin
ModInp[ucAd][13:8] <= ucDb[5:0];
end
else begin
ModInp[ucAd][7:0] <= ucDb;
end
else if ( !UcCsb && !UcRdb && UcWrb ) begin
if ( ucMsb ) begin
UcOut <= ModOut[ucAd][15:8];
end
else begin
UcOut <= ModOut[ucAd][7:0];
end
end
end
endmodule
// Dummy module shown below
module xModule(
input wire modClk, // Module clock
input wire [13:0] inVal, // Input value
output reg [15:0] outVal // Output value
);
always @( posedge modClk )
begin
outVal[15] <= 0; // do something to the input
outVal[14] <= 0; // to generate an output
outVal[13:0] <= inVal;
end
endmodule