From: Jan Michel Date: Thu, 15 Dec 2022 15:56:05 +0000 (+0100) Subject: Mimosis: Add new common I2C interface, change buffer blocking X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=ca3527f219d3434e9cfea74c54649f30b204b412;p=trb5sc.git Mimosis: Add new common I2C interface, change buffer blocking --- diff --git a/mimosis/code/MimosisInput.vhd b/mimosis/code/MimosisInput.vhd index 1c5a83f..f05f45d 100644 --- a/mimosis/code/MimosisInput.vhd +++ b/mimosis/code/MimosisInput.vhd @@ -25,7 +25,7 @@ end entity; architecture arch of MimosisInput is constant HDR_WORD : std_logic_vector(15 downto 0) := x"FE00"; - constant WORD_LIMIT : integer := 3990; + constant WORD_LIMIT : integer := 8500; signal input_active_i : std_logic; signal data_i : std_logic_vector(15 downto 0); @@ -151,8 +151,8 @@ PROC_FRAMES : process begin if ct_fifo_valid = '1' and ct_fifo_data_out(31 downto 24) = x"FE" then frame_state <= HDR1; frame_number(15 downto 0) <= ct_fifo_data_out(7 downto 0) & ct_fifo_data_out(23 downto 16); - buffer_write <= not buffer_full; - buffer_blocked <= buffer_full; + buffer_write <= '1' when buffer_full = '0' and state = IDLE else '0'; + buffer_blocked <= '0' when buffer_full = '0' and state = IDLE else '1'; count_header <= count_header + 1; end if; when HDR1 => diff --git a/mimosis/config.vhd b/mimosis/config.vhd index 4b4a76a..376e941 100644 --- a/mimosis/config.vhd +++ b/mimosis/config.vhd @@ -53,6 +53,7 @@ package config is constant INCLUDE_SPI : integer := c_NO; --300 slices constant INCLUDE_ADC : integer := c_YES; constant INCLUDE_LCD : integer := c_NO; --800 slices + constant INCLUDE_I2C : integer := c_YES; constant INCLUDE_DEBUG_INTERFACE: integer := c_NO; --300 slices --input monitor and trigger generation logic diff --git a/mimosis/par.p2t b/mimosis/par.p2t index 2c43fcd..f989847 100644 --- a/mimosis/par.p2t +++ b/mimosis/par.p2t @@ -4,7 +4,7 @@ #-m nodelist.txt # Controlled by the compile.pl script. #-n 1 # Controlled by the compile.pl script. -s 10 --t 4 +-t 6 -c 2 -e 2 -i 10 diff --git a/mimosis/trb5sc_mimosis.prj b/mimosis/trb5sc_mimosis.prj index da91664..ccbecb7 100644 --- a/mimosis/trb5sc_mimosis.prj +++ b/mimosis/trb5sc_mimosis.prj @@ -106,6 +106,7 @@ add_file -vhdl -lib work "../../trbnet/special/spi_slim.vhd" add_file -vhdl -lib work "../../trbnet/special/spi_databus_memory.vhd" add_file -vhdl -lib work "../../trbnet/special/fpga_reboot.vhd" add_file -vhdl -lib work "../../trb3sc/code/trb3sc_tools.vhd" +add_file -vhdl -lib work "../../trb3sc/code/common_i2c.vhd" add_file -vhdl -lib work "../../trb3sc/code/lcd.vhd" add_file -vhdl -lib work "../../trb3sc/code/debuguart.vhd" add_file -vhdl -lib work "../../trbnet/special/uart.vhd" @@ -203,6 +204,10 @@ add_file -vhdl -lib work "../../vhdlbasics/interface/i2c_gstart.vhd" add_file -vhdl -lib work "../../vhdlbasics/interface/i2c_sendb.vhd" add_file -vhdl -lib work "../../vhdlbasics/interface/i2c_slim.vhd" +add_file -vhdl -lib work "../../vhdlbasics/interface/i2c_gstart2.vhd" +add_file -vhdl -lib work "../../vhdlbasics/interface/i2c_sendb2.vhd" +add_file -vhdl -lib work "../../vhdlbasics/interface/i2c_slim2.vhd" + add_file -vhdl -lib work "./cores/mimosis_inp.vhd" add_file -vhdl -lib work "./cores/testout.vhd" add_file -vhdl -lib work "./code/MimosisInput.vhd" diff --git a/mimosis/trb5sc_mimosis.vhd b/mimosis/trb5sc_mimosis.vhd index 71218f6..78967c0 100644 --- a/mimosis/trb5sc_mimosis.vhd +++ b/mimosis/trb5sc_mimosis.vhd @@ -48,7 +48,7 @@ entity trb5sc_mimosis is H6 : inout std_logic_vector(4 downto 0); H7 : inout std_logic_vector(4 downto 0); - PIN : inout std_logic_vector(8 downto 1); + PIN : out std_logic_vector(8 downto 1); MIMOSIS_SCL, MIMOSIS_SDA : inout std_logic; @@ -81,7 +81,8 @@ entity trb5sc_mimosis is --Other Connectors TEST : inout std_logic_vector(14 downto 1); --on v1 only - HDR_IO : inout std_logic_vector(23 downto 0) --23..16 on v2 only + --COMMON_SDA, COMMON_SCL : inout std_logic + HDR_IO : inout std_logic_vector(15 downto 0) --23..16 on v2 only ); @@ -151,7 +152,7 @@ architecture arch of trb5sc_mimosis is signal mimosis_scl_drv, mimosis_sda_drv : std_logic; signal i2c_go_100, i2c_go : std_logic; signal i2c_reg_5_40 : std_logic_vector(31 downto 0); - + signal counter : unsigned(23 downto 0); --signal fwd_dst_mac : std_logic_vector(47 downto 0); --signal fwd_dst_ip : std_logic_vector(31 downto 0); --signal fwd_dst_port : std_logic_vector(15 downto 0); @@ -375,7 +376,9 @@ RJ(0) <= clk_40; SPI_MISO_IN => spi_miso, SPI_CLK_OUT => spi_clk, --Header - HEADER_IO => open, --HDR_IO(9 downto 0), + --HEADER_IO => open, + HEADER_IO(7) => HDR_IO(6), + HEADER_IO(8) => HDR_IO(7), ADDITIONAL_REG => add_reg, --ADC ADC_CS => ADC_NCS, @@ -399,15 +402,20 @@ RJ(0) <= clk_40; DEBUG_OUT => debug_tools ); +--counter <= counter + '1' when rising_edge(clk_sys); +--HDR_IO <= std_logic_vector(counter(15 downto 0)); +--LED <= std_logic_vector(counter(23 downto 16)); - + --COMMON_SDA(6) <= '0' when (add_reg(31) = '1') else 'Z'; + --COMMON_SCL(7) <= '0' when (add_reg(30) = '1') else 'Z'; + FLASH_HOLD <= '1'; FLASH_WP <= '1'; --------------------------------------------------------------------------- -- I2C --------------------------------------------------------------------------- -THE_I2C : entity work.i2c_slim +THE_I2C : entity work.i2c_slim2 port map( CLOCK => clk_40, RESET => reset_i, @@ -415,6 +423,7 @@ THE_I2C : entity work.i2c_slim I2C_GO_IN => i2c_go, ACTION_IN => i2c_reg_1(8), -- '0' -> write, '1' -> read WORD_IN => i2c_reg_1(0), -- '0' -> byte, '1' -> word + DIRECT_IN => i2c_reg_1(4), -- don't send command I2C_SPEED_IN => i2c_reg_0(5 downto 0), -- speed adjustment (to be defined) I2C_ADDR_IN => i2c_reg_2(7 downto 0), -- I2C address byte (R/W bit is ignored) I2C_CMD_IN => i2c_reg_2(15 downto 8), -- I2C command byte (sent after address byte) @@ -430,12 +439,18 @@ THE_I2C : entity work.i2c_slim SCL_IN => PIN(3), SCL_OUT => mimosis_scl_drv, -- Debug - BSM_OUT => i2c_reg_4(28 downto 24) + BSM_OUT => i2c_reg_4(27 downto 24) ); -- I2C signal open collector driver -PIN(4) <= '0' when (mimosis_sda_drv = '0') else 'Z'; -PIN(3) <= '0' when (mimosis_scl_drv = '0') else 'Z'; +-- PIN(4) <= '0' when (mimosis_sda_drv = '0') else 'Z'; +-- PIN(3) <= '0' when (mimosis_scl_drv = '0') else 'Z'; + +PIN(4) <= MIMOSIS_SDA; +PIN(3) <= MIMOSIS_SCL; +MIMOSIS_SDA <= '0' when (mimosis_sda_drv = '0') else 'Z'; +MIMOSIS_SCL <= '0' when (mimosis_scl_drv = '0') else 'Z'; + H5(1) <= i2c_reg_5_40(0); --MIMOSIS_SYNC PIN(1) <= i2c_reg_5_40(4); --MIMOSIS_START PIN(2) <= i2c_reg_5_40(8); --MIMOSIS_RESET diff --git a/pinout/trb5sc_hdmi.lpf b/pinout/trb5sc_hdmi.lpf index fc4791e..ac445dc 100644 --- a/pinout/trb5sc_hdmi.lpf +++ b/pinout/trb5sc_hdmi.lpf @@ -88,8 +88,8 @@ LOCATE COMP "H5[3]" SITE "R32" ; #was "FE_DIFF[6]" LOCATE COMP "H7[3]" SITE "W30" ; #was "FE_DIFF[7]" #LOCATE COMP "H5[4]" SITE "T32" ; #was "FE_DIFF[8]" -LOCATE COMP "MIMOSIS_SCL" SITE "T32" ; #was "FE_DIFF[8]" -LOCATE COMP "MIMOSIS_SDA" SITE "U32" ; #was "FE_DIFF[8]" +LOCATE COMP "MIMOSIS_SCL" SITE "U32" ; #was "FE_DIFF[8]" +LOCATE COMP "MIMOSIS_SDA" SITE "T32" ; #was "FE_DIFF[8]" IOBUF PORT "MIMOSIS_SCL" IO_TYPE=LVCMOS25 ; IOBUF PORT "MIMOSIS_SDA" IO_TYPE=LVCMOS25 ; @@ -284,9 +284,14 @@ LOCATE COMP "HDR_IO_22" SITE "F22"; #on HDR_15 LOCATE COMP "HDR_IO_23" SITE "F20"; #on HDR_14 DEFINE PORT GROUP "HDR_group" "HDR*" ; -IOBUF GROUP "HDR_group" IO_TYPE=LVCMOS25 PULLMODE=DOWN ; +IOBUF GROUP "HDR_group" IO_TYPE=LVCMOS25 PULLMODE=UP ; +LOCATE COMP "COMMON_SDA" SITE "B22"; #on HDR_2 +LOCATE COMP "COMMON_SCL" SITE "D24"; #on HDR_9 +DEFINE PORT GROUP "COMMON_group" "COMMON*" ; +IOBUF GROUP "COMMON_group" IO_TYPE=LVCMOS25 PULLMODE=UP ; + ################################################################# # Test & Other IO - from version 1 boards (TEST pins have not been reassigned) #################################################################