Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (bit_counter = 0) then
- -- Reception handling - if DAvail and DTaken are down, transfer new byte into output register and raise DAvail
- if transfer_data_out then
- if (rd='1' or rd_multiple='1') then
- if sDavail='0' and dout_taken='0' then
- -- If we're ok to transfer data, then do it
- -- otherwise wait here until dout_taken rises
- set_davail <= true;
- new_byte_counter <= byte_counter - 1; set_byte_counter <= true;
- -- Next byte
- new_bit_counter <= 7;
- if byte_counter=1 then
- new_transfer_data_out <= false;
- new_sr_return_state <= READ_BLOCK_CRC;
- set_sr_return_state <= true;
- end if;
- new_state <= SEND_RCV;
- end if;
- else
- -- Abort transfer
- new_byte_counter <= byte_counter - 1; set_byte_counter <= true;
- -- Next byte
- new_bit_counter <= 7;
- if byte_counter=1 then
- new_transfer_data_out <= false;
- new_sr_return_state <= READ_BLOCK_CRC;
- set_sr_return_state <= true;
- end if;
- new_state <= SEND_RCV;
- end if;
- else
- new_bit_counter <= 7;
- new_state <= sr_return_state;
- new_byte_counter <= byte_counter - 1; set_byte_counter <= true;
- end if;
- else
- new_bit_counter <= bit_counter - 1;
- new_data_out <= data_out(6 downto 0) & '1';
- new_state <= SEND_RCV;
- end if;
- else
- new_sclk <= '1';
- new_clock_divider <= clock_divider - 1;
- end if;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement