如何解决Verilog 综合给了我一个我不明白的错误
我在合成我的代码时遇到这个错误,但我不知道这是什么意思。内容如下:
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
也是如此。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。