ARCHITECTURE studentVersion OF charToMorseController IS signal isA, isB, isC, isD, isE, isF, isG, isH, isI, isJ, isK, isL, isM, isN, isO, isP, isQ, isR, isS, isT, isU, isV, isW, isX, isY, isZ, is0, is1, is2, is3, is4, is5, is6, is7, is8, is9 : std_ulogic; type T_MORSE is (SHORT, LONG, SPACE, END_WORD); --type registers_type is array (1 to 5) of T_MORSE; signal register1: T_MORSE; signal register2: T_MORSE; signal register3: T_MORSE; signal register4: T_MORSE; signal register5: T_MORSE; TYPE GENERAL_STATE_TYPE IS ( waitForChar, storeChar, sendRegisters, sended ); signal general_current_state, general_next_state : GENERAL_STATE_TYPE; TYPE SENDING_STATE_TYPE IS ( waiting, sendR1, waitR1, sendR2, waitR2, sendR3, waitR3, sendR4, waitR4, sendR5, waitEndWord ); signal sending_current_state, sending_next_state : SENDING_STATE_TYPE; BEGIN ------------------------------------------------------------------------------ -- conditions for morse units isA <= '1' when std_match(unsigned(char), "1-0" & x"1") else '0'; -- 1-0 0001 isB <= '1' when std_match(unsigned(char), "1-0" & x"2") else '0'; -- 1-0 0010 isC <= '1' when std_match(unsigned(char), "1-0" & x"3") else '0'; -- 1-0 0011 isD <= '1' when std_match(unsigned(char), "1-0" & x"4") else '0'; -- 1-0 0100 isE <= '1' when std_match(unsigned(char), "1-0" & x"5") else '0'; -- 1-0 0101 isF <= '1' when std_match(unsigned(char), "1-0" & x"6") else '0'; -- 1-0 0110 isG <= '1' when std_match(unsigned(char), "1-0" & x"7") else '0'; -- 1-0 0111 isH <= '1' when std_match(unsigned(char), "1-0" & x"8") else '0'; -- 1-0 1000 isI <= '1' when std_match(unsigned(char), "1-0" & x"9") else '0'; -- 1-0 1001 isJ <= '1' when std_match(unsigned(char), "1-0" & x"A") else '0'; -- 1-0 1010 isK <= '1' when std_match(unsigned(char), "1-0" & x"B") else '0'; -- 1-0 1011 isL <= '1' when std_match(unsigned(char), "1-0" & x"C") else '0'; -- 1-0 1100 isM <= '1' when std_match(unsigned(char), "1-0" & x"D") else '0'; -- 1-0 1101 isN <= '1' when std_match(unsigned(char), "1-0" & x"E") else '0'; -- 1-0 1110 isO <= '1' when std_match(unsigned(char), "1-0" & x"F") else '0'; -- 1-0 1111 isP <= '1' when std_match(unsigned(char), "1-1" & x"0") else '0'; -- 1-1 0000 isQ <= '1' when std_match(unsigned(char), "1-1" & x"1") else '0'; -- 1-1 0001 isR <= '1' when std_match(unsigned(char), "1-1" & x"2") else '0'; -- 1-1 0010 isS <= '1' when std_match(unsigned(char), "1-1" & x"3") else '0'; -- 1-1 0011 isT <= '1' when std_match(unsigned(char), "1-1" & x"4") else '0'; -- 1-1 0100 isU <= '1' when std_match(unsigned(char), "1-1" & x"5") else '0'; -- 1-1 0101 isV <= '1' when std_match(unsigned(char), "1-1" & x"6") else '0'; -- 1-1 0110 isW <= '1' when std_match(unsigned(char), "1-1" & x"7") else '0'; -- 1-1 0111 isX <= '1' when std_match(unsigned(char), "1-1" & x"8") else '0'; -- 1-1 1000 isY <= '1' when std_match(unsigned(char), "1-1" & x"9") else '0'; -- 1-1 1001 isZ <= '1' when std_match(unsigned(char), "1-1" & x"A") else '0'; -- 1-1 1010 is0 <= '1' when std_match(unsigned(char), "011" & x"0") else '0'; -- 011 0000 is1 <= '1' when std_match(unsigned(char), "011" & x"1") else '0'; -- 011 0001 is2 <= '1' when std_match(unsigned(char), "011" & x"2") else '0'; -- 011 0010 is3 <= '1' when std_match(unsigned(char), "011" & x"3") else '0'; -- 011 0011 is4 <= '1' when std_match(unsigned(char), "011" & x"4") else '0'; -- 011 0100 is5 <= '1' when std_match(unsigned(char), "011" & x"5") else '0'; -- 011 0101 is6 <= '1' when std_match(unsigned(char), "011" & x"6") else '0'; -- 011 0110 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 general_current_state <= waitForChar; sending_current_state <= waiting; elsif rising_edge(clock) then general_current_state <= general_next_state; sending_current_state <= sending_next_state; end if; end process; process(general_current_state) begin case general_current_state is when waitForChar => register1 <= END_WORD; register2 <= END_WORD; register3 <= END_WORD; register4 <= END_WORD; register5 <= END_WORD; if charNotReady = '0' then general_next_state <= storeChar; else general_next_state <= waitForChar; end if; when storeChar => if isA then register1 <= SHORT; register2 <= LONG; general_next_state <= sendRegisters; elsif isB then register1 <= LONG; register2 <= SHORT; register3 <= SHORT; register4 <= SHORT; general_next_state <= sendRegisters; elsif isC then register1 <= LONG; register2 <= SHORT; register3 <= LONG; register4 <= SHORT; general_next_state <= sendRegisters; elsif isD then register1 <= LONG; register2 <= SHORT; register3 <= SHORT; general_next_state <= sendRegisters; elsif isE then register1 <= SHORT; general_next_state <= sendRegisters; elsif isF then register1 <= SHORT; register2 <= SHORT; register3 <= LONG; register4 <= SHORT; general_next_state <= sendRegisters; elsif isG then register1 <= LONG; register2 <= LONG; register3 <= SHORT; general_next_state <= sendRegisters; elsif isH then register1 <= SHORT; register2 <= SHORT; register3 <= SHORT; register4 <= SHORT; general_next_state <= sendRegisters; elsif isI then register1 <= SHORT; register2 <= SHORT; general_next_state <= sendRegisters; elsif isJ then register1 <= SHORT; register2 <= LONG; register3 <= LONG; register4 <= LONG; general_next_state <= sendRegisters; elsif isK then register1 <= LONG; register2 <= SHORT; register3 <= LONG; general_next_state <= sendRegisters; elsif isL then register1 <= SHORT; register2 <= LONG; register3 <= SHORT; register4 <= SHORT; general_next_state <= sendRegisters; elsif isM then register1 <= LONG; register2 <= LONG; general_next_state <= sendRegisters; elsif isN then register1 <= LONG; register2 <= SHORT; general_next_state <= sendRegisters; elsif isO then register1 <= LONG; register2 <= LONG; register3 <= LONG; general_next_state <= sendRegisters; elsif isP then register1 <= SHORT; register2 <= LONG; register3 <= LONG; register4 <= SHORT; general_next_state <= sendRegisters; elsif isQ then register1 <= LONG; register2 <= LONG; register3 <= SHORT; register4 <= LONG; general_next_state <= sendRegisters; elsif isR then register1 <= SHORT; register2 <= LONG; register3 <= SHORT; general_next_state <= sendRegisters; elsif isS then register1 <= SHORT; register2 <= SHORT; register3 <= SHORT; general_next_state <= sendRegisters; elsif isT then register1 <= LONG; general_next_state <= sendRegisters; elsif isU then register1 <= SHORT; register2 <= SHORT; register3 <= LONG; general_next_state <= sendRegisters; elsif isV then register1 <= SHORT; register2 <= SHORT; register3 <= SHORT; register4 <= LONG; general_next_state <= sendRegisters; elsif isW then register1 <= SHORT; register2 <= LONG; register3 <= LONG; general_next_state <= sendRegisters; elsif isX then register1 <= LONG; register2 <= SHORT; register3 <= SHORT; register4 <= LONG; general_next_state <= sendRegisters; elsif isY then register1 <= LONG; register2 <= SHORT; register3 <= LONG; register4 <= LONG; general_next_state <= sendRegisters; elsif isZ then register1 <= LONG; register2 <= LONG; register3 <= SHORT; register4 <= SHORT; general_next_state <= sendRegisters; elsif is0 then register1 <= LONG; register2 <= LONG; register3 <= LONG; register4 <= LONG; register5 <= LONG; general_next_state <= sendRegisters; elsif is1 then register1 <= SHORT; register2 <= LONG; register3 <= LONG; register4 <= LONG; register5 <= LONG; general_next_state <= sendRegisters; elsif is2 then register1 <= SHORT; register2 <= SHORT; register3 <= LONG; register4 <= LONG; register5 <= LONG; general_next_state <= sendRegisters; elsif is3 then register1 <= SHORT; register2 <= SHORT; register3 <= SHORT; register4 <= LONG; register5 <= LONG; general_next_state <= sendRegisters; elsif is4 then register1 <= SHORT; register2 <= SHORT; register3 <= SHORT; register4 <= SHORT; register5 <= LONG; general_next_state <= sendRegisters; elsif is5 then register1 <= SHORT; register2 <= SHORT; register3 <= SHORT; register4 <= SHORT; register5 <= SHORT; general_next_state <= sendRegisters; elsif is6 then register1 <= LONG; register2 <= SHORT; register3 <= SHORT; register4 <= SHORT; register5 <= SHORT; general_next_state <= sendRegisters; elsif is7 then register1 <= LONG; register2 <= LONG; register3 <= SHORT; register4 <= SHORT; register5 <= SHORT; general_next_state <= sendRegisters; elsif is8 then register1 <= LONG; register2 <= LONG; register3 <= LONG; register4 <= SHORT; register5 <= SHORT; general_next_state <= sendRegisters; elsif is9 then register1 <= LONG; register2 <= LONG; register3 <= LONG; register4 <= LONG; register5 <= SHORT; general_next_state <= sendRegisters; else register1 <= END_WORD; register2 <= END_WORD; register3 <= END_WORD; register4 <= END_WORD; register5 <= END_WORD; general_next_state <= storeChar; end if; when sendRegisters => sending_next_state <= sendR1; when sended => register1 <= END_WORD; register2 <= END_WORD; register3 <= END_WORD; register4 <= END_WORD; register5 <= END_WORD; WHEN OTHERS => general_next_state <= waitForChar; end case; end process; process(sending_current_state) begin end process; morseOut <= '0'; startCounter <= '0'; unitNb <= (others => '-'); END ARCHITECTURE studentVersion;