Я пытался сделать простого Мастера в Верилоге.На данный момент он должен просто отправить адрес раба.Кажется, есть проблема в моем процессе clock == 0
.Потому что я получаю следующее сообщение об ошибке: Error (10028): Can't resolve multiple constant drivers for net "sda_reg" at Master.v(33)
Я прочитал, что есть проблема, когда я изменяю значение (в данном случае sda_reg
) одновременно, но из-за того, что sda_reg
модифицируется в разных состоянияхЯ не заявляю о проблеме:
Код:
module Master
(button,clk,scl,sda);
inout scl;
inout sda;
input clk;
input button;
reg ack_reg;
reg[2:0] ack_counter;
reg sda_reg;
reg scl_reg;
reg[7:0] i2c_adress;
reg read_write;
//states
reg[1:0] state;
parameter idle=0, start=1, send=2;
initial begin
ack_reg = 1'b0;
ack_counter = 3'b0;
sda_reg = 1'b0;
i2c_adress = 8'b11011101;
end
always@(posedge clk) begin
case(state)
idle: begin
if(button) begin
state <= start;
end
end
start: begin
sda_reg <= 1'b0;
state <= send;
end /*
send: begin
if(ack_counter == 8 && sda) begin
state <= idle;
end
end */
endcase
end
always@(clk == 0) begin
case(state)
send: begin
//Counter for 8 bits
ack_counter <= ack_counter +1;
//Getting the Most Important bit
sda_reg <= i2c_adress[7];
//Shifting Adress for one bit
i2c_adress <= i2c_adress << 1;
end
endcase
end
//Wire data to output
assign sda = sda_reg;
assign scl = clk;
endmodule