问题描述
我在合成我的代码时遇到这个错误,但我不知道这是什么意思。内容如下:
Error-net "Count[0] 或直接连接的网络由 more 不是一个来源,并非所有驱动程序都是三种状态。
它对向量 count[0] - count[4] 以及我的 load
和 k
值表示相同的错误。代码是我对 SPI 主机的表示。 SPI 主机有一个移位寄存器的实例,用于推送信息。
module SPIMaster(output reg SCLK,CS,MOSI,input EN,CLK,MISO,input [7:0] m_data);
wire master_out;
reg [4:0] count;
wire [7:0] data_buff;
wire SCLK1;
reg master_in,c_sw,k,state,load;
shiftReg register_out (master_out,data_buff,load,(~SCLK),master_in,m_data);
assign SCLK1 = (~c_sw) | CLK;
always@(posedge CLK) begin
if(state) begin
if (k == 1) begin
state <= 0;
c_sw <= 0;
CS <= 1;
count <= 0;
k <= 0;
load <= 0;
end
else begin
state <= 1;
c_sw <= 1;
CS <= 0;
end
end
else begin
if (EN == 1) begin
state <= 1;
c_sw <= 1;
CS <= 0;
count <= 0;
k <= 0;
load <= 1;
end
else begin
state <= 0;
c_sw <= 0;
CS <= 1;
count <= 0;
k <= 0;
load <= 0;
end
end
end
always@(posedge SCLK1) begin
if (CS == 0) master_in <= MISO;
if (count == 7) begin
load <= 0;
end
else if (count == 15)begin
load <= 0;
end
else begin
load <= 1;
end
end
always@(negedge SCLK1) begin
if (count == 23) k <= 1;
else k <= 0;
if (CS == 0) begin
MOSI <= master_out;
count <= count + 1;
end
end
endmodule
解决方法
您的代码不符合良好的综合编码实践,因为您从 2 个不同的 count
块分配给 always
,而这 2 个块由不同的时钟信号触发。您应该从同一个 count
块中对 always
进行所有分配。
load
和 k
也是如此。