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

📄 modem.vhd

📁 VHDL的例子
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;

ENTITY Modem IS
  PORT (
    Reset      : IN  STD_LOGIC; -- Master reset
    Clk16X     : IN  STD_LOGIC; -- UART internal clock
    -- 寄存器
    MSR        : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- Modem Status Reg
    MCR        : IN  STD_LOGIC_VECTOR(1 DOWNTO 0); -- Modem Control Reg
-- MSR的上升沿的读选通
MsrRDn_re  : IN  STD_LOGIC; -- pulse indicating rising OF MsrRDn_r
    -- Modem接口
    DCDn       : IN  STD_LOGIC; -- Data Carrier Detect
    CTSn       : IN  STD_LOGIC; -- Clear To Send
    DSRn       : IN  STD_LOGIC; -- Data Set Ready
    RIn        : IN  STD_LOGIC; -- Ring Indicator
    DTRn       : OUT STD_LOGIC; -- Data Terminal Ready
    RTSn       : OUT STD_LOGIC  -- Request To Send
  );
END Modem;

ARCHITECTURE Modem_arch OF Modem IS

  SIGNAL MSReg   : STD_LOGIC_VECTOR(7 DOWNTO 0);
  SIGNAL CTSn1   : STD_LOGIC; -- Delayed version OF CTSn
  SIGNAL DSRn1   : STD_LOGIC; -- Delayed version OF DSRn
  SIGNAL DCDn1   : STD_LOGIC; -- Delayed version OF DCDn
  SIGNAL RIn1    : STD_LOGIC; -- Delayed version OF RIn

begin

   DTRn <= not MCR(0);
   RTSn <= not MCR(1);

--------------------------------------------------------------------------------
--      Modem状态寄存器设置
--------------------------------------------------------------------------------

  MSR <= MSReg;

  Modem_Stat_Proc: PROCESS(Reset, Clk16X)
  begin
    IF (Reset='1') THEN
      MSReg <= (others=>'0');
      CTSn1 <= '1';
      DSRn1 <= '1';
      DCDn1 <= '1';
      RIn1 <= '1';
    ELSIF rising_edge(Clk16X) THEN
      CTSn1 <= CTSn; -- Delay OF CTSn
      DSRn1 <= DSRn; -- Delay OF DSRn
      DCDn1 <= DCDn; -- Delay OF DCDn
      RIn1 <= RIn;   -- Delay OF RIn
      IF (MsrRDn_re='1') THEN
        MSReg <= (others=>'0');
      else
        MSReg(0) <= MSReg(0) OR (CTSn1 xor CTSn);     -- 表明DCDn改变
        MSReg(1) <= MSReg(1) OR (DSRn1 xor DSRn);     -- 表明DSRn 改变
        MSReg(2) <= MSReg(2) OR ((not RIn1) and RIn);    -- RI的上升沿
        MSReg(3) <= MSReg(3) OR (DCDn1 xor DCDn);     -- 表明DCDn改变
        MSReg(4) <= not CTSn; -- Compliment OF CTSn
        MSReg(5) <= not DSRn; -- Compliment OF DSRn
        MSReg(6) <= not RIn;  -- Compliment OF RIn
        MSReg(7) <= not DCDn; -- Compliment OF DCDn
      END IF;
    END IF;
  END PROCESS Modem_Stat_Proc;

END Modem_arch;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -