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

📄 pkg_prbs.vhd

📁 The xapp851.zip archive includes the following subdirectories. The specific contents of each subdi
💻 VHD
📖 第 1 页 / 共 5 页
字号:
-------------------------------------------------------------------------------
-- Copyright (c) 2006 Xilinx, Inc.
-- This design is confidential and proprietary of Xilinx, All Rights Reserved.
-------------------------------------------------------------------------------
--   ____  ____
--  /   /\/   /
-- /___/  \  /   Vendor: Xilinx
-- \   \   \/    Version: 1.1
--  \   \        Filename: PKG_PRBS.vhd
--  /   /        Date Last Modified: 5/10/06
-- /___/   /\    Date Created:
-- \   \  /  \
--  \___\/\___\
-- 
--Device: Virtex-5
--Purpose: This package generates parallel PRBS patterns for a
--	   given bus width.
--
--	   Supported Width:
--	   4, 8, 10, 16, 20, 32, 60, 64, 128
--
--	   Source of Algorithm:
--	   http://www.eecircle.com/applets/012/FastParallel.html
--
--	   Book Source
--	   Paul H. Bardell, William H. McAnney, and Jacob Savir,
--	   "Built-In Test for VLSI: Pseudorandom Techniques",
--	   John Wiley & Sons, New York, 1987.
--Reference:
--Revision History:
--    Rev 1.0 - Creation. Jerry Chuang. 3/09/02.
--    Rev 1.1 - External release for XAPP851. Added header. 5/10/06.
-------------------------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

--use work.PKG_PRBS.all;

package PKG_PRBS is

	--
	--	Fast Parallel PRBS
	--
	function prbs4(   i : std_logic_vector ) return std_logic_vector;
	function prbs8(   i : std_logic_vector ) return std_logic_vector;
	function prbs10(  i : std_logic_vector ) return std_logic_vector;
	function prbs16(  i : std_logic_vector ) return std_logic_vector;
	function prbs20(  i : std_logic_vector ) return std_logic_vector;
	function prbs32(  i : std_logic_vector ) return std_logic_vector;
	function prbs60(  i : std_logic_vector ) return std_logic_vector;
	function prbs64(  i : std_logic_vector ) return std_logic_vector;
	function prbs128( i : std_logic_vector ) return std_logic_vector;

	-- Main PRBS funciton.  This calls all the other size specific functions
	function prbs( iprbs : std_logic_vector ) return std_logic_vector;

	--
	--	PRBS derived from typicall serial PRBS equations
	--
	function prbs32_40b( i : std_logic_vector ) return std_logic_vector;
	function prbs31_40b( i : std_logic_vector ) return std_logic_vector;
	function prbs23_40b( i : std_logic_vector ) return std_logic_vector;
	function prbs20_40b( i : std_logic_vector ) return std_logic_vector;
	function prbs15_40b( i : std_logic_vector ) return std_logic_vector;
	function prbs10_40b( i : std_logic_vector ) return std_logic_vector;
	function prbs7_40b( i : std_logic_vector ) return std_logic_vector;
	function prbs5_40b( i : std_logic_vector ) return std_logic_vector;

	function prbs31_36b( i : std_logic_vector ) return std_logic_vector;
	function prbs23_36b( i : std_logic_vector ) return std_logic_vector;
	function prbs20_36b( i : std_logic_vector ) return std_logic_vector;
	function prbs15_36b( i : std_logic_vector ) return std_logic_vector;
	function prbs10_36b( i : std_logic_vector ) return std_logic_vector;
	function prbs7_36b( i : std_logic_vector ) return std_logic_vector;
	function prbs5_36b( i : std_logic_vector ) return std_logic_vector;

	function prbs31_32b( i : std_logic_vector ) return std_logic_vector;
	function prbs23_32b( i : std_logic_vector ) return std_logic_vector;
	function prbs20_32b( i : std_logic_vector ) return std_logic_vector;
	function prbs15_32b( i : std_logic_vector ) return std_logic_vector;
	function prbs10_32b( i : std_logic_vector ) return std_logic_vector;
	function prbs7_32b( i : std_logic_vector ) return std_logic_vector;
	function prbs5_32b( i : std_logic_vector ) return std_logic_vector;

	function prbs20_20b( i : std_logic_vector ) return std_logic_vector;
	function prbs15_20b( i : std_logic_vector ) return std_logic_vector;
	function prbs10_20b( i : std_logic_vector ) return std_logic_vector;
	function prbs7_20b( i : std_logic_vector ) return std_logic_vector;
	function prbs5_20b( i : std_logic_vector ) return std_logic_vector;

	function prbs15_16b( i : std_logic_vector ) return std_logic_vector;
	function prbs10_16b( i : std_logic_vector ) return std_logic_vector;
	function prbs7_16b( i : std_logic_vector ) return std_logic_vector;
	function prbs5_16b( i : std_logic_vector ) return std_logic_vector;

	function prbs10_10b( i : std_logic_vector ) return std_logic_vector;
	function prbs7_10b( i : std_logic_vector ) return std_logic_vector;
	function prbs5_10b( i : std_logic_vector ) return std_logic_vector;

