diff --git a/MainController/MainController.bdf b/MainController/MainController.bdf index 8e708d5..8721852 100644 --- a/MainController/MainController.bdf +++ b/MainController/MainController.bdf @@ -136,11 +136,11 @@ applicable agreement for further details. (line (pt 109 12)(pt 113 8)) ) (text "VCC" (rect 128 7 148 17)(font "Arial" (font_size 6))) - (annotation_block (location)(rect 328 664 376 680)) + (annotation_block (location)(rect 328 648 376 664)) ) (pin (output) - (rect 1336 24 1512 40) + (rect 1840 24 2016 40) (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) (text "FPGA_LED_1" (rect 90 0 158 12)(font "Arial" )) (pt 0 8) @@ -153,11 +153,11 @@ applicable agreement for further details. (line (pt 82 8)(pt 78 12)) (line (pt 78 12)(pt 82 8)) ) - (annotation_block (location)(rect 1512 24 1568 40)) + (annotation_block (location)(rect 2016 24 2072 40)) ) (pin (output) - (rect 1336 112 1512 128) + (rect 1840 112 2016 128) (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) (text "FPGA_LED_2" (rect 90 0 158 12)(font "Arial" )) (pt 0 8) @@ -170,11 +170,11 @@ applicable agreement for further details. (line (pt 82 8)(pt 78 12)) (line (pt 78 12)(pt 82 8)) ) - (annotation_block (location)(rect 1512 112 1568 128)) + (annotation_block (location)(rect 2016 112 2072 128)) ) (pin (output) - (rect 1336 128 1512 144) + (rect 1840 128 2016 144) (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) (text "FPGA_LED_3" (rect 90 0 158 12)(font "Arial" )) (pt 0 8) @@ -187,7 +187,7 @@ applicable agreement for further details. (line (pt 82 8)(pt 78 12)) (line (pt 78 12)(pt 82 8)) ) - (annotation_block (location)(rect 1512 128 1568 144)) + (annotation_block (location)(rect 2016 128 2072 144)) ) (pin (output) @@ -204,7 +204,7 @@ applicable agreement for further details. (line (pt 82 8)(pt 78 12)) (line (pt 78 12)(pt 82 8)) ) - (annotation_block (location)(rect 2024 600 2072 616)) + (annotation_block (location)(rect 2024 584 2072 600)) ) (pin (output) @@ -221,26 +221,25 @@ applicable agreement for further details. (line (pt 82 8)(pt 78 12)) (line (pt 78 12)(pt 82 8)) ) - (annotation_block (location)(rect 2024 616 2072 632)) + (annotation_block (location)(rect 2024 600 2072 616)) ) (pin (bidir) - (rect 368 400 544 416) - (text "BIDIR" (rect 151 0 175 10)(font "Arial" (font_size 6))) - (text "Data[7..0]" (rect 5 0 54 12)(font "Arial" )) - (pt 176 8) + (rect 1840 280 2016 296) + (text "BIDIR" (rect 1 0 25 10)(font "Arial" (font_size 6))) + (text "Data[7..0]" (rect 122 0 171 12)(font "Arial" )) + (pt 0 8) (drawing - (line (pt 120 4)(pt 98 4)) - (line (pt 176 8)(pt 124 8)) - (line (pt 120 12)(pt 98 12)) - (line (pt 98 4)(pt 94 8)) - (line (pt 98 12)(pt 94 8)) - (line (pt 120 4)(pt 124 8)) - (line (pt 124 8)(pt 120 12)) + (line (pt 56 4)(pt 78 4)) + (line (pt 0 8)(pt 52 8)) + (line (pt 56 12)(pt 78 12)) + (line (pt 78 4)(pt 82 8)) + (line (pt 78 12)(pt 82 8)) + (line (pt 56 4)(pt 52 8)) + (line (pt 52 8)(pt 56 12)) ) - (flipy) - (text "VCC" (rect 152 7 172 17)(font "Arial" (font_size 6))) - (annotation_block (location)(rect 296 416 352 528)) + (text "VCC" (rect 4 7 24 17)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2016 168 2072 280)) ) (symbol (rect 704 88 856 200) @@ -324,6 +323,131 @@ applicable agreement for further details. (line (pt 8 8)(pt 24 8)) ) ) +(symbol + (rect 1040 256 1368 368) + (text "RAM" (rect 5 0 28 12)(font "Arial" )) + (text "inst1" (rect 8 96 31 108)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "address[address_bus_width-1..0]" (rect 0 0 161 12)(font "Arial" )) + (text "address[address_bus_width-1..0]" (rect 21 27 182 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "we" (rect 0 0 12 12)(font "Arial" )) + (text "we" (rect 21 43 33 55)(font "Arial" )) + (line (pt 0 48)(pt 16 48)) + ) + (port + (pt 0 64) + (input) + (text "oe" (rect 0 0 11 12)(font "Arial" )) + (text "oe" (rect 21 59 32 71)(font "Arial" )) + (line (pt 0 64)(pt 16 64)) + ) + (port + (pt 0 80) + (input) + (text "ce" (rect 0 0 11 12)(font "Arial" )) + (text "ce" (rect 21 75 32 87)(font "Arial" )) + (line (pt 0 80)(pt 16 80)) + ) + (port + (pt 328 32) + (bidir) + (text "data[data_bus_width-1..0]" (rect 0 0 126 12)(font "Arial" )) + (text "data[data_bus_width-1..0]" (rect 208 27 334 39)(font "Arial" )) + (line (pt 328 32)(pt 312 32)(line_width 3)) + ) + (parameter + "DATA_BUS_WIDTH" + "8" + "" + (type "PARAMETER_SIGNED_DEC") ) + (parameter + "ADDRESS_BUS_WIDTH" + "9" + "" + (type "PARAMETER_SIGNED_DEC") ) + (drawing + (rectangle (rect 16 16 312 96)) + ) + (annotation_block (parameter)(rect 1040 200 1280 248)) +) +(symbol + (rect 704 208 936 336) + (text "DigitalFilterBlock" (rect 5 0 95 14)(font "Arial" (font_size 8))) + (text "inst3" (rect 8 112 31 124)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clk" (rect 0 0 15 14)(font "Arial" (font_size 8))) + (text "clk" (rect 21 27 36 41)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)) + ) + (port + (pt 0 48) + (input) + (text "cein" (rect 0 0 23 14)(font "Arial" (font_size 8))) + (text "cein" (rect 21 43 44 57)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)) + ) + (port + (pt 0 64) + (input) + (text "oein" (rect 0 0 23 14)(font "Arial" (font_size 8))) + (text "oein" (rect 21 59 44 73)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)) + ) + (port + (pt 0 80) + (input) + (text "wein" (rect 0 0 28 14)(font "Arial" (font_size 8))) + (text "wein" (rect 21 75 49 89)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)) + ) + (port + (pt 0 96) + (input) + (text "addressin[8..0]" (rect 0 0 84 14)(font "Arial" (font_size 8))) + (text "addressin[8..0]" (rect 21 91 105 105)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 3)) + ) + (port + (pt 232 32) + (output) + (text "ceout" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "ceout" (rect 180 27 211 41)(font "Arial" (font_size 8))) + (line (pt 232 32)(pt 216 32)) + ) + (port + (pt 232 48) + (output) + (text "oeout" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "oeout" (rect 180 43 211 57)(font "Arial" (font_size 8))) + (line (pt 232 48)(pt 216 48)) + ) + (port + (pt 232 64) + (output) + (text "weout" (rect 0 0 36 14)(font "Arial" (font_size 8))) + (text "weout" (rect 175 59 211 73)(font "Arial" (font_size 8))) + (line (pt 232 64)(pt 216 64)) + ) + (port + (pt 232 80) + (output) + (text "addressout[8..0]" (rect 0 0 93 14)(font "Arial" (font_size 8))) + (text "addressout[8..0]" (rect 118 75 211 89)(font "Arial" (font_size 8))) + (line (pt 232 80)(pt 216 80)(line_width 3)) + ) + (drawing + (rectangle (rect 16 16 216 112)) + ) +) (symbol (rect 1040 544 1368 688) (text "RAM9X8_SerialBusMaster" (rect 5 0 131 12)(font "Arial" )) @@ -411,6 +535,16 @@ applicable agreement for further details. "3" "" (type "PARAMETER_SIGNED_DEC") ) + (parameter + "REG_ADDR_CONTROL_UPPER_BYTE" + "4" + "" + (type "PARAMETER_SIGNED_DEC") ) + (parameter + "REG_ADDR_CONTROL_LOWER_BYTE" + "5" + "" + (type "PARAMETER_SIGNED_DEC") ) (parameter "DATA_BUS_WIDTH" "8" @@ -424,132 +558,7 @@ applicable agreement for further details. (drawing (rectangle (rect 16 16 312 128)) ) - (annotation_block (parameter)(rect 1040 432 1333 530)) -) -(symbol - (rect 1040 256 1368 368) - (text "RAM" (rect 5 0 28 12)(font "Arial" )) - (text "inst1" (rect 8 96 31 108)(font "Arial" )) - (port - (pt 0 32) - (input) - (text "address[address_bus_width-1..0]" (rect 0 0 161 12)(font "Arial" )) - (text "address[address_bus_width-1..0]" (rect 21 27 182 39)(font "Arial" )) - (line (pt 0 32)(pt 16 32)(line_width 3)) - ) - (port - (pt 0 48) - (input) - (text "we" (rect 0 0 12 12)(font "Arial" )) - (text "we" (rect 21 43 33 55)(font "Arial" )) - (line (pt 0 48)(pt 16 48)) - ) - (port - (pt 0 64) - (input) - (text "oe" (rect 0 0 11 12)(font "Arial" )) - (text "oe" (rect 21 59 32 71)(font "Arial" )) - (line (pt 0 64)(pt 16 64)) - ) - (port - (pt 0 80) - (input) - (text "ce" (rect 0 0 11 12)(font "Arial" )) - (text "ce" (rect 21 75 32 87)(font "Arial" )) - (line (pt 0 80)(pt 16 80)) - ) - (port - (pt 328 32) - (bidir) - (text "data[data_bus_width-1..0]" (rect 0 0 126 12)(font "Arial" )) - (text "data[data_bus_width-1..0]" (rect 208 27 334 39)(font "Arial" )) - (line (pt 328 32)(pt 312 32)(line_width 3)) - ) - (parameter - "DATA_BUS_WIDTH" - "8" - "" - (type "PARAMETER_SIGNED_DEC") ) - (parameter - "ADDRESS_BUS_WIDTH" - "9" - "" - (type "PARAMETER_SIGNED_DEC") ) - (drawing - (rectangle (rect 16 16 312 96)) - ) - (annotation_block (parameter)(rect 1040 208 1280 256)) -) -(symbol - (rect 704 208 936 336) - (text "DigitalFilterBlock" (rect 5 0 95 14)(font "Arial" (font_size 8))) - (text "inst3" (rect 8 112 31 124)(font "Arial" )) - (port - (pt 0 32) - (input) - (text "clk" (rect 0 0 15 14)(font "Arial" (font_size 8))) - (text "clk" (rect 21 27 36 41)(font "Arial" (font_size 8))) - (line (pt 0 32)(pt 16 32)) - ) - (port - (pt 0 48) - (input) - (text "cein" (rect 0 0 23 14)(font "Arial" (font_size 8))) - (text "cein" (rect 21 43 44 57)(font "Arial" (font_size 8))) - (line (pt 0 48)(pt 16 48)) - ) - (port - (pt 0 64) - (input) - (text "oein" (rect 0 0 23 14)(font "Arial" (font_size 8))) - (text "oein" (rect 21 59 44 73)(font "Arial" (font_size 8))) - (line (pt 0 64)(pt 16 64)) - ) - (port - (pt 0 80) - (input) - (text "wein" (rect 0 0 28 14)(font "Arial" (font_size 8))) - (text "wein" (rect 21 75 49 89)(font "Arial" (font_size 8))) - (line (pt 0 80)(pt 16 80)) - ) - (port - (pt 0 96) - (input) - (text "addressin[8..0]" (rect 0 0 84 14)(font "Arial" (font_size 8))) - (text "addressin[8..0]" (rect 21 91 105 105)(font "Arial" (font_size 8))) - (line (pt 0 96)(pt 16 96)(line_width 3)) - ) - (port - (pt 232 32) - (output) - (text "ceout" (rect 0 0 31 14)(font "Arial" (font_size 8))) - (text "ceout" (rect 180 27 211 41)(font "Arial" (font_size 8))) - (line (pt 232 32)(pt 216 32)) - ) - (port - (pt 232 48) - (output) - (text "oeout" (rect 0 0 31 14)(font "Arial" (font_size 8))) - (text "oeout" (rect 180 43 211 57)(font "Arial" (font_size 8))) - (line (pt 232 48)(pt 216 48)) - ) - (port - (pt 232 64) - (output) - (text "weout" (rect 0 0 36 14)(font "Arial" (font_size 8))) - (text "weout" (rect 175 59 211 73)(font "Arial" (font_size 8))) - (line (pt 232 64)(pt 216 64)) - ) - (port - (pt 232 80) - (output) - (text "addressout[8..0]" (rect 0 0 93 14)(font "Arial" (font_size 8))) - (text "addressout[8..0]" (rect 118 75 211 89)(font "Arial" (font_size 8))) - (line (pt 232 80)(pt 216 80)(line_width 3)) - ) - (drawing - (rectangle (rect 16 16 216 112)) - ) + (annotation_block (parameter)(rect 1040 416 1360 544)) ) (connector (pt 560 32) @@ -659,11 +668,6 @@ applicable agreement for further details. (pt 704 240) (pt 680 240) ) -(connector - (pt 544 408) - (pt 1440 408) - (bus) -) (connector (pt 952 240) (pt 952 336) @@ -680,10 +684,6 @@ applicable agreement for further details. (pt 680 -16) (pt 936 -16) ) -(connector - (pt 824 32) - (pt 1336 32) -) (connector (pt 608 32) (pt 608 136) @@ -713,16 +713,6 @@ applicable agreement for further details. (pt 1040 640) (pt 952 640) ) -(connector - (pt 1440 288) - (pt 1440 408) - (bus) -) -(connector - (pt 1368 288) - (pt 1440 288) - (bus) -) (connector (pt 856 136) (pt 936 136) @@ -731,6 +721,15 @@ applicable agreement for further details. (pt 936 -16) (pt 936 136) ) +(connector + (pt 824 32) + (pt 1840 32) +) +(connector + (pt 1840 288) + (pt 1368 288) + (bus) +) (junction (pt 608 32)) (junction (pt 1000 288)) (junction (pt 984 304)) diff --git a/MainController/RAM9X8_SerialBusMaster.bsf b/MainController/RAM9X8_SerialBusMaster.bsf index f86a7c4..1ef5439 100644 --- a/MainController/RAM9X8_SerialBusMaster.bsf +++ b/MainController/RAM9X8_SerialBusMaster.bsf @@ -106,6 +106,16 @@ applicable agreement for further details. "3" "" (type "PARAMETER_SIGNED_DEC") ) + (parameter + "REG_ADDR_CONTROL_UPPER_BYTE" + "4" + "" + (type "PARAMETER_SIGNED_DEC") ) + (parameter + "REG_ADDR_CONTROL_LOWER_BYTE" + "5" + "" + (type "PARAMETER_SIGNED_DEC") ) (parameter "DATA_BUS_WIDTH" "8" diff --git a/MainController/RAM9X8_SerialBusMaster.vhd b/MainController/RAM9X8_SerialBusMaster.vhd index 97262d4..b74ae0e 100644 --- a/MainController/RAM9X8_SerialBusMaster.vhd +++ b/MainController/RAM9X8_SerialBusMaster.vhd @@ -8,6 +8,8 @@ entity RAM9X8_SerialBusMaster is REG_ADDR_DATA_LOWER_BYTE : integer := 1; REG_ADDR_CMD_UPPER_BYTE : integer := 2; REG_ADDR_CMD_LOWER_BYTE : integer := 3; + REG_ADDR_CONTROL_UPPER_BYTE : integer := 4; + REG_ADDR_CONTROL_LOWER_BYTE : integer := 5; DATA_BUS_WIDTH : integer := 8; ADDRESS_BUS_WIDTH : integer := 9 @@ -30,9 +32,10 @@ end entity; architecture behavorial of RAM9X8_SerialBusMaster is -signal dataBufIn : std_logic_vector(DATA_BUS_WIDTH*2 - 1 downto 0); -signal dataBufOut : std_logic_vector(DATA_BUS_WIDTH*2 - 1 downto 0); -signal cmdBuf : std_logic_vector(DATA_BUS_WIDTH*2 - 1 downto 0); +signal dataBufIn : std_logic_vector(15 downto 0) := (others => '0'); +signal dataBufOut : std_logic_vector(15 downto 0) := (others => '0'); +signal cmdBuf : std_logic_vector(15 downto 0) := (others => '0'); +signal controlBuf : std_logic_vector(15 downto 0) := (others => '0'); signal direction : std_logic := '0'; signal addressToTransmit : std_logic_vector(7 downto 0) := x"00"; @@ -55,11 +58,12 @@ signal startPrev : std_logic := '0'; begin process (we, oe, ce) - variable addr : integer range 0 to 511 := 0; + variable addr : integer range 0 to 2**ADDRESS_BUS_WIDTH - 1 := 0; begin if (ce = '0') then -- Если микросхема выбрана addr := conv_integer(address); - if (addr = REG_ADDR_DATA_UPPER_BYTE or addr = REG_ADDR_DATA_LOWER_BYTE or addr = REG_ADDR_CMD_UPPER_BYTE or addr = REG_ADDR_CMD_LOWER_BYTE) then + if (addr = REG_ADDR_DATA_UPPER_BYTE or addr = REG_ADDR_DATA_LOWER_BYTE or addr = REG_ADDR_CMD_UPPER_BYTE or addr = REG_ADDR_CMD_LOWER_BYTE + or addr = REG_ADDR_CONTROL_UPPER_BYTE or addr = REG_ADDR_CONTROL_LOWER_BYTE) then if (oe = '0') then -- Если сигнал чтения активен case addr is when REG_ADDR_DATA_UPPER_BYTE => @@ -70,6 +74,10 @@ begin data <= cmdBuf(15 downto 8); when REG_ADDR_CMD_LOWER_BYTE => data <= cmdBuf(7 downto 0); + when REG_ADDR_CONTROL_UPPER_BYTE => + data <= controlBuf(15 downto 8); + when REG_ADDR_CONTROL_UPPER_BYTE => + data <= controlBuf(7 downto 0); when others => data <= (others => 'Z'); -- Запретить запись на шину end case; @@ -125,6 +133,7 @@ begin dataCRC(15 downto 0) <= dataBufIn; CommunicationState <= TransmitAddress; lineBusy <= '1'; + controlBuf <= (others => '0'); end if; when TransmitAddress => if bitCnt = -1 then @@ -182,7 +191,6 @@ begin if readyCRC = '1' then if bitCnt = -1 then CommunicationState <= TransmitCheck; - --errors(1) <= '0'; else if count < count and state = 1 then sbdataout <= CRC(bitCnt); @@ -202,8 +210,7 @@ begin end if; else CommunicationState <= Waiting; - --errors(1) <= '1'; - --countError1 <= countError1 + 1; + controlBuf(15) <= '1'; end if; when TransmitCheck => if count < countValue and state = 1 then @@ -213,11 +220,9 @@ begin count := 0; state := 0; if sbdatain = '0' then - --countSuccessfulTransmite <= countSuccessfulTransmite + 1; - --errors(0) <= '0'; + controlBuf(0) <= '1'; else - --errors(0) <= '1'; - --countError0 <= countError0 + 1; + controlBuf(14) <= '1'; end if; CommunicationState <= Waiting; end if; @@ -271,17 +276,13 @@ begin when ReceiveCheck => if readyCRC = '1' then if bufCRC = CRC then - --countSuccessfulReceive <= countSuccessfulReceive + 1; dataBufOut <= dataFromDevices; - --errors(3) <= '0'; + controlBuf(0) <= '1'; else - --errors(3) <= '1'; - --countError3 <= countError3 + 1; - end if; - --errors(2) <= '0'; + controlBuf(13) <= '1'; + end if; else - --errors(2) <= '1'; - --countError2 <= countError2 + 1; + controlBuf(12) <= '1'; end if; CommunicationState <= Waiting; when others =>