OpenCores
URL https://opencores.org/ocsvn/pci_core/pci_core/trunk

Subversion Repositories pci_core

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 3 to Rev 4
    Reverse comparison

Rev 3 → Rev 4

/trunk/Blocks/pci_parity.vhd
0,0 → 1,144
-------------------------------------------------------------------------------
-- Title : PCI Parity core
-- Project : PCI target Core
-------------------------------------------------------------------------------
-- File : pci_parity.VHD
-- Author : Jamil Khatib <khatib@ieee.org>
-- Organization: OpenCores Project
-- Created : 2000/04/1
-- Last update : 2000/04/1
-- Platform :
-- Simulators : Modelsim 5.3XE / Windows98
-- Synthesizers: webfitter - Leonardo / WindowsNT
-- Target : XC9572XL-5-VQ64 - EPF10K100EQC208 Flex10K
-- Dependency :
-------------------------------------------------------------------------------
-- Description: PCI Parity Core
-------------------------------------------------------------------------------
-- 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 under the terms of the Openip General Public
-- License as it is going to be published by the OpenIPCore Organization and
-- any coming versions of this license.
-- You can check the draft license at
-- http://www.openip.org/oc/license.html
--
-------------------------------------------------------------------------------
-- Revisions :
-- Revision Number : 1
-- Version : 1.0
-- Date : 1st Apr 2000
-- Modifier : Jamil Khatib (khatib@ieee.org)
-- Desccription : Created
--
-- Known bugs : Extending the PAR signals to wait states
-- : SERR is generated upon local side request only
-- : PERR must remain active two clockcycles after the ERR
-------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
 
entity parity is
 
port (
-- PCI Interface
CLK : in std_logic; -- PCI clock
AD : in std_logic_vector(31 downto 0); -- PCI AD signal
CBE : in std_logic_vector(3 downto 0); -- C/BE PCI bus signals
PAR : inout std_logic; -- PAR signal
SERR_n : inout std_logic; -- SERR# signal
PERR_n : out std_logic; -- PERR# signal
-- PERR# signal is output only for target
-- Local Interface
ParOperation : in std_logic; -- Parity Operation
-- Drive PAR or check it
Par_oe : in std_logic; -- PAR Output Enable
Locserr_n : in std_logic; -- Local System Error
LocErrRep_n : out std_logic); -- Local Error Report
-- used to report parity errors for local interface
-- and to the configuration register
 
end parity;
 
library ieee;
use ieee.std_logic_1164.all;
-------------------------------------------------------------------------------
architecture behavior of parity is
 
begin -- behavior
 
-------------------------------------------------------------------------------
-- purpose: Parity Generation
-- type : sequential
-- inputs : CLK
-- outputs: PAR, LocErrRep
Paritygen : process (CLK)
 
variable tmp_par : std_logic; -- temporary parity vriable
variable par_q : std_logic; -- Next Par signal
variable perr_q : std_logic; -- Next PERR signal
 
begin -- process Paritygen
 
if CLK'event and CLK = '1' then -- rising clock edge
if Par_oe = '1' then
 
-------------------------------------------------------------------------------
-- PAR signal states:
-- Idel: when no operation on the current target or master
-- PAR = 'Z' , PERR = 'Z'
-- Master Read:
-- Address phase:
-- Master Drives PAR
-- Target Drives PERR
-- Data phase:
-- Target Drives PAR
-- Master Drives PERR
-- Master write:
-- Address and data phase
-- Master Drives PAR
-- Master Drives PERR
-------------------------------------------------------------------------------
-- ParOperation = 1 Calculate and drive PAR Port
-- ParOperation = 0 Calculate and report Parity Errors
-------------------------------------------------------------------------------
if ParOperation = '1' then -- Drive PAR signal
 
PAR <= par_q;
LocErrRep_n <= perr_q;
PERR_n <= 'Z';
else
 
PERR_n <= perr_q;
PAR <= 'Z';
 
end if;
 
-- No of 1's in AD, CBE & PAR must be even
tmp_par := CBE(3) xor CBE(2) xor CBE(1) xor CBE(0);
 
for i in AD'range loop
 
tmp_par := tmp_par xor AD(i);
 
end loop; -- i
 
par_q := tmp_par;
 
perr_q := tmp_par xor PAR_q;
 
else
 
PAR <= 'Z';
PERR_n <= 'Z';
 
end if;
end if;
end process Paritygen;
-------------------------------------------------------------------------------
 
SERR_n <= Locserr_n;
-------------------------------------------------------------------------------
end behavior;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.