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

📄 crcreg.vhd

📁 something is very important in life. So read it. Try reading it,. I do not care. Please read it/ Ple
💻 VHD
字号:
-------------------------------------------------------------------------------

-- Title      : Parameterisable CRC Shift Register 

-- Project    : 

-------------------------------------------------------------------------------

-- File       : crcreg.vhd

-- Author     : Davy Huang <Dai.Huang@Xilinx.com>

-- Company    : Xilinx Inc

-- Created    : 2001/02/06

-- Last update: 2001-04-18

-- Copyright  : (c) Xilinx Inc 1999, 2000

-------------------------------------------------------------------------------

-- Description: A parameterisable shift register to caculate crc

--              Suppose the data width is w, this CRCSR can handle

--              any CRC caculation based on following polynomia 

--              Polynomial = X^(w) + X^(f1) + X^(f2) + 1

--              where f1 and f2 are two feedbacks.

--              For example: Polynomial = x^8 + x^5 + x^4 + 1, which is

--              used for Dallas One-wire Serial Number device

--              Please refer to iButton standard at:

--              http://www.ibutton.com/ibuttons/standard.pdf

-------------------------------------------------------------------------------

-- Revisions  :

-- Date        Version  Author  Description

-- 2001/02/06  1.0      davy    Created

-- 2001/02/14  1.1      davy    Change to asyn. reset

-------------------------------------------------------------------------------



library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;



entity CRCReg is

  generic (width : natural := 8;      -- register width

           feedback1 : natural := 4;

           feedback2 : natural := 5);

  port (reset : in std_logic;         -- asynchronous reset

        clk : in std_logic;           -- input clock

        en : in std_logic;            -- enable

        d  : in std_logic;            -- data input (one bit)

        q : out std_logic_vector( (width - 1) downto 0));  -- output (crc value)

end CRCReg;



architecture arch1 of CRCReg is



    signal qt : std_logic_vector( (width - 1) downto 0);



    signal feedback : std_logic;    



begin



  q <= qt;

  

  feedback <= qt(0) xor d;



  

  rArray : for i in 0 to width - 1 generate

  

    -- caculate msb

    msb  : if i = (width -1) generate

      msbff : process (clk, reset)

      begin

        if reset = '1' then

            qt(i) <= '0';

        elsif clk'event and clk = '1' then

          if en = '1' then

              qt(i) <= feedback;

          end if;

        end if;

      end process msbff;

    end generate msb;

   

   

   -- caculate two feedback paths 

   feedbackb : if (i = (width - feedback1 -1 )) or (i = (width - feedback2 -1)) generate

      feedbackf : process (clk, reset)

      begin

        if reset = '1' then

           qt(i) <= '0';

        elsif clk'event and clk = '1' then

          if en = '1' then

            qt(i) <= qt(i + 1) xor feedback;

          end if;

        end if;

      end process feedbackf;

    end generate feedbackb;





    -- caculate other bits

    othersb : if (i /= (width -1)) and (i /= (width - feedback1 -1 )) and (i /= (width - feedback2 -1)) generate

      othersff : process (clk, reset)

      begin

        if reset = '1' then

           qt(i) <= '0';

        elsif clk'event and clk = '1' then

          if en = '1' then

            qt(i) <= qt(i+1);

          end if;

        end if;

      end process othersff;

    end generate othersb;

    

    

  end generate rArray;





    

end arch1;

⌨️ 快捷键说明

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