?? pkg_prbs.vhd
字號:
-------------------------------------------------------------------------------
-- 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 + -