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