add encoding SM --not finish yet
This commit is contained in:
		| @@ -34,10 +34,13 @@ TYPE SENDING_STATE_TYPE IS ( | ||||
|         sendR4, | ||||
|         waitR4, | ||||
|         sendR5, | ||||
|         waitSpace, | ||||
|         waitEndWord | ||||
|     ); | ||||
| signal sending_current_state, sending_next_state : SENDING_STATE_TYPE; | ||||
|  | ||||
| signal signSendRegisters, signRegistersSended: std_ulogic; | ||||
|  | ||||
| BEGIN | ||||
|   ------------------------------------------------------------------------------ | ||||
|                                                    -- conditions for morse units | ||||
| @@ -77,6 +80,7 @@ BEGIN | ||||
|   is7 <= '1' when std_match(unsigned(char), "011" & x"7") else '0'; -- 011 0111 | ||||
|   is8 <= '1' when std_match(unsigned(char), "011" & x"8") else '0'; -- 011 1000 | ||||
|   is9 <= '1' when std_match(unsigned(char), "011" & x"9") else '0'; -- 011 1001 | ||||
|   ------------------------------------------------------------------------------ | ||||
|  | ||||
|   process(reset, clock) begin | ||||
|     if reset = '1' then | ||||
| @@ -89,25 +93,33 @@ BEGIN | ||||
|   end process; | ||||
|  | ||||
|  | ||||
|   process(general_current_state) begin | ||||
|   process(reset, clock) begin | ||||
|     case general_current_state is | ||||
|       when waitForChar => | ||||
|         register1 <= END_WORD; | ||||
|         register2 <= END_WORD; | ||||
|         register3 <= END_WORD; | ||||
|         register4 <= END_WORD; | ||||
|         register5 <= END_WORD; | ||||
|         --report "General current state is wait for char" severity note; | ||||
|         register1 <= SPACE; | ||||
|         register2 <= SPACE; | ||||
|         register3 <= SPACE; | ||||
|         register4 <= SPACE; | ||||
|         register5 <= SPACE; | ||||
|         signSendRegisters <= '0'; | ||||
|         if charNotReady = '0' then | ||||
|           general_next_state <= storeChar; | ||||
|           readChar <= '1'; | ||||
|           report "charReady" severity note; | ||||
|         else | ||||
|           general_next_state <= waitForChar; | ||||
|           readChar <= '0'; | ||||
|           --report "charNotReady" severity note; | ||||
|         end if; | ||||
|  | ||||
|       when storeChar => | ||||
|         report "General current state is store char" severity note; | ||||
|         if isA then | ||||
|           register1 <= SHORT; | ||||
|           register2 <= LONG; | ||||
|           general_next_state <= sendRegisters; | ||||
|           report "New char: A" severity note; | ||||
|         elsif isB then | ||||
|           register1 <= LONG; | ||||
|           register2 <= SHORT; | ||||
| @@ -128,6 +140,7 @@ BEGIN | ||||
|         elsif isE then | ||||
|           register1 <= SHORT; | ||||
|           general_next_state <= sendRegisters; | ||||
|           report "New char: E" severity note; | ||||
|         elsif isF then | ||||
|           register1 <= SHORT; | ||||
|           register2 <= SHORT; | ||||
| @@ -149,6 +162,7 @@ BEGIN | ||||
|           register1 <= SHORT; | ||||
|           register2 <= SHORT; | ||||
|           general_next_state <= sendRegisters; | ||||
|           report "New char: I" severity note; | ||||
|         elsif isJ then | ||||
|           register1 <= SHORT; | ||||
|           register2 <= LONG; | ||||
| @@ -170,6 +184,7 @@ BEGIN | ||||
|           register1 <= LONG; | ||||
|           register2 <= LONG; | ||||
|           general_next_state <= sendRegisters; | ||||
|           report "New char: M" severity note; | ||||
|         elsif isN then | ||||
|           register1 <= LONG; | ||||
|           register2 <= SHORT; | ||||
| @@ -204,6 +219,7 @@ BEGIN | ||||
|         elsif isT then | ||||
|           register1 <= LONG; | ||||
|           general_next_state <= sendRegisters; | ||||
|           report "New char: T" severity note; | ||||
|         elsif isU then | ||||
|           register1 <= SHORT; | ||||
|           register2 <= SHORT; | ||||
| @@ -309,36 +325,202 @@ BEGIN | ||||
|           register5 <= SHORT; | ||||
|           general_next_state <= sendRegisters; | ||||
|         else | ||||
|           register1 <= END_WORD; | ||||
|           register2 <= END_WORD; | ||||
|           register3 <= END_WORD; | ||||
|           register4 <= END_WORD; | ||||
|           register5 <= END_WORD; | ||||
|           register1 <= SPACE; | ||||
|           register2 <= SPACE; | ||||
|           register3 <= SPACE; | ||||
|           register4 <= SPACE; | ||||
|           register5 <= SPACE; | ||||
|           general_next_state <= storeChar; | ||||
|           report "Char look not correct" severity warning; | ||||
|         end if; | ||||
|         signSendRegisters <= '1'; | ||||
|  | ||||
|       when sendRegisters => | ||||
|         sending_next_state <= sendR1; | ||||
|         --report "General current state is send registers" severity note; | ||||
|         readChar <= '0'; | ||||
|         signSendRegisters <= '0'; | ||||
|         if signRegistersSended then | ||||
|           general_next_state <= sended; | ||||
|           report "Char is send" severity note; | ||||
|         end if; | ||||
|  | ||||
|       when sended => | ||||
|         register1 <= END_WORD; | ||||
|         register2 <= END_WORD; | ||||
|         register3 <= END_WORD; | ||||
|         register4 <= END_WORD; | ||||
|         register5 <= END_WORD; | ||||
|         --report "General current state is sended" severity note; | ||||
|         general_next_state <= waitForChar; | ||||
|         register1 <= SPACE; | ||||
|         register2 <= SPACE; | ||||
|         register3 <= SPACE; | ||||
|         register4 <= SPACE; | ||||
|         register5 <= SPACE; | ||||
|        | ||||
|       WHEN OTHERS => | ||||
|         report "General current state is BROKEN" severity warning; | ||||
|         general_next_state <= waitForChar; | ||||
|  | ||||
|     end case; | ||||
|   end process; | ||||
|  | ||||
|   process(sending_current_state) begin | ||||
|   process(reset, clock) begin | ||||
|     case sending_current_state is | ||||
|  | ||||
|       when waiting => | ||||
|         morseOut <= '0'; | ||||
|         startCounter <= '0'; | ||||
|         unitNb <= "000"; | ||||
|         signRegistersSended <= '0'; | ||||
|         if signSendRegisters = '1' then | ||||
|           sending_next_state <= sendR1; | ||||
|           report "Start to send new char" severity note; | ||||
|         else  | ||||
|           sending_next_state <= waiting; | ||||
|         end if; | ||||
|  | ||||
|       when sendR1 => | ||||
|         report "Send register1" severity note; | ||||
|         startCounter <= '1'; | ||||
|         morseOut <= '1'; | ||||
|         case register1 is | ||||
|           when SHORT => | ||||
|             unitNb <= "001"; | ||||
|           when LONG => | ||||
|             unitNb <= "011"; | ||||
|           when others => | ||||
|             report "Error when sending register1" severity error; | ||||
|         end case; | ||||
|  | ||||
|         case register2 is | ||||
|           when SPACE => | ||||
|             sending_next_state <= waitSpace; | ||||
|           when END_WORD => | ||||
|             sending_next_state <= waitEndWord; | ||||
|           when others => | ||||
|             sending_next_state <= waitR1; | ||||
|         end case; | ||||
|  | ||||
|       when waitR1 => | ||||
|         report "Wait register1" severity note; | ||||
|         startCounter <= '0'; | ||||
|         if counterDone = '1' then | ||||
|           morseOut <= '0'; | ||||
|           sending_next_state <= sendR2; | ||||
|         end if; | ||||
|        | ||||
|       when sendR2 => | ||||
|         report "Send register2" severity note; | ||||
|         startCounter <= '1'; | ||||
|         morseOut <= '1'; | ||||
|         case register2 is | ||||
|           when SHORT => | ||||
|             unitNb <= "001"; | ||||
|           when LONG => | ||||
|             unitNb <= "011"; | ||||
|           when others => | ||||
|             report "Error when sending register2" severity error; | ||||
|         end case; | ||||
|  | ||||
|         case register3 is | ||||
|           when SPACE => | ||||
|             sending_next_state <= waitSpace; | ||||
|           when END_WORD => | ||||
|             sending_next_state <= waitEndWord; | ||||
|           when others => | ||||
|             sending_next_state <= waitR2; | ||||
|         end case; | ||||
|  | ||||
|       when waitR2 => | ||||
|         report "Wait register2" severity note; | ||||
|         startCounter <= '0'; | ||||
|         if counterDone = '1' then | ||||
|           morseOut <= '0'; | ||||
|           sending_next_state <= sendR3; | ||||
|         end if; | ||||
|        | ||||
|       when sendR3 => | ||||
|         report "Send register3" severity note; | ||||
|         startCounter <= '1'; | ||||
|         morseOut <= '1'; | ||||
|         case register3 is | ||||
|           when SHORT => | ||||
|             unitNb <= "001"; | ||||
|           when LONG => | ||||
|             unitNb <= "011"; | ||||
|           when others => | ||||
|             report "Error when sending register3" severity error; | ||||
|         end case; | ||||
|  | ||||
|         case register4 is | ||||
|           when SPACE => | ||||
|             sending_next_state <= waitSpace; | ||||
|           when END_WORD => | ||||
|             sending_next_state <= waitEndWord; | ||||
|           when others => | ||||
|             sending_next_state <= waitR3; | ||||
|         end case; | ||||
|  | ||||
|       when waitR3 => | ||||
|         startCounter <= '0'; | ||||
|         if counterDone = '1' then | ||||
|           morseOut <= '0'; | ||||
|           sending_next_state <= sendR4; | ||||
|         end if; | ||||
|        | ||||
|       when sendR4 => | ||||
|         startCounter <= '1'; | ||||
|         morseOut <= '1'; | ||||
|         case register4 is | ||||
|           when SHORT => | ||||
|             unitNb <= "001"; | ||||
|           when LONG => | ||||
|             unitNb <= "011"; | ||||
|           when others => | ||||
|             report "Error when sending register4" severity error; | ||||
|         end case; | ||||
|  | ||||
|         case register5 is | ||||
|           when SPACE => | ||||
|             sending_next_state <= waitSpace; | ||||
|           when END_WORD => | ||||
|             sending_next_state <= waitEndWord; | ||||
|           when others => | ||||
|             sending_next_state <= waitR4; | ||||
|         end case; | ||||
|  | ||||
|       when waitR4 => | ||||
|         startCounter <= '0'; | ||||
|         if counterDone = '1' then | ||||
|           morseOut <= '0'; | ||||
|           sending_next_state <= sendR5; | ||||
|         end if; | ||||
|        | ||||
|       when sendR5 => | ||||
|         startCounter <= '1'; | ||||
|         morseOut <= '1'; | ||||
|         case register5 is | ||||
|           when SHORT => | ||||
|             unitNb <= "001"; | ||||
|           when LONG => | ||||
|             unitNb <= "011"; | ||||
|           when others => | ||||
|             report "Error when sending register5" severity error; | ||||
|         end case; | ||||
|  | ||||
|           sending_next_state <= waitSpace;   | ||||
|  | ||||
|       when waitSpace => | ||||
|         startCounter <= '0'; | ||||
|         if counterDone = '1' then | ||||
|           morseOut <= '0'; | ||||
|           sending_next_state <= waiting; | ||||
|         end if; | ||||
|         signRegistersSended <= '1'; | ||||
|        | ||||
|       when waitEndWord => | ||||
|         sending_next_state <= waiting; | ||||
|       when others => | ||||
|         sending_next_state <= waiting; | ||||
|  | ||||
|     end case; | ||||
|   end process; | ||||
|  | ||||
|   morseOut <= '0'; | ||||
|   startCounter <= '0'; | ||||
|   unitNb <= (others => '-'); | ||||
|  | ||||
| END ARCHITECTURE studentVersion; | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| -- VHDL Entity Morse.charToMorse.symbol | ||||
| -- | ||||
| -- Created: | ||||
| --          by - axel.amand.UNKNOWN (WE7860) | ||||
| --          at - 14:49:52 28.04.2023 | ||||
| --          by - remi.heredero.UNKNOWN (WE2330808) | ||||
| --          at - 13:09:12 10.04.2024 | ||||
| -- | ||||
| -- Generated by Mentor Graphics' HDL Designer(TM) 2019.2 (Build 5) | ||||
| -- | ||||
|   | ||||
| @@ -2,8 +2,8 @@ | ||||
| -- VHDL Architecture Morse.charToMorse.struct | ||||
| -- | ||||
| -- Created: | ||||
| --          by - axel.amand.UNKNOWN (WE7860) | ||||
| --          at - 14:49:52 28.04.2023 | ||||
| --          by - remi.heredero.UNKNOWN (WE2330808) | ||||
| --          at - 13:09:12 10.04.2024 | ||||
| -- | ||||
| -- Generated by Mentor Graphics' HDL Designer(TM) 2019.2 (Build 5) | ||||
| -- | ||||
|   | ||||
		Reference in New Issue
	
	Block a user