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

📄 ecp2_mem.vhd

📁 porting scintilla to qt
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        tpw_wre_posedge : VitalDelayType := 0.001 ns;        tpw_wre_negedge : VitalDelayType := 0.001 ns;        tperiod_wck              : VitalDelayType := 0.001 ns;        tpw_wck_posedge         : VitalDelayType := 0.001 ns;        tpw_wck_negedge         : VitalDelayType := 0.001 ns;        -- propagation delays        tpd_rad0_do0    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad1_do0    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad2_do0    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad3_do0    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad0_do1    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad1_do1    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad2_do1    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad3_do1    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad0_do2    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad1_do2    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad2_do2    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad3_do2    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad0_do3    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad1_do3    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad2_do3    : VitalDelayType01 := (0.001 ns, 0.001 ns);        tpd_rad3_do3    : VitalDelayType01 := (0.001 ns, 0.001 ns));  port (di0  : IN std_logic;        di1  : IN std_logic;        di2  : IN std_logic;        di3  : IN std_logic;        wck  : IN std_logic;        wre  : IN std_logic;        rad0 : IN std_logic;        rad1 : IN std_logic;        rad2 : IN std_logic;        rad3 : IN std_logic;        wad0 : IN std_logic;        wad1 : IN std_logic;        wad2 : IN std_logic;        wad3 : IN std_logic;        do0 : OUT std_logic;        do1 : OUT std_logic;        do2 : OUT std_logic;        do3 : OUT std_logic);    ATTRIBUTE Vital_Level0 OF dpr16x4a : ENTITY IS TRUE;END dpr16x4a;-- architecture body --ARCHITECTURE v OF dpr16x4a IS    ATTRIBUTE Vital_Level0 OF v : ARCHITECTURE IS TRUE;   SIGNAL di0_ipd  : std_logic := 'X';   SIGNAL di1_ipd  : std_logic := 'X';   SIGNAL di2_ipd  : std_logic := 'X';   SIGNAL di3_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(di2_ipd, di2, tipd_di2);   VitalWireDelay(di3_ipd, di3, tipd_di3);   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, di2_ipd, di3_ipd)     VARIABLE memory : mem_type_4 ((2**4)-1 downto 0);     VARIABLE radr_reg, wadr_reg : std_logic_vector(3 downto 0) := "0000";     VARIABLE din_reg : std_logic_vector(3 downto 0) := "0000";     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_di2   : x01 := '0';     VARIABLE tviol_di3   : 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;     VARIABLE di2_wck_TimingDatash  : VitalTimingDataType;     VARIABLE di3_wck_TimingDatash  : VitalTimingDataType;     -- functionality results     VARIABLE violation : x01 := '0';     VARIABLE results   : std_logic_vector (3 downto 0) := (others => 'X');     ALIAS do0_zd       : std_ulogic IS results(0);     ALIAS do1_zd       : std_ulogic IS results(1);     ALIAS do2_zd       : std_ulogic IS results(2);     ALIAS do3_zd       : std_ulogic IS results(3);     -- output glitch results     VARIABLE do0_GlitchData  : VitalGlitchDataType;     VARIABLE do1_GlitchData  : VitalGlitchDataType;     VARIABLE do2_GlitchData  : VitalGlitchDataType;     VARIABLE do3_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);           VitalSetupHoldCheck (                TestSignal => di2_ipd,                TestSignalName => "di2",                RefSignal => wck_ipd,                RefSignalName => "wck",                SetupHigh => tsetup_di2_wck_noedge_posedge,                setuplow => tsetup_di2_wck_noedge_posedge,                HoldHigh => thold_di2_wck_noedge_posedge,                HoldLow => thold_di2_wck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => di2_wck_timingdatash,                Violation => tviol_di2,                MsgSeverity => warning);           VitalSetupHoldCheck (                TestSignal => di3_ipd,                TestSignalName => "di3",                RefSignal => wck_ipd,                RefSignalName => "wck",                SetupHigh => tsetup_di3_wck_noedge_posedge,                setuplow => tsetup_di3_wck_noedge_posedge,                HoldHigh => thold_di3_wck_noedge_posedge,                HoldLow => thold_di3_wck_noedge_posedge,                CheckEnabled => (set_reset='1'),                RefTransition => '/',                MsgOn => MsgOn, XOn => XOn,                HeaderMsg => InstancePath,                TimingData => di3_wck_timingdatash,                Violation => tviol_di3,                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   ------------------------   Violation := tviol_di0 or tviol_di1 or tviol_di2 or tviol_di3 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      if (wck_ipd'event and wck_ipd = '1') then         assert FALSE           report "dpr16x4a memory hazard write enable unknown!"           severity warning;         results := (others => 'X');      end if;   ELSIF (is_x(rad0_ipd) or is_x(rad1_ipd) or is_x(rad2_ipd) or is_x(rad3_ipd)) THEN--      assert FALSE--        report "dpr16x4a 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      if (wck_ipd'event and wck_ipd = '1') then         assert FALSE           report "dpr16x4a memory hazard write address unknown!"           severity warning;         results := (others => 'X');      end if;   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 := (di3_ipd, di2_ipd, 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);      IF (wre_reg = '1') THEN         IF (wck_ipd'event and wck_ipd = '1') THEN             memory(windex) := din_reg;         END IF;      END IF;      -- asynchronous reads      IF (violation = '0') THEN         results(3 downto 0) := memory(rindex);      ELSE         results := (others => 'X');      END IF;   END IF;   ------------------------   -- path delay section

⌨️ 快捷键说明

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