end PKG_PRBS;

------------------------------------------------
package body PKG_PRBS is

	-------------------------------------
	--	Parallel PRBS for width: Automatic
	-------------------------------------
	function prbs( iprbs : std_logic_vector )
	return std_logic_vector is
		constant w : integer := iprbs'length;
		variable oprbs : std_logic_vector(w-1 downto 0);
	begin

		case w is
			when   8 => oprbs := prbs8(  iprbs);
			when  10 => oprbs := prbs10( iprbs);
			when  16 => oprbs := prbs16( iprbs);
			when  20 => oprbs := prbs20( iprbs);
			when  32 => oprbs := prbs32( iprbs);
			when  60 => oprbs := prbs60( iprbs);
			when  64 => oprbs := prbs64( iprbs);
			when 128 => oprbs := prbs128(iprbs);
			when others => oprbs := (others => 'U');
		end case;

		return oprbs;
	end;

	-------------------------------------
	--	Parallel PRBS for width: 4
	--	c4 c1
	-------------------------------------
	function prbs4( i : std_logic_vector )
	return std_logic_vector is
		constant w : integer := i'length;
		variable oprbs : std_logic_vector(w-1 downto 0);
	begin
		oprbs(0) := i(0) xor i(3);
		oprbs(1) := i(0) xor i(1) xor i(3);
		oprbs(2) := i(1) xor i(2);
		oprbs(3) := i(2) xor i(3);

		return oprbs;
	end;

	-------------------------------------
	--	Parallel PRBS for width: 8
	--	c8 c6 c5 c1
	-------------------------------------
	function prbs8( i : std_logic_vector )
	return std_logic_vector is
		constant w : integer := i'length;
		variable oprbs : std_logic_vector(w-1 downto 0);
	begin
		oprbs(0) := i(0) xor i(2) xor i(3) xor i(4);
		oprbs(1) := i(0) xor i(1) xor i(2) xor i(5);
		oprbs(2) := i(1) xor i(2) xor i(3) xor i(6);
		oprbs(3) := i(2) xor i(3) xor i(4) xor i(7);
		oprbs(4) := i(3) xor i(4) xor i(5);
		oprbs(5) := i(0) xor i(2) xor i(3) xor i(5) xor i(6);
		oprbs(6) := i(0) xor i(1) xor i(2) xor i(6) xor i(7);
		oprbs(7) := i(1) xor i(2) xor i(3) xor i(7);

		return oprbs;
	end;

	-------------------------------------
	--	Parallel PRBS for width: 10
	--	c10 c3
	-------------------------------------
	function prbs10( i : std_logic_vector )
	return std_logic_vector is
		constant w : integer := i'length;
		variable oprbs : std_logic_vector(w-1 downto 0);
	begin
		oprbs(0) := i(0) xor i(7);
		oprbs(1) := i(1) xor i(8);
		oprbs(2) := i(2) xor i(9);
		oprbs(3) := i(0) xor i(3) xor i(7);
		oprbs(4) := i(1) xor i(4) xor i(8);
		oprbs(5) := i(2) xor i(5) xor i(9);
		oprbs(6) := i(3) xor i(6);
		oprbs(7) := i(4) xor i(7);
		oprbs(8) := i(5) xor i(8);
		oprbs(9) := i(6) xor i(9);

		return oprbs;
	end;

	-------------------------------------
	--	Parallel PRBS for width: 16
	--	c16 c5 c3 c2
	-------------------------------------
	function prbs16( i : std_logic_vector )
	return std_logic_vector is
		constant w : integer := i'length;
		variable oprbs : std_logic_vector(w-1 downto 0);
	begin

		oprbs(0) := i(0) xor i(11) xor i(13) xor i(14);
		oprbs(1) := i(1) xor i(12) xor i(14) xor i(15);
		oprbs(2) := i(0) xor i(2) xor i(11) xor i(14) xor i(15);
		oprbs(3) := i(0) xor i(1) xor i(3) xor i(11) xor i(12) xor i(13) xor i(14) xor i(15);
		oprbs(4) := i(1) xor i(2) xor i(4) xor i(12) xor i(13) xor i(14) xor i(15);
		oprbs(5) := i(0) xor i(2) xor i(3) xor i(5) xor i(11) xor i(15);
		oprbs(6) := i(1) xor i(3) xor i(4) xor i(6) xor i(12);
		oprbs(7) := i(2) xor i(4) xor i(5) xor i(7) xor i(13);
		oprbs(8) := i(3) xor i(5) xor i(6) xor i(8) xor i(14);
		oprbs(9) := i(4) xor i(6) xor i(7) xor i(9) xor i(15);
		oprbs(10) := i(5) xor i(7) xor i(8) xor i(10);
		oprbs(11) := i(6) xor i(8) xor i(9) xor i(11);
		oprbs(12) := i(7) xor i(9) xor i(10) xor i(12);
		oprbs(13) := i(8) xor i(10) xor i(11) xor i(13);
		oprbs(14) := i(9) xor i(11) xor i(12) xor i(14);
		oprbs(15) := i(10) xor i(12) xor i(13) xor i(15);

		return oprbs;
	end;

	-------------------------------------
	--	Parallel PRBS for width: 20
	--	c20 c3
	-------------------------------------
	function prbs20( i : std_logic_vector )
	return std_logic_vector is
		constant w : integer := i'length;
		variable oprbs : std_logic_vector(w-1 downto 0);
	begin

		oprbs(0) := i(0) xor i(17);
		oprbs(1) := i(1) xor i(18);
		oprbs(2) := i(2) xor i(19);
		oprbs(3) := i(0) xor i(3) xor i(17);
		oprbs(4) := i(1) xor i(4) xor i(18);
		oprbs(5) := i(2) xor i(5) xor i(19);
		oprbs(6) := i(3) xor i(6);
		oprbs(7) := i(4) xor i(7);
		oprbs(8) := i(5) xor i(8);
		oprbs(9) := i(6) xor i(9);
		oprbs(10) := i(7) xor i(10);
		oprbs(11) := i(8) xor i(11);
		oprbs(12) := i(9) xor i(12);
		oprbs(13) := i(10) xor i(13);
		oprbs(14) := i(11) xor i(14);
		oprbs(15) := i(12) xor i(15);
		oprbs(16) := i(13) xor i(16);
		oprbs(17) := i(14) xor i(17);
		oprbs(18) := i(15) xor i(18);
		oprbs(19) := i(16) xor i(19);

		return oprbs;
	end;

	-------------------------------------
	--	Parallel PRBS for width: 32
	--	c32 c28 c27 c1
	-------------------------------------
	function prbs32( i : std_logic_vector )
	return std_logic_vector is
		constant w : integer := i'length;
		variable oprbs : std_logic_vector(w-1 downto 0);
	begin

		oprbs(0) := i(0) xor i(4) xor i(5) xor i(8) xor i(10) xor i(12) xor i(13) xor i(14) xor i(15) xor i(16) xor i(21) xor i(25) xor i(26) xor i(29);
		oprbs(1) := i(0) xor i(1) xor i(4) xor i(6) xor i(8) xor i(9) xor i(10) xor i(11) xor i(12) xor i(17) xor i(21) xor i(22) xor i(25) xor i(27) xor i(29) xor i(30);
		oprbs(2) := i(1) xor i(2) xor i(5) xor i(7) xor i(9) xor i(10) xor i(11) xor i(12) xor i(13) xor i(18) xor i(22) xor i(23) xor i(26) xor i(28) xor i(30) xor i(31);
		oprbs(3) := i(2) xor i(3) xor i(6) xor i(8) xor i(10) xor i(11) xor i(12) xor i(13) xor i(14) xor i(19) xor i(23) xor i(24) xor i(27) xor i(29) xor i(31);
		oprbs(4) := i(3) xor i(4) xor i(7) xor i(9) xor i(11) xor i(12) xor i(13) xor i(14) xor i(15) xor i(20) xor i(24) xor i(25) xor i(28) xor i(30);
		oprbs(5) := i(4) xor i(5) xor i(8) xor i(10) xor i(12) xor i(13) xor i(14) xor i(15) xor i(16) xor i(21) xor i(25) xor i(26) xor i(29) xor i(31);
		oprbs(6) := i(5) xor i(6) xor i(9) xor i(11) xor i(13) xor i(14) xor i(15) xor i(16) xor i(17) xor i(22) xor i(26) xor i(27) xor i(30);
		oprbs(7) := i(6) xor i(7) xor i(10) xor i(12) xor i(14) xor i(15) xor i(16) xor i(17) xor i(18) xor i(23) xor i(27) xor i(28) xor i(31);
		oprbs(8) := i(7) xor i(8) xor i(11) xor i(13) xor i(15) xor i(16) xor i(17) xor i(18) xor i(19) xor i(24) xor i(28) xor i(29);
		oprbs(9) := i(8) xor i(9) xor i(12) xor i(14) xor i(16) xor i(17) xor i(18) xor i(19) xor i(20) xor i(25) xor i(29) xor i(30);
		oprbs(10) := i(9) xor i(10) xor i(13) xor i(15) xor i(17) xor i(18) xor i(19) xor i(20) xor i(21) xor i(26) xor i(30) xor i(31);
		oprbs(11) := i(10) xor i(11) xor i(14) xor i(16) xor i(18) xor i(19) xor i(20) xor i(21) xor i(22) xor i(27) xor i(31);
		oprbs(12) := i(11) xor i(12) xor i(15) xor i(17) xor i(19) xor i(20) xor i(21) xor i(22) xor i(23) xor i(28);
		oprbs(13) := i(12) xor i(13) xor i(16) xor i(18) xor i(20) xor i(21) xor i(22) xor i(23) xor i(24) xor i(29);
		oprbs(14) := i(13) xor i(14) xor i(17) xor i(19) xor i(21) xor i(22) xor i(23) xor i(24) xor i(25) xor i(30);
		oprbs(15) := i(14) xor i(15) xor i(18) xor i(20) xor i(22) xor i(23) xor i(24) xor i(25) xor i(26) xor i(31);
		oprbs(16) := i(15) xor i(16) xor i(19) xor i(21) xor i(23) xor i(24) xor i(25) xor i(26) xor i(27);
		oprbs(17) := i(16) xor i(17) xor i(20) xor i(22) xor i(24) xor i(25) xor i(26) xor i(27) xor i(28);
		oprbs(18) := i(17) xor i(18) xor i(21) xor i(23) xor i(25) xor i(26) xor i(27) xor i(28) xor i(29);
		oprbs(19) := i(18) xor i(19) xor i(22) xor i(24) xor i(26) xor i(27) xor i(28) xor i(29) xor i(30);
		oprbs(20) := i(19) xor i(20) xor i(23) xor i(25) xor i(27) xor i(28) xor i(29) xor i(30) xor i(31);
		oprbs(21) := i(20) xor i(21) xor i(24) xor i(26) xor i(28) xor i(29) xor i(30) xor i(31);
		oprbs(22) := i(21) xor i(22) xor i(25) xor i(27) xor i(29) xor i(30) xor i(31);
		oprbs(23) := i(22) xor i(23) xor i(26) xor i(28) xor i(30) xor i(31);
		oprbs(24) := i(23) xor i(24) xor i(27) xor i(29) xor i(31);
		oprbs(25) := i(24) xor i(25) xor i(28) xor i(30);
		oprbs(26) := i(25) xor i(26) xor i(29) xor i(31);
		oprbs(27) := i(0) xor i(4) xor i(5) xor i(8) xor i(10) xor i(12) xor i(13) xor i(14) xor i(15) xor i(16) xor i(21) xor i(25) xor i(27) xor i(29) xor i(30);
		oprbs(28) := i(0) xor i(1) xor i(4) xor i(6) xor i(8) xor i(9) xor i(10) xor i(11) xor i(12) xor i(17) xor i(21) xor i(22) xor i(25) xor i(28) xor i(29) xor i(30) xor i(31);
		oprbs(29) := i(1) xor i(2) xor i(5) xor i(7) xor i(9) xor i(10) xor i(11) xor i(12) xor i(13) xor i(18) xor i(22) xor i(23) xor i(26) xor i(29) xor i(30) xor i(31);
		oprbs(30) := i(2) xor i(3) xor i(6) xor i(8) xor i(10) xor i(11) xor i(12) xor i(13) xor i(14) xor i(19) xor i(23) xor i(24) xor i(27) xor i(30) xor i(31);
		oprbs(31) := i(3) xor i(4) xor i(7) xor i(9) xor i(11) xor i(12) xor i(13) xor i(14) xor i(15) xor i(20) xor i(24) xor i(25) xor i(28) xor i(31);

		return oprbs;
	end;

	-------------------------------------
	--	Parallel PRBS for width: 60
	--	c60 c1
	-------------------------------------
	function prbs60( i : std_logic_vector )
	return std_logic_vector is
		constant w : integer := i'length;
		variable oprbs : std_logic_vector(w-1 downto 0);
	begin

		oprbs(0) := i(0) xor i(59);
		oprbs(1) := i(0) xor i(1) xor i(59);
		oprbs(2) := i(1) xor i(2);
		oprbs(3) := i(2) xor i(3);
		oprbs(4) := i(3) xor i(4);
		oprbs(5) := i(4) xor i(5);
		oprbs(6) := i(5) xor i(6);
		oprbs(7) := i(6) xor i(7);
		oprbs(8) := i(7) xor i(8);
		oprbs(9) := i(8) xor i(9);
		oprbs(10) := i(9) xor i(10);
		oprbs(11) := i(10) xor i(11);
		oprbs(12) := i(11) xor i(12);
		oprbs(13) := i(12) xor i(13);
		oprbs(14) := i(13) xor i(14);
		oprbs(15) := i(14) xor i(15);
		oprbs(16) := i(15) xor i(16);
		oprbs(17) := i(16) xor i(17);
		oprbs(18) := i(17) xor i(18);
		oprbs(19) := i(18) xor i(19);
		oprbs(20) := i(19) xor i(20);
		oprbs(21) := i(20) xor i(21);
		oprbs(22) := i(21) xor i(22);
		oprbs(23) := i(22) xor i(23);

⌨️ 快捷键说明

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