⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsk.vhd

📁 采用vhdl实现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 + -