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

📄 orca_mem.vhd

📁 porting scintilla to qt
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        wad2 : IN std_logic;        wad3 : IN std_logic;        wdo0 : OUT std_logic;        wdo1 : OUT std_logic;        rdo0 : OUT std_logic;        rdo1 : OUT std_logic);    ATTRIBUTE Vital_Level0 OF dpr16x2b : ENTITY IS TRUE;END dpr16x2b;-- architecture body --ARCHITECTURE v OF dpr16x2b IS    ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE;   SIGNAL di0_ipd  : std_logic := 'X';   SIGNAL di1_ipd  : std_logic := 'X';   SIGNAL rad0_ipd : std_logic := 'X';   SIGNAL rad1_ipd : std_logic := 'X';   SIGNAL rad2_ipd : std_logic := 'X';   SIGNAL rad3_ipd : std_logic := 'X';   SIGNAL wad0_ipd : std_logic := 'X';   SIGNAL wad1_ipd : std_logic := 'X';   SIGNAL wad2_ipd : std_logic := 'X';   SIGNAL wad3_ipd : std_logic := 'X';   SIGNAL wre_ipd  : std_logic := 'X';   SIGNAL wck_ipd  : std_logic := 'X';BEGIN   -----------------------   -- input path delays   -----------------------   WireDelay : BLOCK   BEGIN   VitalWireDelay(di0_ipd, di0, tipd_di0);   VitalWireDelay(di1_ipd, di1, tipd_di1);   VitalWireDelay(rad0_ipd, rad0, tipd_rad0);   VitalWireDelay(rad1_ipd, rad1, tipd_rad1);   VitalWireDelay(rad2_ipd, rad2, tipd_rad2);   VitalWireDelay(rad3_ipd, rad3, tipd_rad3);   VitalWireDelay(wad0_ipd, wad0, tipd_wad0);   VitalWireDelay(wad1_ipd, wad1, tipd_wad1);   VitalWireDelay(wad2_ipd, wad2, tipd_wad2);   VitalWireDelay(wad3_ipd, wad3, tipd_wad3);   VitalWireDelay(wre_ipd, wre, tipd_wre);   VitalWireDelay(wck_ipd, wck, tipd_wck);   END BLOCK;   -----------------------   -- behavior section   -----------------------   VitalBehavior : PROCESS (wck_ipd, wre_ipd, wad0_ipd,     wad1_ipd, wad2_ipd, wad3_ipd, rad0_ipd, rad1_ipd, rad2_ipd,     rad3_ipd, di0_ipd, di1_ipd)     VARIABLE memory : mem_type_2 ((2**4)-1 downto 0);     VARIABLE radr_reg, wadr_reg, wadr_reg1 : 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, windex1 : integer := 0;     VARIABLE set_reset : std_logic := '1';     -- timing check results     VARIABLE tviol_di0   : x01 := '0';     VARIABLE tviol_di1   : x01 := '0';     VARIABLE tviol_wad0  : x01 := '0';     VARIABLE tviol_wad1  : x01 := '0';     VARIABLE tviol_wad2  : x01 := '0';     VARIABLE tviol_wad3  : x01 := '0';     VARIABLE tviol_wre  : x01 := '0';     VARIABLE tsviol_wre : x01 := '0';     VARIABLE tviol_wck    : x01 := '0';     VARIABLE PeriodCheckInfo_wre : VitalPeriodDataType;     VARIABLE PeriodCheckInfo_wck   : VitalPeriodDataType;     VARIABLE wad0_wck_TimingDatash : VitalTimingDataType;     VARIABLE wad1_wck_TimingDatash : VitalTimingDataType;     VARIABLE wad2_wck_TimingDatash : VitalTimingDataType;     VARIABLE wad3_wck_TimingDatash : VitalTimingDataType;     VARIABLE wre_wck_TimingDatash : VitalTimingDataType;     VARIABLE di0_wck_TimingDatash  : VitalTimingDataType;     VARIABLE di1_wck_TimingDatash  : VitalTimingDataType;     -- functionality results     VARIABLE violation : x01 := '0';     VARIABLE results   : std_logic_vector (3 downto 0) := (others => 'X');     ALIAS wdo0_zd       : std_ulogic IS results(0);     ALIAS wdo1_zd       : std_ulogic IS results(1);     ALIAS rdo0_zd       : std_ulogic IS results(2);     ALIAS rdo1_zd       : std_ulogic IS results(3);     -- output glitch results     VARIABLE wdo0_GlitchData  : VitalGlitchDataType;     VARIABLE wdo1_GlitchData  : VitalGlitchDataType;     VARIABLE rdo0_GlitchData  : VitalGlitchDataType;     VARIABLE rdo1_GlitchData  : VitalGlitchDataType;   BEGIN   -----------------------   -- timing check section   -----------------------        IF (TimingChecksOn) THEN           -- setup and hold checks on the write address lines           VitalSetupHoldCheck (                TestSignal => wad0_ipd,                TestSignalName => "wad0",                RefSignal => wck_ipd,                RefSignalName => "wck",                SetupHigh => tsetup_wad0_wck_noedge_posedge,                setuplow => tsetup_wad0_wck_noedge_posedge,                HoldHigh => thold_wad0_wck_noedge_posedge,                HoldLow => thold_wad0_wck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => wad0_wck_timingdatash,                Violation => tviol_wad0,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => wad1_ipd,                TestSignalName => "wad1",                RefSignal => wck_ipd,                RefSignalName => "wck",                SetupHigh => tsetup_wad1_wck_noedge_posedge,                setuplow => tsetup_wad1_wck_noedge_posedge,                HoldHigh => thold_wad1_wck_noedge_posedge,                HoldLow =>  thold_wad1_wck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => wad1_wck_timingdatash,                Violation => tviol_wad1,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => wad2_ipd,                TestSignalName => "wad2",                RefSignal => wck_ipd,                RefSignalName => "wck",                SetupHigh => tsetup_wad2_wck_noedge_posedge,                setuplow => tsetup_wad2_wck_noedge_posedge,                HoldHigh => thold_wad2_wck_noedge_posedge,                HoldLow => thold_wad2_wck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => wad2_wck_timingdatash,                Violation => tviol_wad2,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => wad3_ipd,                TestSignalName => "wad3",                RefSignal => wck_ipd,                RefSignalName => "wck",                SetupHigh => tsetup_wad3_wck_noedge_posedge,                setuplow => tsetup_wad3_wck_noedge_posedge,                HoldHigh => thold_wad3_wck_noedge_posedge,                HoldLow => thold_wad3_wck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => wad3_wck_timingdatash,                Violation => tviol_wad3,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => wre_ipd,                TestSignalName => "wre",                RefSignal => wck_ipd,                RefSignalName => "wck",                SetupHigh => tsetup_wre_wck_noedge_posedge,                setuplow => tsetup_wre_wck_noedge_posedge,                HoldHigh => thold_wre_wck_noedge_posedge,                HoldLow => thold_wre_wck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => wre_wck_timingdatash,                Violation => tsviol_wre,                MsgSeverity => warning);           -- setup and hold checks on data           VitalSetupHoldCheck (                TestSignal => di0_ipd,                TestSignalName => "di0",                RefSignal => wck_ipd,                RefSignalName => "wck",                SetupHigh => tsetup_di0_wck_noedge_posedge,                setuplow => tsetup_di0_wck_noedge_posedge,                HoldHigh => thold_di0_wck_noedge_posedge,                HoldLow => thold_di0_wck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => di0_wck_timingdatash,                Violation => tviol_di0,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => di1_ipd,                TestSignalName => "di1",                RefSignal => wck_ipd,                RefSignalName => "wck",                SetupHigh => tsetup_di1_wck_noedge_posedge,                setuplow => tsetup_di1_wck_noedge_posedge,                HoldHigh => thold_di1_wck_noedge_posedge,                HoldLow => thold_di1_wck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => di1_wck_timingdatash,                Violation => tviol_di1,                MsgSeverity => warning);           -- Period and pulse width checks on write and port enables           VitalPeriodPulseCheck (               TestSignal => wck_ipd,               TestSignalName => "wck",               Period => tperiod_wck,               PulseWidthHigh => tpw_wck_posedge,               PulseWidthLow => tpw_wck_posedge,               Perioddata => periodcheckinfo_wck,               Violation => tviol_wck,               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_di1 or tviol_wad0 or tviol_wad1 or tviol_wad2 or                tviol_wad3 or tviol_wre or tviol_wck or tsviol_wre ;   IF ((is_x(wre_ipd)) and (set_reset='1')) THEN      assert FALSE        report "dpr16x2b memory hazard write enable unknown!"        severity warning;      results := (others => 'X');   ELSIF (is_x(rad0_ipd) or is_x(rad1_ipd) or is_x(rad2_ipd)        or is_x(rad3_ipd)) THEN      assert FALSE        report "dpr16x2b memory hazard read address unknown!"        severity warning;      results := (others => 'X');   ELSIF ((is_x(wad0_ipd) or is_x(wad1_ipd) or is_x(wad2_ipd)        or is_x(wad3_ipd)) and (set_reset='1')) THEN      assert FALSE        report "dpr16x2b memory hazard write address unknown!"        severity warning;      results := (others => 'X');   ELSE      -- register the write address, write enables and data but not the      -- read address      IF ((wck_ipd'event and wck_ipd = '1') and (set_reset= '1')) THEN         wre_reg := (wre_ipd);         din_reg := (di1_ipd, di0_ipd);         wadr_reg := (wad3_ipd, wad2_ipd, wad1_ipd, wad0_ipd);      END IF;      windex := conv_integer(wadr_reg);      radr_reg := (rad3_ipd, rad2_ipd, rad1_ipd, rad0_ipd);      rindex := conv_integer(radr_reg);      wadr_reg1 := (wad3_ipd, wad2_ipd, wad1_ipd, wad0_ipd);      windex1 := conv_integer(wadr_reg1);      -- at the falling edge of wck, write to memory at address      IF (wre_reg = '1') THEN         IF (wck_ipd'event and wck_ipd = '1') THEN             memory(windex) := din_reg;         END IF;      END IF;      -- asynchronous and synchronous reads      IF (violation = '0') THEN         results(3 downto 2) := memory(rindex);         results(1 downto 0) := memory(windex1);      ELSE         results := (others => 'X');      END IF;    END IF;   ------------------------   -- path delay section   ------------------------   VitalPathDelay01 (     OutSignal => wdo0,     OutSignalName => "wdo0",     OutTemp => wdo0_zd,     Paths => (0 => (wck_ipd'last_event, tpd_wck_wdo0, TRUE)),      GlitchData => wdo0_glitchdata,      Mode => ondetect,      XOn => XOn, MsgOn => MsgOn);   VitalPathDelay01 (     OutSignal => wdo1,     OutSignalName => "wdo1",     OutTemp => wdo1_zd,     Paths => (0 => (wck_ipd'last_event, tpd_wck_wdo1, TRUE)),      GlitchData => wdo1_glitchdata,      Mode => ondetect,      XOn => XOn, MsgOn => MsgOn);   VitalPathDelay01 (     OutSignal => rdo0,     OutSignalName => "rdo0",     OutTemp => rdo0_zd,     Paths => (0 => (rad0_ipd'last_event, tpd_rad0_rdo0, TRUE),               1 => (rad1_ipd'last_event, tpd_rad1_rdo0, TRUE),               2 => (rad2_ipd'last_event, tpd_rad2_rdo0, TRUE),               3 => (rad3_ipd'last_event, tpd_rad3_rdo0, TRUE)),      GlitchData => rdo0_glitchdata,      Mode => ondetect,      XOn => XOn, MsgOn => MsgOn);   VitalPathDelay01 (     OutSignal => rdo1,     OutSignalName => "rdo1",     OutTemp => rdo1_zd,     Paths => (0 => (rad0_ipd'last_event, tpd_rad0_rdo1, TRUE),               1 => (rad1_ipd'last_event, tpd_rad1_rdo1, TRUE),               2 => (rad2_ipd'last_event, tpd_rad2_rdo1, TRUE),               3 => (rad3_ipd'last_event, tpd_rad3_rdo1, TRUE)),      GlitchData => rdo1_glitchdata,      Mode => ondetect,      XOn => XOn, MsgOn => MsgOn);   END PROCESS;END v;------- cell spr16x2b -------LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;USE ieee.vital_timing.all;USE ieee.vital_primitives.all;USE work.mem1.all;-- entity declaration --ENTITY spr16x2b IS  GENERIC (        -- miscellaneous vital GENERICs        TimingChecksOn  : boolean := TRUE;        XOn             : boolean := FALSE;        MsgOn           : boolean := TRUE;        InstancePath    : string  := "spr16x2b";        -- input SIGNAL delays        tipd_ad0 : VitalDelayType01 := (0.0 ns, 0.0 ns);        tipd_ad1 : VitalDelayType01 := (0.0 ns, 0.0 ns);        tipd_ad2 : VitalDelayType01 := (0.0 ns, 0.0 ns);        tipd_ad3 : VitalDelayType01 := (0.0 ns, 0.0 ns);        tipd_di0  : VitalDelayType01 := (0.0 ns, 0.0 ns);        tipd_di1  : VitalDelayType01 := (0.0 ns, 0.0 ns);        tipd_wre  : VitalDelayType01 := (0.0 ns, 0.0 ns);

⌨️ 快捷键说明

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