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

📄 zero_detect.vhd

📁 HDLC在通讯设备中占有重要地位
💻 VHD
字号:
--------------------------------------------------------------------------------- Title      :  Zero Detection-- Project    :  HDLC controller--------------------------------------------------------------------------------- File        : zero_detect.vhd-- Author      : Jamil Khatib  (khatib@ieee.org)-- Organization: OpenIPCore Project-- Created     : 2000/12/28-- Last update: 2001/04/27-- Platform    : -- Simulators  : Modelsim 5.3XE/Windows98-- Synthesizers: FPGA express 3-- Target      : -- Dependency  : ieee.std_logic_1164----------------------------------------------------------------------------------- Description:  Zero Detection--------------------------------------------------------------------------------- Copyright (c) 2000 Jamil Khatib-- -- This VHDL design file is an open design; you can redistribute it and/or-- modify it and/or implement it after contacting the author-- You can check the draft license at-- http://www.opencores.org/OIPC/license.shtml--------------------------------------------------------------------------------- Revisions  :-- Revision Number :   1-- Version         :   0.1-- Date            :   28 Dec 2000-- Modifier        :   Jamil Khatib (khatib@ieee.org)-- Desccription    :   Created-- ToOptimize      :   Needs large external buffer (1 byte internal buffer)--                     for low speed backend interface --                     (flow control is used to manage this problem)--------------------------------------------------------------------------------- Revisions  :-- Revision Number :   2-- Version         :   0.2-- Date            :   12 Jan 2001-- Modifier        :   Jamil Khatib (khatib@ieee.org)-- Desccription    :   Enable bug fixed-- ToOptimize      :   Needs large external buffer (1 byte internal buffer)--                     for low speed backend interface --                     (flow control is used to manage this problem)--------------------------------------------------------------------------------- Revisions  :-- Revision Number :   3-- Version         :   0.3-- Date            :   27 April 2001-- Modifier        :   Jamil Khatib (khatib@ieee.org)-- Desccription    :   Available and enable bugs fixed-- ToOptimize      :  -------------------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;entity ZeroDetect_ent is  port (    ValidFrame : in  std_logic;         -- Valid Frame strobe    Readbyte   : in  std_logic;         -- Back end read byte    aval       : out std_logic;         -- can get more data (connected to flow                                        -- controller    enable     : in  std_logic;         -- enable (Driven by flow controller)    rdy          : out std_logic;                      -- data ready    rst          : in  std_logic;                      -- system reset    StartofFrame : in  std_logic;                      -- start of Frame    RxClk        : in  std_logic;                      -- RX clock    RxD          : in  std_logic;                      -- RX data    RxData       : out std_logic_vector(7 downto 0));  -- Receive Data busend ZeroDetect_ent;architecture ZeroDetect_beh of ZeroDetect_ent is  signal DataRegister : std_logic_vector(7 downto 0);                                        -- Data register  signal flag         : std_logic;      -- 8 Bits data readybegin  -- ZeroDetect_beh-- purpose: Detect zero-- type   : sequential-- inputs : RxClk, rst-- outputs:   detect_proc : process (RxClk, rst)    variable ZeroDetected : std_logic;                     -- Zero Detected    variable tempRegister : std_logic_vector(7 downto 0);  -- Data Register    variable counter      : integer range 0 to 7;          -- Counter    variable checkreg : std_logic_vector(5 downto 0);  -- Check register  begin  -- process detect    if rst = '0' then                   -- asynchronous reset (active low)      counter      := 0;      tempRegister := (others => '0');      DataRegister <= (others => '0');      flag         <= '0';      ZeroDetected := '0';      checkreg := (others => '0');    elsif RxClk'event and RxClk = '1' then  -- rising clock edge      if enable = '1' then                  -- No overflow on the backend        -- add new bit to the register--        tempRegister(counter) := RxD;        if StartofFrame = '0' then          -- add new bit to the check register          checkreg              := RxD & checkreg(5 downto 1);          tempRegister(counter) := RxD;        else          -- reset the check register          checkreg              := (RxD, others => '0');          counter               := 0;          tempRegister(counter) := RxD;        end if;        -- check if we got 5 ones        ZeroDetected := not checkreg(5) and checkreg(4) and checkreg(3) and checkreg(2) and checkreg(1) and checkreg(0);        if ZeroDetected = '1' then          flag <= '0';        else          if counter = 7 then            DataRegister <= tempRegister;            counter := 0;            flag <= '1';          else            counter := counter + 1;            flag <= '0';          end if;        end if;      end if;    end if;  end process detect_proc;-------------------------------------------------------------------------------  -- purpose: Backend process  -- type   : sequential  -- inputs : Rxclk, rst  -- outputs:   backend_proc : process (Rxclk, rst)    variable status  : std_logic;       -- Status    variable rdy_var : std_logic;       -- temp variable for Rdy  begin  -- process backend_proc    if rst = '0' then                   -- asynchronous reset (active low)      RxData <= (others => '0');      status := '0';      aval   <= '1';      rdy_var := '0';      rdy <= '0';    elsif Rxclk'event and Rxclk = '1' then  -- rising clock edge      if enable = '1' then        if flag = '1' then          status := '1';                -- Can not take more          RxData  <= DataRegister;          rdy_var := '1';        end if;  -- flag      end if;  -- enable      if readbyte = '1' then        status := '0';                  -- can take more data        rdy_var := '0';      end if;  -- readbyte      rdy <= rdy_var;      if ValidFrame = '0' then        aval <= '1';      else        aval <= not status;      end if;    end if;  -- clk  end process backend_proc;-------------------------------------------------------------------------------end ZeroDetect_beh;

⌨️ 快捷键说明

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