Я пытаюсь построить модуль SPI в Verilog, который передает 8 бит данных, но при выполнении операции сдвига я заметил, что сдвиг вообще не сдвигает биты, в то время как MOSI и MISO принимают значение ноль только после первогоцикл, в результате чего данные на обеих сторонах уменьшаются до нуля.Что я могу сделать, чтобы это исправить?
Код для ведущего:
module Master(input clk, input MISO,
output reg MOSI, output reg SS);
initial SS = 0;
reg [2:0] counter;
reg [7:0] Master_reg = 8'b11011011;
always @ (posedge clk)
begin
if(!SS)
begin
if(^counter === 1'bx)
counter = 0;
else
counter = counter + 1;
MOSI = Master_reg[7];
Master_reg = Master_reg >> 1;
Master_reg[0] = MISO;
end
if(counter == 7)
SS = 1;
end
endmodule
Код для подчиненного:
module Slave(input clk, input MOSI, input SS,
output reg MISO);
reg [2:0] counter;
reg [7:0] Slave_reg = 8'b11111111;
always @ (posedge clk)
begin
if(!SS)
begin
if(^counter === 1'bx)
counter = 0;
else
counter = counter + 1;
MISO = Slave_reg[0];
Slave_reg = Slave_reg << 1;
Slave_reg[7] = MOSI;
end
end
endmodule
Передача данных (11011011 от мастера, 11111111)от ведомого) дает следующий результат: ![output](https://i.stack.imgur.com/CMQdu.png)
Редактировать: я использую EDA Playground в качестве симулятора