📄 fsk.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY fsk IS
PORT(clock: IN STD_LOGIC;
dout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
code: BUFFER STD_LOGIC);
END fsk;
ARCHITECTURE fsk_arch OF fsk IS
SIGNAL count100: STD_LOGIC_VECTOR (6 DOWNTO 0);
SIGNAL count50: STD_LOGIC_VECTOR (5 DOWNTO 0);
SIGNAL sinclk1: STD_LOGIC;
SIGNAL sinclk, coderate: STD_LOGIC;
SIGNAL temp, jump_high: STD_LOGIC;
SIGNAL m: STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
PROCESS(clock)
BEGIN
IF(clock'event AND clock='1') THEN
sinclk1<=NOT sinclk1;
END IF;
END PROCESS;
PROCESS(sinclk1)
BEGIN
IF(sinclk1'event AND sinclk1='1') THEN
IF(count50="110001") THEN
count50<="000000";
coderate<=NOT coderate;
ELSE count50<= count50+'1';
END IF;
END IF;
END PROCESS;
m_sequence_form:
PROCESS(coderate)
BEGIN
IF(coderate'event AND coderate='1') THEN
m(0)<=m(1);
m(1)<=m(2);
END IF;
END PROCESS;
PROCESS(coderate)
BEGIN
IF(coderate'event AND coderate='1') THEN
m(2)<=(m(1) XOR m(0)) OR (NOT (m(0) OR m(1) or m(2)));
END IF;
END PROCESS;
code<=m(0);
PROCESS(sinclk1,clock,code)
BEGIN
IF(code='0') THEN sinclk<=sinclk1;
ELSE sinclk<=clock;
END IF;
END PROCESS;
jump_high<=(not temp) AND code;
PROCESS(sinclk)
BEGIN
IF(sinclk'event AND sinclk='1') THEN
temp<=code;
IF((count100="1100011") OR (jump_high='1')) THEN
count100<="0000000";
ELSE count100<=count100+'1';
END IF;
END IF;
END PROCESS;
PROCESS(count100)
BEGIN
CASE count100 IS
WHEN "0000000" =>dout<= "01111111"; WHEN "0000001" =>dout<= "10000111";
WHEN "0000010" =>dout<= "10001111"; WHEN "0000011" =>dout<= "10010111";
WHEN "0000100" =>dout<= "10011111"; WHEN "0000101" =>dout<= "10100110";
WHEN "0000110" =>dout<= "10101110"; WHEN "0000111" =>dout<= "10110101";
WHEN "0001000" =>dout<= "10111100"; WHEN "0001001" =>dout<= "11000011";
WHEN "0001010" =>dout<= "11001010"; WHEN "0001011" =>dout<= "11010000";
WHEN "0001100" =>dout<= "11010110"; WHEN "0001101" =>dout<= "11011100";
WHEN "0001110" =>dout<= "11100001"; WHEN "0001111" =>dout<= "11100110";
WHEN "0010000" =>dout<= "11101011"; WHEN "0010001" =>dout<= "11101111";
WHEN "0010010" =>dout<= "11110010"; WHEN "0010011" =>dout<= "11110110";
WHEN "0010100" =>dout<= "11111000"; WHEN "0010101" =>dout<= "11111010";
WHEN "0010110" =>dout<= "11111100"; WHEN "0010111" =>dout<= "11111101";
WHEN "0011000" =>dout<= "11111110"; WHEN "0011001" =>dout<= "11111111";
WHEN "0011010" =>dout<= "11111110"; WHEN "0011011" =>dout<= "11111101";
WHEN "0011100" =>dout<= "11111100"; WHEN "0011101" =>dout<= "11111010";
WHEN "0011110" =>dout<= "11111000"; WHEN "0011111" =>dout<= "11110110";
WHEN "0100000" =>dout<= "11110010"; WHEN "0100001" =>dout<= "11101111";
WHEN "0100010" =>dout<= "11101011"; WHEN "0100011" =>dout<= "11100110";
WHEN "0100100" =>dout<= "11100001"; WHEN "0100101" =>dout<= "11011100";
WHEN "0100110" =>dout<= "11010110"; WHEN "0100111" =>dout<= "11010000";
WHEN "0101000" =>dout<= "11001010"; WHEN "0101001" =>dout<= "11000011";
WHEN "0101010" =>dout<= "10111100"; WHEN "0101011" =>dout<= "10110101";
WHEN "0101100" =>dout<= "10101110"; WHEN "0101101" =>dout<= "10100110";
WHEN "0101110" =>dout<= "10011111"; WHEN "0101111" =>dout<= "10010111";
WHEN "0110000" =>dout<= "10001111"; WHEN "0110001" =>dout<= "10000111";
WHEN "0110010" =>dout<= "01111111"; WHEN "0110011" =>dout<= "01110111";
WHEN "0110100" =>dout<= "01101111"; WHEN "0110101" =>dout<= "01100111";
WHEN "0110110" =>dout<= "01011111"; WHEN "0110111" =>dout<= "01011000";
WHEN "0111000" =>dout<= "01010000"; WHEN "0111001" =>dout<= "01001001";
WHEN "0111010" =>dout<= "01000010"; WHEN "0111011" =>dout<= "00111011";
WHEN "0111100" =>dout<= "00110100"; WHEN "0111101" =>dout<= "00101110";
WHEN "0111110" =>dout<= "00101000"; WHEN "0111111" =>dout<= "00100010";
WHEN "1000000" =>dout<= "00011101"; WHEN "1000001" =>dout<= "00011000";
WHEN "1000010" =>dout<= "00010011"; WHEN "1000011" =>dout<= "00001111";
WHEN "1000100" =>dout<= "00001100"; WHEN "1000101" =>dout<= "00001000";
WHEN "1000110" =>dout<= "00000110"; WHEN "1000111" =>dout<= "00000100";
WHEN "1001000" =>dout<= "00000010"; WHEN "1001001" =>dout<= "00000001";
WHEN "1001010" =>dout<= "00000000"; WHEN "1001011" =>dout<= "00000000";
WHEN "1001100" =>dout<= "00000000"; WHEN "1001101" =>dout<= "00000001";
WHEN "1001110" =>dout<= "00000010"; WHEN "1001111" =>dout<= "00000100";
WHEN "1010000" =>dout<= "00000110"; WHEN "1010001" =>dout<= "00001000";
WHEN "1010010" =>dout<= "00001100"; WHEN "1010011" =>dout<= "00001111";
WHEN "1010100" =>dout<= "00010011"; WHEN "1010101" =>dout<= "00011000";
WHEN "1010110" =>dout<= "00011101"; WHEN "1010111" =>dout<= "00100010";
WHEN "1011000" =>dout<= "00101000"; WHEN "1011001" =>dout<= "00101110";
WHEN "1011010" =>dout<= "00110100"; WHEN "1011011" =>dout<= "00111011";
WHEN "1011100" =>dout<= "01000010"; WHEN "1011101" =>dout<= "01001001";
WHEN "1011110" =>dout<= "01010000"; WHEN "1011111" =>dout<= "01011000";
WHEN "1100000" =>dout<= "01011111"; WHEN "1100001" =>dout<= "01100111";
WHEN "1100010" =>dout<= "01101111"; WHEN "1100011" =>dout<= "01110111";
WHEN others=>null;
END CASE;
END PROCESS;
END fsk_arch;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -