Имеется SPI Slave, вот код:
Код
module SPIslave(
input wire RESET,
input wire CSIN,
input wire SCKIN,
input wire MOSIIN,
output wire MISOOUT,
output reg [15:0] DATAOUT,
);
reg [15:0] data;
reg [4:0] count;
assign MISOOUT = data[15];
always @ (negedge SCKIN)
if (RESET & ~CSIN)
data <= { data[14:0], MOSIIN };
always @ (posedge SCKIN)
if (~RESET | CSIN)
count <= 5'b00000;
else
count <= count + 1'b1;
always @ (count[4])
DATAOUT <= data
endmodule
input wire RESET,
input wire CSIN,
input wire SCKIN,
input wire MOSIIN,
output wire MISOOUT,
output reg [15:0] DATAOUT,
);
reg [15:0] data;
reg [4:0] count;
assign MISOOUT = data[15];
always @ (negedge SCKIN)
if (RESET & ~CSIN)
data <= { data[14:0], MOSIIN };
always @ (posedge SCKIN)
if (~RESET | CSIN)
count <= 5'b00000;
else
count <= count + 1'b1;
always @ (count[4])
DATAOUT <= data
endmodule
Вся проблема в RESETe. Хочу обходиться без лишних ног, ибо на CPLD итак много всего.
Если уберу из кода RESET, то счетчик начинает считать не с начала условий, под которые он подписан.
Т.е. Подаю клок, потом подаю CSIN = 1 (до этого она в нуле). Далее отпускаю CSIN = 0, но счетчик не начинает считать. И только по прошествии 7 - 8 клоков оживает.
Я думал что при включении питания CPLD выставляет все в "0", но получше глянув в Post-моделировании заметил что не все в нуле.
Мож я чет не понимаю? На Verilogе сижу не долго и прошу помощи у экспертов.