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

📄 idt723611.vhd

📁 VHDL的ram和fifo model code 包含众多的厂家
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        TYPE MemStore IS ARRAY (0 to TotalLOC) OF INTEGER                         RANGE  -2 TO MaxData;        SIGNAL READMAIL1   : std_ulogic :='0';        SIGNAL READMAIL2   : std_ulogic :='0';        SHARED VARIABLE RDPoint    : NATURAL RANGE 0 TO TotalLoc := 0;        SHARED VARIABLE WRPoint    : NATURAL RANGE 0 TO TotalLoc := 0;        SHARED VARIABLE Count      : NATURAL RANGE 0 TO TotalLoc +1 := 1;        SHARED VARIABLE MemDataL    : MemStore;        SHARED VARIABLE MemDataH    : MemStore;        SHARED VARIABLE  Outtput_Reg_A :std_logic_vector(35 DOWNTO 0)                        :=(OTHERS => '0');        SHARED VARIABLE  Outtput_Reg_B :std_logic_vector(35 DOWNTO 0)                        :=(OTHERS => '0');        SHARED VARIABLE  POM_Z :std_logic_vector(35 DOWNTO 0)                        :=(OTHERS => 'Z');        BEGIN---------------------------------------------------------------------- Timing Check Section--------------------------------------------------------------------        VITALTimingCheck: PROCESS (AIn,BIn,CLKA,CLKB,CSANeg,CSBNeg,                                   ENA,ENB,FS1,FS0,MBA,MBB,ODDEVENNeg,                                   PGA,PGB,RSTNeg,WRANeg,WRBNeg )--Setup/Hold checks variables           VARIABLE Tviol_A0_CLKA          : X01 := '0';           VARIABLE Tviol_B0_CLKB          : X01 := '0';           VARIABLE Tviol_CSANeg_CLKA      : X01 := '0';           VARIABLE Tviol_CSBNeg_CLKB      : X01 := '0';           VARIABLE Tviol_WRANeg_CLKA     : X01 := '0';           VARIABLE Tviol_WRBNeg_CLKB     : X01 := '0';           VARIABLE Tviol_ENA_CLKA         : X01 := '0';           VARIABLE Tviol_ENB_CLKB         : X01 := '0';           VARIABLE Tviol_MBA_CLKA         : X01 := '0';           VARIABLE Tviol_MBB_CLKB         : X01 := '0';           VARIABLE Tviol_OddEVENNeg_CLKB : X01 := '0';           VARIABLE Tviol_PGB_CLKB         : X01 := '0';           VARIABLE Tviol_RSTNeg_CLKA      : X01 := '0';           VARIABLE Tviol_RSTNeg_CLKB      : X01 := '0';           VARIABLE Tviol_FS0_RSTNeg       : X01 := '0';           VARIABLE Tviol_FS1_RSTNeg       : X01 := '0';           VARIABLE TD_A0_CLKA             : VitalTimingDataType;           VARIABLE TD_B0_CLKB             : VitalTimingDataType;           VARIABLE TD_CSANeg_CLKA         : VitalTimingDataType;           VARIABLE TD_CSBNeg_CLKB         : VitalTimingDataType;           VARIABLE TD_WRANeg_CLKA        : VitalTimingDataType;           VARIABLE TD_WRBNeg_CLKB        : VitalTimingDataType;           VARIABLE TD_ENA_CLKA            : VitalTimingDataType;           VARIABLE TD_ENB_CLKB            : VitalTimingDataType;           VARIABLE TD_MBA_CLKA            : VitalTimingDataType;           VARIABLE TD_MBB_CLKB            : VitalTimingDataType;           VARIABLE TD_OddEVENNeg_CLKB    : VitalTimingDataType;           VARIABLE TD_PGB_CLKB            : VitalTimingDataType;           VARIABLE TD_RSTNeg_CLKA         : VitalTimingDataType;           VARIABLE TD_RSTNeg_CLKB         : VitalTimingDataType;           VARIABLE TD_FS0_RSTNeg          : VitalTimingDataType;           VARIABLE TD_FS1_RSTNeg          : VitalTimingDataType;-- Pulse Width and Period Check Variables           VARIABLE Pviol_CLKA : X01 := '0';           VARIABLE PD_CLKA                    : VitalPeriodDataType := VitalPeriodDataInit;           VARIABLE Pviol_CLKB : X01 := '0';           VARIABLE PD_CLKB                    : VitalPeriodDataType := VitalPeriodDataInit;           -- Functionality Results Variables           VARIABLE Violation       : X01 := '0';           VARIABLE IN_FFNeg        : std_ulogic;           VARIABLE IN_EFNeg        : std_ulogic;           VARIABLE IN_AFNeg        : std_ulogic;           VARIABLE IN_AENeg        : std_ulogic;           VARIABLE RST_FLEG        : std_ulogic;           VARIABLE FF_FLEG         : std_ulogic;           VARIABLE IN_MBF1Neg      : std_ulogic;           VARIABLE IN_MBF2Neg      : std_ulogic;           VARIABLE Parity_Data     : std_logic_vector(35 downto 0);           VARIABLE reseted         : std_ulogic;           VARIABLE COUNTB          : INTEGER :=0;           VARIABLE COUNTA          : INTEGER :=0;           VARIABLE FL_MBF1         : INTEGER :=0;           VARIABLE FL_MBF2         : INTEGER :=0;       PROCEDURE PARITY_CHECKING (                                      Port_Side  : IN INTEGER;                                      FLEG       : IN INTEGER;                                      DataIn     : IN                                      std_logic_vector(35 downto 0)) IS           VARIABLE INTER      : INTEGER :=0;           VARIABLE ParityLow  : std_logic :='0';           VARIABLE Check      : std_logic_vector( 8 downto 0):=(OTHERS=>'0');           BEGIN            IF FLEG = 0 THEN               INTER := 0;                    FOR i IN 1 TO 4 LOOP                        IF INTER =0 THEN                            IF (i= 1 ) THEN                                Check (8 downto 0)  := DataIn(8 downto 0);                            END IF;                            IF  (i= 2 ) THEN                                Check (8 downto 0)  := DataIn(17 downto 9);                            END IF;                            IF (i= 3 ) THEN                                Check (8 downto 0)  := DataIn(26 downto 18);                            END IF;                            IF  (i= 4 ) THEN                                Check (8 downto 0)  := DataIn(35 downto 27);                            END IF;                            ParityLow := '0';                            FOR j IN 0 TO 8 LOOP                                IF Check (j) = '1'  THEN                                    IF ParityLow  = '0' THEN                                       ParityLow := '1';                                    ELSE                                       ParityLow := '0';                                    END IF;                                END IF;                           END LOOP;                           IF (ParityLow = '0' AND OddEVENNeg = '0') OR                              (ParityLow = '1' AND OddEVENNeg = '1') THEN                               IF Port_Side = 0 THEN                                  PEFANeg_zd <= '1';                               ELSE                                  PEFBNeg_zd <= '1';                               END IF;                           ELSE                               IF Port_Side = 0 THEN                                  PEFANeg_zd <= '0';                                  INTER :=1;                               ELSE                                  PEFBNeg_zd <= '0';                                  INTER :=1;                               END IF;                           END IF;                        END IF;                END LOOP;           ELSE               IF Port_Side = 0 THEN                  PEFANeg_zd <= '1';               ELSE                  PEFBNeg_zd <= '1';               END IF;           END IF;           END PARITY_CHECKING;           PROCEDURE PARITY_GENERATION( Port_Side   : IN INTEGER ;                                        ODD_OR_EVEN : IN std_logic;                                        DataIn      : IN                                        std_logic_vector(35 downto 0) ) IS               VARIABLE Poz        : INTEGER :=0;               VARIABLE ParityLow  : std_logic :='0';               VARIABLE Check      : std_logic_vector( 8 downto 0)                                     :=(OTHERS=>'0');               VARIABLE DataOut    : std_logic_vector( 35 downto 0)                                     :=(OTHERS=>'0');           BEGIN              DataOut ( 35 downto 0) := DataIn ( 35 downto 0);              FOR i IN 0 TO 3 LOOP                            IF (i= 0 ) THEN                                Check (8 downto 0)  := DataIn(8 downto 0);                            END IF;                            IF  (i= 1 ) THEN                                Check (8 downto 0)  := DataIn(17 downto 9);                            END IF;                            IF (i= 2 ) THEN                                Check (8 downto 0)  := DataIn(26 downto 18);                            END IF;                            IF  (i= 3 ) THEN                                Check (8 downto 0)  := DataIn(35 downto 27);                            END IF;                            ParityLow := '0';                            FOR j IN 0 TO 7 LOOP                                IF Check (j) = '1'  THEN                                    IF ParityLow  = '0' THEN                                       ParityLow := '1';                                    ELSE                                       ParityLow := '0';                                    END IF;                                END IF;                           END LOOP;                           IF (ParityLow = '0' AND OddEVENNeg = '1') OR                              (ParityLow = '1' AND OddEVENNeg = '0') THEN                               Poz:= 8 + i*9;                               DataOut (Poz) := '1';                           ELSE                               Poz:= 8 + i*9;                               DataOut (Poz) := '0';                           END IF;                END LOOP;                IF Port_Side = 0 THEN                   Outtput_Reg_A( 35 downto 0) := DataOut ( 35 downto 0);                   AOut_zd <= DataOut ( 35 downto 0);                ELSE                   Outtput_Reg_B( 35 downto 0) := DataOut ( 35 downto 0);                   BOut_zd <= DataOut ( 35 downto 0);                END IF;           END PARITY_GENERATION;       BEGIN -------------------------------- -- Timing Check Section  -------------------------------- -- CLKA pulse ( low&high ) width and period check            VitalPeriodPulseCheck (                TestSignal      => CLKA,                TestSignalName  => "CLKA",                Period          => tperiod_CLKA,                PulseWidthHigh  => tpw_CLKA_posedge,                PulseWidthLow   => tpw_CLKA_negedge,                CheckEnabled    => TRUE,                HeaderMsg       => InstancePath & partID,                PeriodData      => PD_CLKA,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Pviol_CLKA);-- CLKB pulse ( low&high ) width and period check            VitalPeriodPulseCheck (                TestSignal      => CLKB,                TestSignalName  => "CLKB",                Period          => tperiod_CLKB,                PulseWidthHigh  => tpw_CLKB_posedge,                PulseWidthLow   => tpw_CLKB_negedge,                CheckEnabled    => TRUE,                HeaderMsg       => InstancePath & partID,                PeriodData      => PD_CLKB,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Pviol_CLKB);-- A0/CLKA setup/hold time check             VitalSetupHoldCheck (                TestSignal      => AIn,                TestSignalName  => "A",                RefSignal       => CLKA,                RefSignalName   => "CLKA",                SetupHigh       => tsetup_A0_CLKA,                SetupLow        => tsetup_A0_CLKA,                HoldHigh        => thold_A0_CLKA,                HoldLow         => thold_A0_CLKA,                CheckEnabled    => TRUE,                RefTransition    => '/',                HeaderMsg       => InstancePath & partID,                TimingData      => TD_A0_CLKA,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_A0_CLKA);-- B0/CLKB setup/hold time check             VitalSetupHoldCheck (                TestSignal      => BIn,                TestSignalName  => "B",                RefSignal       => CLKB,                RefSignalName   => "CLKB",                SetupHigh       => tsetup_A0_CLKA,                SetupLow        => tsetup_A0_CLKA,                HoldHigh        => thold_A0_CLKA,                HoldLow         => thold_A0_CLKA,                CheckEnabled    => TRUE,                RefTransition    => '/',                HeaderMsg       => InstancePath & partID,                TimingData      => TD_B0_CLKB,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_B0_CLKB);

⌨️ 快捷键说明

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