📄 idt72845.vhd
字号:
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 + -