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

📄 idt72845.vhd

📁 VHDL的ram和fifo model code 包含众多的厂家
💻 VHD
📖 第 1 页 / 共 4 页
字号:
            IF RENNeg'event OR (RSNeg'event AND RSNeg = '1') THEN            VitalSetupHoldCheck (                TestSignal      => RENNEg,                TestSignalName  => "RENNeg",                RefSignal       => RSNEg,                RefSignalName   => "RSNEg",                SetupHigh       => tsetup_LDNeg_RSNeg_noedge_posedge,                CheckEnabled    => True,                RefTransition   => '/',                HeaderMsg       => InstancePath & partID,                TimingData      => TD_RENNeg_RSNeg,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_RENNeg_RSNeg);            END IF;            --12 WENNeg/RSNeg setup time check (tRSS)            IF WENNeg'event OR (RSNeg'event AND RSNeg = '1') THEN            VitalSetupHoldCheck (                TestSignal      => WENNEg,                TestSignalName  => "WENNeg",                RefSignal       => RSNEg,                RefSignalName   => "RSNEg",                SetupHigh       => tsetup_LDNeg_RSNeg_noedge_posedge,                CheckEnabled    => True,                RefTransition   => '/',                HeaderMsg       => InstancePath & partID,                TimingData      => TD_WENNeg_RSNeg,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_WENNeg_RSNeg);            END IF;            --13 LDNeg/RSNeg setup time check (tRSS)            IF LDNeg'event OR (RSNeg'event AND RSNeg = '1') THEN            VitalSetupHoldCheck (                TestSignal      => LDNEg,                TestSignalName  => "LDNeg",                RefSignal       => RSNEg,                RefSignalName   => "RSNEg",                SetupHigh       => tsetup_LDNeg_RSNeg_noedge_posedge,                CheckEnabled    => True,                RefTransition   => '/',                HeaderMsg       => InstancePath & partID,                TimingData      => TD_LDNeg_RSNeg,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_LDNeg_RSNeg);            END IF;            --14 WXINeg/WCLK setup time check (tXIS)            IF WXINeg'event OR (WCLK'event AND WCLK = '1') THEN            VitalSetupHoldCheck (                TestSignal      => WXINeg,                TestSignalName  => "WXINeg",                RefSignal       => WCLK,                RefSignalName   => "WCLK",                SetupLow        => tsetup_RXINeg_RCLK_noedge_posedge,                CheckEnabled    => True,                RefTransition   => '/',                HeaderMsg       => InstancePath & partID,                TimingData      => TD_WXINeg_WCLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_WXINeg_WCLK);            END IF;            --15 RXINeg/RCLK setup time check (tXIS)            IF RXINeg'event OR (RCLK'event AND RCLK = '1') THEN            VitalSetupHoldCheck (                TestSignal      => RXINeg,                TestSignalName  => "RXINeg",                RefSignal       => RCLK,                RefSignalName   => "RCLK",                SetupLow        => tsetup_RXINeg_RCLK_noedge_posedge,                CheckEnabled    => True,                RefTransition   => '/',                HeaderMsg       => InstancePath & partID,                TimingData      => TD_RXINeg_RCLK,                XOn             => XOn,                MsgOn           => MsgOn,                Violation       => Tviol_RXINeg_RCLK);            END IF;            Violation :=                Pviol_WCLK            OR                Pviol_RCLK            OR                Pviol_RSNeg           OR                Pviol_WXINeg          OR                Pviol_RXINeg          OR                Tviol_D0_WCLK         OR                Tviol_WENNeg_WCLK     OR                Tviol_RENNeg_RCLK     OR                Tviol_LDNeg_WCLK      OR                Tviol_LDNeg_RCLK      OR                Tviol_WENNeg_RSNeg    OR                Tviol_RENNeg_RSNeg    OR                Tviol_LDNeg_RSNeg     OR                Tviol_WXINeg_WCLK     OR                Tviol_RXINeg_RCLK     OR                Rviol_WENNeg_RSNeg    OR                Rviol_RENNeg_RSNeg    OR                Rviol_LDNeg_RSNeg     ;            ASSERT   Violation = '0'            REPORT   InstancePath & partID & " : signal values may be" &                     " incorret due timing violation(s)"            SEVERITY Warning;        END IF;    END PROCESS TimingChecks;    ----------------------------------------------------------------------------    -- Functionality section ---------------------------------------------------    ----------------------------------------------------------------------------    ----------------------------------------------------------------------------    -- FIFO Array                                                             --    ----------------------------------------------------------------------------    Input_Register: PROCESS (WCLK,Wr_RAM_Onint,D)    BEGIN        IF WCLK = '0' THEN            IF (Wr_RAM_Onint='1') THEN                Input_Regint <= D;            END IF;        END IF;    END PROCESS;    Memory: PROCESS(WCLK,Wr_RAM_Onint,Input_Regint,Wr_Pnt_Delint)    BEGIN        IF WCLK = '1' THEN            IF (Wr_RAM_Delint='1') THEN                RAM (to_nat(Wr_Pnt_Delint)) <= Input_Regint;            END IF;        END IF;    END PROCESS;    ----------------------------------------------------------------------------    -- Read/Write Pointer Logic                                               --    ----------------------------------------------------------------------------    Wr_RAM_Onint <='1' when (WENNeg='0') and (Fullint='0') and (LDNeg='1') and                      (Write_Enableint='1') else                   '0';    Wr_RAM_Delint <='1' when (WENNeg='0') and (FF_Delint='0') and (LDNeg='1')                        and (Write_Enableint='1') else                   '0';                  Rd_RAM_Onint <='1' when (RENNeg='0') and (Emptyint='0') and (LDNeg='1')                      and (Read_Enableint='1') else                   '0';    Write_Pointer_Register: PROCESS (RSNeg, WCLK)    BEGIN        IF RSNeg = '0' THEN            Write_PRint <= (others =>'0') ;             Write_Flint<='0';        ELSIF WCLK'event and WCLK='1' THEN                IF (Wr_RAM_Onint='1') THEN                    Write_PRint <= to_slv(WritePnt_Sumint,AddrBitNum);                    Write_Flint<='1';                ELSE                    Write_Flint<='0';                END IF;        END IF;    END PROCESS;    Write_Pointerint <= to_nat(Write_PRint) ;    WritePnt_Sumint <= Write_Pointerint + 1;    Write_Pointer_Delayed_Register: PROCESS (RSNeg, WCLK)    BEGIN        IF RSNeg = '0' THEN            Wr_Pnt_Delint <= (others =>'0') ;        ELSIF WCLK'event and WCLK='0' THEN                Wr_Pnt_Delint <=  Write_PRint;        END IF;    END PROCESS;    Read_Pointer_Register: PROCESS (RSNeg, RCLK)    BEGIN        IF RSNeg = '0' THEN            Read_PRint <= (others =>'0') ;             Read_Flint<='0';        ELSIF RCLK'event and RCLK='1' THEN                IF (Rd_RAM_Onint='1') THEN                    Read_PRint <=  to_slv(Read_Pointerint+1,AddrBitNum);                    Read_Flint<='1';                ELSE                    Read_Flint<='0';                END IF;        END IF;    END PROCESS;    Read_Pointerint <= to_nat(Read_PRint) ;    ----------------------------------------------------------------------------    -- Offset Register Logic                                                  --    ----------------------------------------------------------------------------    Wr_Ofs_Onint <='1' when (WENNeg='0') and (LDNeg='0')                             --and (Write_Enableint='1') --always                             else                   '0';                  Rd_Ofs_Onint <='1' when (RENNeg='0') and (LDNeg='0') and                            (Read_Enableint='1')  else  --not always                   '0';    PAE_Offset_Register: PROCESS (RSNeg, WCLK)    BEGIN        IF RSNeg = '0' THEN            PAE_Offset_Regint <= to_slv(Default_Val,OffsetLength);        ELSIF WCLK'event and WCLK='1' THEN                IF (Wr_Ofs_Onint='1') and (Wr_Offset_Pntint='0') THEN                    PAE_Offset_Regint <= D (OffsetLength-1 DOWNTO 0);                END IF;        END IF;    END PROCESS;    PAF_Offset_Register: PROCESS (RSNeg, WCLK)    BEGIN        IF RSNeg = '0' THEN            PAF_Offset_Regint <= to_slv(Default_Val,OffsetLength);        ELSIF WCLK'event and WCLK='1' THEN                IF (Wr_Ofs_Onint='1') and (Wr_Offset_Pntint='1')  THEN                    PAF_Offset_Regint <= D (OffsetLength-1 DOWNTO 0);                END IF;        END IF;    END PROCESS;    Wr_Offset_Pointer: PROCESS (RSNeg, WCLK)    BEGIN        IF RSNeg = '0' THEN            Wr_Offset_Pntint <= '0' ;        ELSIF WCLK'event and WCLK='1' THEN                IF (Wr_Ofs_Onint='1') THEN                    Wr_Offset_Pntint <= not Wr_Offset_Pntint;                END IF;        END IF;    END PROCESS;    Rd_Offset_Pointer: PROCESS (RSNeg, RCLK)    BEGIN        IF RSNeg = '0' THEN            Rd_Offset_Pntint <= '0';        ELSIF RCLK'event and RCLK='1' THEN                IF (Rd_Ofs_Onint='1')  THEN                    Rd_Offset_Pntint <= not Rd_Offset_Pntint;                END IF;        END IF;    END PROCESS;    ----------------------------------------------------------------------------    -- Flag Logic                                                             --    ----------------------------------------------------------------------------    Empty_Flag: PROCESS (RSNeg, RCLK)    BEGIN        IF RSNeg = '0' THEN            Emptyint <= '1' ;        ELSIF RCLK'event and RCLK='1' THEN            IF (Write_PRint_DEL=                to_slv(Read_Pointerint+1,AddrBitNum)) and --                (Rd_RAM_Onint='1') THEN         --sync set - Rd                Emptyint <= '1' ;            ELSIF (Write_PRint_DEL=                to_slv(Read_Pointerint+1,AddrBitNum))                and (Write_Flint_DEL='1') THEN                                                 --sync reset - Wr                Emptyint <= '0' ;            END IF;        END IF;    END PROCESS;    EFNeg_zd <= not Emptyint;    WrP_mn_RdPint <= Write_Pointerint - Read_Pointerint ;    RdP_mn_WrPint <= Read_Pointerint - Write_Pointerint;    WrP_GE_RdPint <= '1'-- Write_Pointer is > or = to Read_Pointer        when  (Write_Pointerint>=Read_Pointerint)                 --only for reset simulation        and (Write_PRint(0)/='U') and (Read_PRint(0)/='U')        else '0';    AlmEmp_Setint <='1' when        ((WrP_GE_RdPint='1') and (WrP_mn_RdPint=to_nat(PAE_Offset_Regint)))        or        ((WrP_GE_RdPint='0') and         (RdP_mn_WrPint=(RAMSize-to_nat(PAE_Offset_Regint)))        )        else '0';    AlmEmp_Resint <='1' when        ((WrP_GE_RdPint='1') and         (WrP_mn_RdPint=(to_nat(PAE_Offset_Regint)+1))        )        or        ((WrP_GE_RdPint='0') and         (RdP_mn_WrPint=(RAMSize-(to_nat(PAE_Offset_Regint)+1)))        )        else '0';    Almost_Empty_Flag: PROCESS (RSNeg, AlmEmp_Setint, AlmEmp_Resint)    BEGIN        IF (RSNeg='0') or (AlmEmp_Setint='1')   THEN            Almost_Emptyint <= '1';        ELSIF (AlmEmp_Resint='1') THEN            Almost_Emptyint <= '0';        END IF;    END PROCESS;    PAENeg_zd <= not Almost_Emptyint;    Full_Flag: PROCESS (RSNeg, WCLK)    BEGIN        IF RSNeg = '0' THEN            Fullint <= '0';        ELSIF WCLK'event and WCLK='1' THEN            IF  (to_slv(WritePnt_Sumint,AddrBitNum) =                Read_PRint_DEL)                and (Wr_RAM_Onint='1') THEN                Fullint <= '1' ; --sync set - Wr            ELSIF (to_slv(WritePnt_Sumint,AddrBitNum) =                Read_PRint_DEL)                and (Read_Flint_DEL ='1') THEN                Fullint <= '0' ; --sync reset - Rd            END IF;        END IF;    END PROCESS;        Full_Flag_Delayed_Tg: PROCESS (WCLK)    BEGIN        IF WCLK'event and WCLK='0' THEN                FF_Delint <=  Fullint;        END IF;    END PROCESS;    FFNeg_zd <= not Fullint;    AlmFull_Setint <= '1' when        ((WrP_GE_RdPint='1') and         (WrP_mn_RdPint=(RAMSize - to_nat(PAF_Offset_Regint)))        )        or        ((WrP_GE_RdPint='0') and          ((RdP_mn_WrPint=to_nat(PAF_Offset_Regint))              -- only for reset simulation           and (PAF_Offset_Regint(0)/='U')         )        )        else '0';    AlmFull_Resint <= '1' when        ((WrP_GE_RdPint='1') and         (WrP_mn_RdPint=(RAMSize - (to_nat(PAF_Offset_Regint)+1)))        )        or        ((WrP_GE_RdPint='0') and (RdP_mn_WrPint=(to_nat(PAF_Offset_Regint)+1)))        else '0';    Almost_Full_Flag: PROCESS (RSNeg, AlmFull_Resint, AlmFull_Setint)    BEGIN        IF (RSNeg='0') or (AlmFull_Resint='1')   THEN            Almost_Fullint <= '0';        ELSIF (AlmFull_Setint='1') THEN            Almost_Fullint <= '1';

⌨️ 快捷键说明

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