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

📄 orca_mem.vhd

📁 porting scintilla to qt
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        tipd_ck   : VitalDelayType01 := (0.0 ns, 0.0 ns);        -- setup and hold constraints        tsetup_ad0_ck_noedge_posedge : VitalDelayType := 0.0 ns;        tsetup_ad1_ck_noedge_posedge : VitalDelayType := 0.0 ns;        tsetup_ad2_ck_noedge_posedge : VitalDelayType := 0.0 ns;        tsetup_ad3_ck_noedge_posedge : VitalDelayType := 0.0 ns;        tsetup_wre_ck_noedge_posedge : VitalDelayType := 0.0 ns;        tsetup_di0_ck_noedge_posedge  : VitalDelayType := 0.0 ns;        tsetup_di1_ck_noedge_posedge  : VitalDelayType := 0.0 ns;        thold_ad0_ck_noedge_posedge  : VitalDelayType := 0.0 ns;        thold_ad1_ck_noedge_posedge  : VitalDelayType := 0.0 ns;        thold_ad2_ck_noedge_posedge  : VitalDelayType := 0.0 ns;        thold_ad3_ck_noedge_posedge  : VitalDelayType := 0.0 ns;        thold_wre_ck_noedge_posedge  : VitalDelayType := 0.0 ns;        thold_di0_ck_noedge_posedge   : VitalDelayType := 0.0 ns;        thold_di1_ck_noedge_posedge   : VitalDelayType := 0.0 ns;        -- pulse width constraints        tperiod_wre             : VitalDelayType := 0.001 ns;        tpw_wre_posedge : VitalDelayType := 0.001 ns;        tpw_wre_negedge : VitalDelayType := 0.001 ns;        tperiod_ck              : VitalDelayType := 0.001 ns;        tpw_ck_posedge          : VitalDelayType := 0.001 ns;        tpw_ck_negedge          : VitalDelayType := 0.001 ns;        -- propagation delays        tpd_ck_do0     : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_ck_do1     : VitalDelayType01 := (0.001 ns, 0.001 ns));  port (di0  : IN std_logic;        di1  : IN std_logic;        ck   : IN std_logic;        wre  : IN std_logic;        ad0  : IN std_logic;        ad1  : IN std_logic;        ad2  : IN std_logic;        ad3  : IN std_logic;        do0  : OUT std_logic;        do1  : OUT std_logic);    ATTRIBUTE Vital_Level0 OF spr16x2b : ENTITY IS TRUE;END spr16x2b;-- architecture body --ARCHITECTURE v OF spr16x2b IS    ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE;   SIGNAL di0_ipd  : std_logic := 'X';   SIGNAL di1_ipd  : std_logic := 'X';   SIGNAL ad0_ipd : std_logic := 'X';   SIGNAL ad1_ipd : std_logic := 'X';   SIGNAL ad2_ipd : std_logic := 'X';   SIGNAL ad3_ipd : std_logic := 'X';   SIGNAL wre_ipd : std_logic := 'X';   SIGNAL ck_ipd   : std_logic := 'X';BEGIN   -----------------------   -- input path delays   -----------------------   WireDelay : BLOCK   BEGIN   VitalWireDelay(di0_ipd, di0, tipd_di0);   VitalWireDelay(di1_ipd, di1, tipd_di1);   VitalWireDelay(ad0_ipd, ad0, tipd_ad0);   VitalWireDelay(ad1_ipd, ad1, tipd_ad1);   VitalWireDelay(ad2_ipd, ad2, tipd_ad2);   VitalWireDelay(ad3_ipd, ad3, tipd_ad3);   VitalWireDelay(wre_ipd, wre, tipd_wre);   VitalWireDelay(ck_ipd, ck, tipd_ck);   END BLOCK;   -----------------------   -- behavior section   -----------------------   VitalBehavior : PROCESS (ck_ipd, wre_ipd, ad0_ipd,     ad1_ipd, ad2_ipd, ad3_ipd, di0_ipd, di1_ipd)     VARIABLE memory : mem_type_2 ((2**4)-1 downto 0);     VARIABLE radr_reg, wadr_reg : std_logic_vector(3 downto 0) := "0000";     VARIABLE din_reg : std_logic_vector(1 downto 0) := "00";     VARIABLE wre_reg : std_logic := '0';     VARIABLE rindex, windex : integer := 0;     VARIABLE set_reset : std_logic := '1';     -- timing check results     VARIABLE tviol_di0   : x01 := '0';     VARIABLE tviol_di1   : x01 := '0';     VARIABLE tviol_ad0  : x01 := '0';     VARIABLE tviol_ad1  : x01 := '0';     VARIABLE tviol_ad2  : x01 := '0';     VARIABLE tviol_ad3  : x01 := '0';     VARIABLE tviol_wre  : x01 := '0';     VARIABLE tsviol_wre : x01 := '0';     VARIABLE tviol_ck    : x01 := '0';     VARIABLE PeriodCheckInfo_wre : VitalPeriodDataType;     VARIABLE PeriodCheckInfo_ck   : VitalPeriodDataType;     VARIABLE ad0_ck_TimingDatash : VitalTimingDataType;     VARIABLE ad1_ck_TimingDatash : VitalTimingDataType;     VARIABLE ad2_ck_TimingDatash : VitalTimingDataType;     VARIABLE ad3_ck_TimingDatash : VitalTimingDataType;     VARIABLE wre_ck_TimingDatash : VitalTimingDataType;     VARIABLE di0_ck_TimingDatash  : VitalTimingDataType;     VARIABLE di1_ck_TimingDatash  : VitalTimingDataType;     -- functionality results     VARIABLE violation : x01 := '0';     VARIABLE results   : std_logic_vector (1 downto 0) := (others => 'X');     ALIAS do0_zd       : std_ulogic IS results(0);     ALIAS do1_zd       : std_ulogic IS results(1);     -- output glitch results     VARIABLE do0_GlitchData  : VitalGlitchDataType;     VARIABLE do1_GlitchData  : VitalGlitchDataType;   BEGIN   -----------------------   -- timing check section   -----------------------        IF (TimingChecksOn) THEN           -- setup and hold checks on the write address lines           VitalSetupHoldCheck (                TestSignal => ad0_ipd,                TestSignalName => "ad0",                RefSignal => ck_ipd,                RefSignalName => "ck",                SetupHigh => tsetup_ad0_ck_noedge_posedge,                setuplow => tsetup_ad0_ck_noedge_posedge,                HoldHigh => thold_ad0_ck_noedge_posedge,                HoldLow => thold_ad0_ck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => ad0_ck_timingdatash,                Violation => tviol_ad0,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => ad1_ipd,                TestSignalName => "ad1",                RefSignal => ck_ipd,                RefSignalName => "ck",                SetupHigh => tsetup_ad1_ck_noedge_posedge,                setuplow => tsetup_ad1_ck_noedge_posedge,                HoldHigh => thold_ad1_ck_noedge_posedge,                HoldLow =>  thold_ad1_ck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => ad1_ck_timingdatash,                Violation => tviol_ad1,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => ad2_ipd,                TestSignalName => "ad2",                RefSignal => ck_ipd,                RefSignalName => "ck",                SetupHigh => tsetup_ad2_ck_noedge_posedge,                setuplow => tsetup_ad2_ck_noedge_posedge,                HoldHigh => thold_ad2_ck_noedge_posedge,                HoldLow => thold_ad2_ck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => ad2_ck_timingdatash,                Violation => tviol_ad2,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => ad3_ipd,                TestSignalName => "ad3",                RefSignal => ck_ipd,                RefSignalName => "ck",                SetupHigh => tsetup_ad3_ck_noedge_posedge,                setuplow => tsetup_ad3_ck_noedge_posedge,                HoldHigh => thold_ad3_ck_noedge_posedge,                HoldLow => thold_ad3_ck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => ad3_ck_timingdatash,                Violation => tviol_ad3,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => wre_ipd,                TestSignalName => "wre",                RefSignal => ck_ipd,                RefSignalName => "ck",                SetupHigh => tsetup_wre_ck_noedge_posedge,                setuplow => tsetup_wre_ck_noedge_posedge,                HoldHigh => thold_wre_ck_noedge_posedge,                HoldLow => thold_wre_ck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => wre_ck_timingdatash,                Violation => tsviol_wre,                MsgSeverity => warning);           -- setup and hold checks on data           VitalSetupHoldCheck (                TestSignal => di0_ipd,                TestSignalName => "di0",                RefSignal => ck_ipd,                RefSignalName => "ck",                SetupHigh => tsetup_di0_ck_noedge_posedge,                setuplow => tsetup_di0_ck_noedge_posedge,                HoldHigh => thold_di0_ck_noedge_posedge,                HoldLow => thold_di0_ck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => di0_ck_timingdatash,                Violation => tviol_di0,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => di1_ipd,                TestSignalName => "di1",                RefSignal => ck_ipd,                RefSignalName => "ck",                SetupHigh => tsetup_di1_ck_noedge_posedge,                setuplow => tsetup_di1_ck_noedge_posedge,                HoldHigh => thold_di1_ck_noedge_posedge,                HoldLow => thold_di1_ck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => di1_ck_timingdatash,                Violation => tviol_di1,                MsgSeverity => warning);           -- Period and pulse width checks on write and port enables           VitalPeriodPulseCheck (               TestSignal => ck_ipd,               TestSignalName => "ck",               Period => tperiod_ck,               PulseWidthHigh => tpw_ck_posedge,               PulseWidthLow => tpw_ck_posedge,               Perioddata => periodcheckinfo_ck,               Violation => tviol_ck,               MsgOn => MsgOn, XOn => XOn,               HeaderMsg => InstancePath,               CheckEnabled => TRUE,               MsgSeverity => warning);           VitalPeriodPulseCheck (               TestSignal => wre_ipd,               TestSignalName => "wre",               Period => tperiod_wre,               PulseWidthHigh => tpw_wre_posedge,               PulseWidthLow => tpw_wre_posedge,               Perioddata => periodcheckinfo_wre,               Violation => tviol_wre,               MsgOn => MsgOn, XOn => XOn,               HeaderMsg => InstancePath,               CheckEnabled => TRUE,               MsgSeverity => warning);        END IF;   ------------------------   -- functionality section   ------------------------ --   IF (disabled_gsr =  1) THEN --      set_reset := purnet; --   ELSE --      set_reset := purnet AND gsrnet; --   END IF; --  IF (set_reset= '0') THEN --     wre_reg := '0'; --     wadr_reg := "0000"; --  END IF;   Violation := tviol_di0 or tviol_di0 or tviol_ad0 or tviol_ad1 or tviol_ad2 or                tviol_ad3 or tviol_wre or tviol_ck or tsviol_wre;   IF ((is_x(wre_ipd)) and (set_reset='1')) THEN      assert FALSE        report "spr16x2b memory hazard write enable unknown!"        severity warning;      results := (others => 'X');   ELSIF (is_x(ad0_ipd) or is_x(ad1_ipd) or is_x(ad2_ipd)        or is_x(ad3_ipd)) THEN      assert FALSE        report "spr16x2b memory hazard read address unknown!"        severity warning;      results := (others => 'X');   ELSE      -- register the write address, write enables and data but not the      -- read address      IF ((ck_ipd'event and ck_ipd = '1') and (set_reset= '1')) THEN         wre_reg := (wre_ipd);         din_reg := (di1_ipd, di0_ipd);         wadr_reg := (ad3_ipd, ad2_ipd, ad1_ipd, ad0_ipd);      END IF;      windex := conv_integer(wadr_reg);      radr_reg := (ad3_ipd, ad2_ipd, ad1_ipd, ad0_ipd);      rindex := conv_integer(radr_reg);      -- at the falling edge of ck, write to memory at address      IF (wre_reg = '1') THEN         IF (ck_ipd'event and ck_ipd = '1') THEN             memory(windex) := din_reg;         END IF;      END IF;      -- asynchronous and synchronous reads      IF (violation = '0') THEN         results(1 downto 0) := memory(rindex);      ELSE         results := (others => 'X');      END IF;    END IF;   ------------------------   -- path delay section   ------------------------   VitalPathDelay01 (     OutSignal => do0,     OutSignalName => "do0",     OutTemp => do0_zd,     Paths => (0 => (ck_ipd'last_event, tpd_ck_do0, TRUE)),      GlitchData => do0_glitchdata,      Mode => ondetect,      XOn => XOn, MsgOn => MsgOn);   VitalPathDelay01 (     OutSignal => do1,     OutSignalName => "do1",     OutTemp => do1_zd,     Paths => (0 => (ck_ipd'last_event, tpd_ck_do1, TRUE)),      GlitchData => do1_glitchdata,      Mode => ondetect,      XOn => XOn, MsgOn => MsgOn);   END PROCESS;END v;-------cell dp8ka------library ieee;use ieee.std_logic_1164.all;use ieee.vital_timing.all;use ieee.vital_primitives.all;use ieee.std_logic_unsigned.all;use work.global.gsrnet;use work.global.purnet;use work.mem3.all;-- entity declaration --ENTITY dp8ka IS   GENERIC (        DATA_WIDTH_A               : Integer  := 18;        DATA_WIDTH_B               : Integer  := 18;        REGMODE_A                  : String   := "NOREG";        REGMODE_B                  : String   := "NOREG";        RESETMODE                  : String   := "SYNC";        CSDECODE_A                 : String   := "000";        CSDECODE_B                 : String   := "000";        WRITEMODE_A                : String   := "NORMAL";        WRITEMODE_B                : String   := "NORMAL";        GSR                        : String   := "DISABLED";        initval_00 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_01 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_02 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_03 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_04 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_05 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_06 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_07 : String := "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000";        initval_08 : String := "0x0000000000000000000000

⌨️ 快捷键说明

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