From bbd38ee214463434db2af9e36d765cdae07550e8 Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Sun, 20 Dec 2020 16:27:13 +0100 Subject: [PATCH] MiST: further update of common modules --- common/mist/data_io.v | 11 +++++++---- common/mist/mist.vhd | 2 +- common/mist/user_io.v | 11 ++++++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/common/mist/data_io.v b/common/mist/data_io.v index 8ca99fcc..7e14f129 100644 --- a/common/mist/data_io.v +++ b/common/mist/data_io.v @@ -28,7 +28,7 @@ module data_io input SPI_SS2, input SPI_SS4, input SPI_DI, - inout reg SPI_DO, + inout SPI_DO, input clkref_n, // assert ioctl_wr one cycle after clkref stobe (negative active) @@ -53,11 +53,13 @@ parameter ROM_DIRECT_UPLOAD = 0; reg [7:0] data_w; reg [7:0] data_w2 = 0; +reg [3:0] cnt; reg rclk = 0; reg rclk2 = 0; reg addr_reset = 0; reg downloading_reg = 0; reg uploading_reg = 0; +reg reg_do; localparam DIO_FILE_TX = 8'h53; localparam DIO_FILE_TX_DAT = 8'h54; @@ -66,19 +68,20 @@ localparam DIO_FILE_INFO = 8'h56; localparam DIO_FILE_RX = 8'h57; localparam DIO_FILE_RX_DAT = 8'h58; +assign SPI_DO = reg_do; + // data_io has its own SPI interface to the io controller always@(negedge SPI_SCK or posedge SPI_SS2) begin : SPI_TRANSMITTER reg [7:0] dout_r; if(SPI_SS2) begin - SPI_DO <= 1'bZ; + reg_do <= 1'bZ; end else begin if (cnt == 15) dout_r <= ioctl_din; - SPI_DO <= dout_r[~cnt[2:0]]; + reg_do <= dout_r[~cnt[2:0]]; end end -reg [3:0] cnt; always@(posedge SPI_SCK, posedge SPI_SS2) begin : SPI_RECEIVER reg [6:0] sbuf; diff --git a/common/mist/mist.vhd b/common/mist/mist.vhd index 38fa2924..0dfa2860 100644 --- a/common/mist/mist.vhd +++ b/common/mist/mist.vhd @@ -30,7 +30,7 @@ port ( joystick_4 : out std_logic_vector(31 downto 0); joystick_analog_0 : out std_logic_vector(15 downto 0); joystick_analog_1 : out std_logic_vector(15 downto 0); - status : out std_logic_vector(31 downto 0); + status : out std_logic_vector(63 downto 0); switches : out std_logic_vector(1 downto 0); buttons : out std_logic_vector(1 downto 0); scandoubler_disable : out std_logic; diff --git a/common/mist/user_io.v b/common/mist/user_io.v index 609f6d49..25cf9c4c 100644 --- a/common/mist/user_io.v +++ b/common/mist/user_io.v @@ -47,8 +47,11 @@ module user_io #(parameter STRLEN=0, parameter PS2DIV=100, parameter ROM_DIRECT_ output scandoubler_disable, output ypbpr, output no_csync, - output reg [31:0] status, + output reg [63:0] status, output reg [6:0] core_mod, // core variant, sent before the config string is requested + // RTC data from IO controller + // sec, min, hour, date, month, year, day (BCD) + output reg [63:0] rtc, // connection to sd card emulation input [31:0] sd_lba, @@ -497,12 +500,14 @@ always @(posedge clk_sys) begin : cmd_block 8'h15: status <= spi_byte_in; - // status, 32bit version - 8'h1e: if(abyte_cnt<5) status[(abyte_cnt-1)<<3 +:8] <= spi_byte_in; + // status, 64bit version + 8'h1e: if(abyte_cnt<9) status[(abyte_cnt-1)<<3 +:8] <= spi_byte_in; // core variant 8'h21: core_mod <= spi_byte_in[6:0]; + // RTC + 8'h22: if(abyte_cnt<9) rtc[(abyte_cnt-1)<<3 +:8] <= spi_byte_in; endcase end end