我正在尝试使用Design Vision合成我在Verilog中创建的程序。 我得到以下警告中的多个:
警告:在设计'mergeTOP'中,三态总线'state [0]'具有非 三态驱动'u1 / state_reg [0] / Q'。 (LINT-34)
警告:在设计'mergeTOP'中,三态总线'temp_in5 [0]'具有非 三态驱动器'u1 / temp_in05_reg [0] / Q'。 (LINT-34)
说明 Synopsys库包含三态驱动引脚的描述 组件。 Synopsys工具将网络分类为三态网络 由至少一个具有这种三态属性的引脚驱动。 通常,如果此类网络上有多个驱动程序,则假定为 所有驱动销应为三态驱动器,以便正确操作 三国巴士。此警告消息表明情况 至少有一个非三态驱动器出现在三态上 净。
/*======Declarations===============================*/
module controller (clock, reset, start, state, temp_in1, temp_in2, temp_in3, temp_in4, temp_in5, done, temp_out1, temp_out2, temp_out3, temp_out4, temp_out5, out, in);
/*-----------Inputs--------------------------------*/
input clock, reset, start;
input [255:0] in;
input [255:0] temp_out1, temp_out2, temp_out3, temp_out4, temp_out5;
/*-----------Outputs--------------------------------*/
output [5:0] state;
// output [255:0] temp_in01, temp_in02, temp_in03, temp_in04, temp_in05;
output done;
output [255:0] out;
output [255:0] temp_in1, temp_in2, temp_in3, temp_in4, temp_in5;
/*----------------Nets and Registers----------------*/
reg [5:0] state, n_state;
reg [255:0] temp_in01, temp_in02, temp_in03, temp_in04, temp_in05;
reg done;
reg [255:0] out;
always@(posedge clock) // at the posedge of the clock the current state changes based on whether reset is active or the next state determined by the logic.
begin
if (!reset) // if the active low reset is triggered the state is set to 0.
state <= 6'b000000;
else // if reset is high or inactive the current state gets the value of the next state.
state <= n_state;
end
always@* begin // control path
case (state)
6'b000000: begin // state S0, wait for input.
if (start == 1)
n_state = 6'b000001;
else
n_state = 6'b000000;
end
6'b000001: begin // state S1
n_state = 6'b000010;
end
6'b000010: begin // state S2
n_state = 6'b000100;
end
6'b000100: begin // state S3
n_state = 6'b001000;
end
6'b001000: begin // state S4
n_state = 6'b010000;
end
6'b010000: begin // state S5
n_state = 6'b100000;
end
6'b100000: begin // state S5
n_state = 6'b100000;
end
default: n_state = 6'b000000;
endcase
end
always@(posedge clock) begin
if (!reset) begin
temp_in01 <= 0;
out <= 0;
done <= 0;
end
else begin
case(state)
6'b000000: begin
temp_in01 <= in;
out <= in;
done <= 0;
end
6'b000001: begin
temp_in02 <= temp_out1;
out <= temp_out1;
done <= 0;
end
6'b000010: begin
temp_in03 <= temp_out2;
out <= temp_out2;
done <= 0;
end
6'b000100: begin
temp_in04 <= temp_out3;
out <= temp_out3;
done <= 0;
end
6'b001000: begin
temp_in05 <= temp_out4;
out <= temp_out4;
done <= 0;
end
6'b010000: begin
out <= temp_out5;
done <= 0;
end
6'b100000: begin
out <= out;
done <= 1;
end
default: begin
out <= out;
done <= 0;
end
endcase
end
end
assign temp_in5 = temp_in05;
assign temp_in4 = temp_in04;
assign temp_in3 = temp_in03;
assign temp_in2 = temp_in02;
assign temp_in1 = temp_in01;
endmodule
`
/*======Declarations===============================*/
module mergeTOP (clock, reset, start, in, out, done);
/*-----------Inputs--------------------------------*/
input [255:0] in;
input clock, reset, start;
/*-----------Outputs--------------------------------*/
output [255:0] out;
output done;
/*----------------Nets and Registers----------------*/
// reg [255:0] out;
// reg done;
wire [5:0] state;
wire [255:0] temp_out1, temp_out2, temp_out3, temp_out4, temp_out5;
wire [255:0] temp_in1, temp_in2, temp_in3, temp_in4, temp_in5;
controller u1 (.clock(clock), .reset(reset), .start(start), .state(state), .done(done), .out(out), .in(in),
.temp_in1(temp_in1), .temp_in2(temp_in2), .temp_in3(temp_in3), .temp_in4(temp_in4), .temp_in5(temp_in5),
.temp_out1(temp_out1), .temp_out2(temp_out2), .temp_out3(temp_out3), .temp_out4(temp_out4), .temp_out5(temp_out5)
);
merge1 #(16) u2 (.in(temp_in1),.out(temp_out1),.state(state));
merge1 #(32) u3 (.in(temp_in2),.out(temp_out2),.state(state));
merge1 #(64) u4 (.in(temp_in3),.out(temp_out3),.state(state));
merge1 #(128) u5 (.in(temp_in4),.out(temp_out4),.state(state));
merge1 #(256) u6 (.in(temp_in5),.out(temp_out5),.state(state));
endmodule