我遇到了模塊輸出端口出現意外高阻抗狀態的問題。實例化其他模塊的模塊的代碼如下:意外的高阻抗狀態
`timescale 1ns/1ps
module column(
input wire clk,
input wire reset,
input wire trigger,
input wire [7:0] latency
);
localparam AMOUNT_OF_REGIONS = 3;
wire [24:0] o_data [0:AMOUNT_OF_REGIONS-1];
wire [1:0] up_in [0:AMOUNT_OF_REGIONS-1];
//same declarations for do_in, up_out, do_out
assign up_in[0] = 0;
assign do_in[AMOUNT_OF_REGIONS-1] = 0;
generate
genvar i;
for (i = 0; i < AMOUNT_OF_REGIONS; i = i + 1) begin : multiple_regions_instantiation
if ((i == 0) || (i == AMOUNT_OF_REGIONS-1)) begin
region tmp(
clk,
reset,
trigger,
latency,
up_in[i],
do_in[i],
up_out[i],
do_out[i],
o_data[i]
);
end
else begin
region tmp(
clk,
reset,
trigger,
latency,
do_out[i-1],
up_out[i+1],
do_in[i-1],
up_in[i+1],
o_data[i]
);
end
end
endgenerate
endmodule
可實例化模塊的端口聲明是這樣的:
module region(
input wire clk,
input wire reset,
input wire trigger,
input wire [7:0] latency,
input wire [1:0] up,
input wire [1:0] do,
output reg [1:0] to_up,
output reg [1:0] to_do,
output reg [24:0] odata
);
的輸出的分配,是在初始塊製成,看起來像這樣:
initial begin
latency_cnt = 255;
start_cnt = 0;
preset = 0;
read_out = 0;
begin: hit_generation
cnt = 0;
forever begin
cnt = cnt + 1;
fork
#20 hit0 = ($random > 0) ? 1 : 0;
#20 hit1 = ($random > 0) ? 1 : 0;
#20 hit2 = ($random > 0) ? 1 : 0;
#20 hit3 = ($random > 0) ? 1 : 0;
to_up = {hit1, hit0};
to_do = {hit3, hit2};
join
if (cnt == 10000) disable hit_generation;
end
end
end
所以,現在的問題是,如果AMOUNT_OF_REGIONS == 3或2,那麼一切正常,但如果我試圖增加它的價值,那麼對於所有下注區域ween 1和AMOUNT_OF_REGIONS-2(包括),它們的輸入和輸出會混亂(2'bzz)。但0區域將信息很好地發送到區域1,並且AMOUNT_OF_REGIONS-1區域正確地將信息發送給它的鄰居。 測試臺只是實例化一列,並生成觸發器和時鐘信號。我讀過如果只有導線連接沒有連接到寄存器,可能會導致高阻抗狀態,但據我所知,我將連線連接到輸出寄存器......親愛的,可能是什麼它的問題?如果它很重要,我正在使用Icarus Verilog。
http://stackoverflow.com/help/mcve – toolic