flex6000_atoms.vhd
来自「一个非常好的dc使用书籍 一个非常好的dc使用书籍」· VHDL 代码 · 共 1,226 行 · 第 1/4 页
VHD
1,226 行
component flex6k_lcell_register
generic (
power_up : string := "low";
packed_mode : string := "false";
TimingChecksOn: Boolean := True;
MsgOn: Boolean := DefGlitchMsgOn;
XOn: Boolean := DefGlitchXOn;
MsgOnChecks: Boolean := DefMsgOnChecks;
XOnChecks: Boolean := DefXOnChecks;
InstancePath: STRING := "*";
tsetup_datain_clk_noedge_posedge : VitalDelayType := DefSetupHoldCnst;
tsetup_datac_clk_noedge_posedge : VitalDelayType := DefSetupHoldCnst;
tsetup_sclr_clk_noedge_posedge : VitalDelayType := DefSetupHoldCnst;
tsetup_sload_clk_noedge_posedge : VitalDelayType := DefSetupHoldCnst;
thold_datain_clk_noedge_posedge : VitalDelayType := DefSetupHoldCnst;
thold_datac_clk_noedge_posedge : VitalDelayType := DefSetupHoldCnst;
thold_sclr_clk_noedge_posedge : VitalDelayType := DefSetupHoldCnst;
thold_sload_clk_noedge_posedge : VitalDelayType := DefSetupHoldCnst;
tpd_clk_regout_posedge : VitalDelayType01 := DefPropDelay01;
tpd_aclr_regout_posedge : VitalDelayType01 := DefPropDelay01;
tpd_clk_qfbko_posedge : VitalDelayType01 := DefPropDelay01;
tpd_aclr_qfbko_posedge : VitalDelayType01 := DefPropDelay01;
tperiod_clk_posedge : VitalDelayType := DefPulseWdthCnst;
tipd_datac : VitalDelayType01 := DefPropDelay01;
tipd_aclr : VitalDelayType01 := DefPropDelay01;
tipd_sclr : VitalDelayType01 := DefPropDelay01;
tipd_sload : VitalDelayType01 := DefPropDelay01;
tipd_clk : VitalDelayType01 := DefPropDelay01);
port (clk : in std_logic;
datain : in std_logic := '1';
datac : in std_logic := '1';
aclr : in std_logic := '0';
sclr : in std_logic := '0';
sload : in std_logic := '0';
devclrn : in std_logic := '1';
devpor : in std_logic := '1';
regout : out std_logic;
qfbko : out std_logic);
end component;
begin
lecomb: flex6k_asynch_lcell
generic map (
operation_mode => operation_mode,
output_mode => output_mode,
lut_mask => lut_mask,
cin_used => cin_used)
port map (
dataa => dataa,
datab => datab,
datac => datac,
datad => datad,
cin => cin,
cascin => cascin,
qfbkin => qfbk,
combout => combout,
cout => cout,
cascout => cascout,
regin => dffin);
lereg: flex6k_lcell_register
generic map (
power_up => power_up,
packed_mode => packed_mode)
port map (
clk => clk,
datain => dffin,
datac => datac,
aclr => aclr,
sclr => sclr,
sload => sload,
devclrn => devclrn,
devpor => devpor,
regout => regout,
qfbko => qfbk);
end vital_le_atom;
--
--
-- FLEX6K_IO Model
--
--
-- ENTITY flex6k_asynch_io
--
library IEEE, flex6000;
use IEEE.std_logic_1164.all;
use IEEE.VITAL_Timing.all;
use IEEE.VITAL_Primitives.all;
use flex6000.atom_pack.all;
entity flex6k_asynch_io is
generic (
operation_mode : string := "input";
feedback_mode : string := "from_pin";
output_enable : string := "false";
TimingChecksOn: Boolean := True;
MsgOn: Boolean := DefGlitchMsgOn;
XOn: Boolean := DefGlitchXOn;
MsgOnChecks: Boolean := DefMsgOnChecks;
XOnChecks: Boolean := DefXOnChecks;
InstancePath: STRING := "*";
tpd_datain_padio : VitalDelayType01 := DefPropDelay01;
tpd_padio_combout : VitalDelayType01 := DefPropDelay01;
tpd_oe_padio_posedge : VitalDelayType01 := DefPropDelay01;
tpd_oe_padio_negedge : VitalDelayType01 := DefPropDelay01;
tipd_datain : VitalDelayType01 := DefPropDelay01;
tipd_oe : VitalDelayType01 := DefPropDelay01;
tipd_padio : VitalDelayType01 := DefPropDelay01);
port (
datain : in std_logic;
oe : in std_logic;
padio : inout std_logic;
combout : out std_logic);
attribute VITAL_LEVEL0 of flex6k_asynch_io : entity is TRUE;
end flex6k_asynch_io;
architecture vital_asynch_io of flex6k_asynch_io is
attribute VITAL_LEVEL0 of vital_asynch_io : architecture is TRUE;
signal oe_ipd : std_logic;
signal datain_ipd, padio_ipd : std_logic;
begin
---------------------
-- INPUT PATH DELAYs
---------------------
WireDelay : block
begin
VitalWireDelay (datain_ipd, datain, tipd_datain);
VitalWireDelay (padio_ipd, padio, tipd_padio);
VitalWireDelay (oe_ipd, oe, tipd_oe);
end block;
VITALtiming : process(datain_ipd, oe_ipd, padio_ipd)
variable Tviol_datain_clk : std_ulogic := '0';
variable Tviol_padio_clk : std_ulogic := '0';
variable TimingData_datain_clk : VitalTimingDataType := VitalTimingDataInit;
variable TimingData_padio_clk : VitalTimingDataType := VitalTimingDataInit;
variable combout_VitalGlitchData : VitalGlitchDataType;
variable padio_VitalGlitchData : VitalGlitchDataType;
variable tri_in : std_logic := '0';
variable tmp_combout, tmp_padio, oe_val, temp : std_logic;
begin
if ((feedback_mode = "none")) then
if ((operation_mode = "output") or
(operation_mode = "bidir")) then
tri_in := datain_ipd;
end if;
elsif ((feedback_mode = "from_pin")) then
if (operation_mode = "input") then
tmp_combout := to_x01z(padio_ipd);
elsif (operation_mode = "bidir") then
tmp_combout := to_x01z(padio_ipd);
tri_in := datain_ipd;
end if;
end if;
if (operation_mode = "output") then
oe_val := to_x01z(oe_ipd);
if (oe_val = '0') then
temp := 'Z';
else
temp := tri_in;
end if;
if (oe_ipd = '1') then
tmp_padio := temp;
elsif (oe_ipd = '0') then
tmp_padio := 'Z';
end if;
elsif ((operation_mode = "bidir")or (operation_mode = "output")) then
if ((oe_ipd = '1')) then
tmp_padio := tri_in;
elsif ((oe_ipd = '0')) then
tmp_padio := 'Z';
end if;
else
tmp_padio := 'Z';
end if;
----------------------
-- Path Delay Section
----------------------
VitalPathDelay01 (
OutSignal => combout,
OutSignalName => "COMBOUT",
OutTemp => tmp_combout,
Paths => (
0 => (padio_ipd'last_event, tpd_padio_combout, TRUE)),
GlitchData => combout_VitalGlitchData,
Mode => DefGlitchMode,
XOn => XOn,
MsgOn => MsgOn );
VitalPathDelay01 (
OutSignal => padio,
OutSignalName => "PADIO",
OutTemp => tmp_padio,
Paths => (
1 => (oe_ipd'last_event, tpd_oe_padio_posedge, oe_ipd = '1'),
2 => (oe_ipd'last_event, tpd_oe_padio_negedge, oe_ipd = '0'),
3 => (datain_ipd'last_event, tpd_datain_padio, TRUE)),
GlitchData => padio_VitalGlitchData,
Mode => DefGlitchMode,
XOn => XOn,
MsgOn => MsgOn );
end process;
end vital_asynch_io;
--
-- ENTITY flex6k_io
--
library IEEE, flex6000;
use IEEE.std_logic_1164.all;
use IEEE.VITAL_Timing.all;
use IEEE.VITAL_Primitives.all;
use flex6000.atom_pack.all;
entity flex6k_io is
generic (
operation_mode : string := "input";
feedback_mode : string := "from_pin";
power_up : string := "low";
output_enable : string := "false");
port (
datain : in std_logic;
oe : in std_logic;
devclrn : in std_logic := '1';
devpor : in std_logic := '1';
devoe : in std_logic := '0';
padio : inout std_logic;
combout : out std_logic);
end flex6k_io;
architecture arch of flex6k_io is
signal vcc : std_logic := '1';
signal comb_out, reg_out : std_logic;
component flex6k_asynch_io
generic (
operation_mode : string := "input";
feedback_mode : string := "from_pin";
output_enable : string := "false";
TimingChecksOn: Boolean := True;
MsgOn: Boolean := DefGlitchMsgOn;
XOn: Boolean := DefGlitchXOn;
MsgOnChecks: Boolean := DefMsgOnChecks;
XOnChecks: Boolean := DefXOnChecks;
InstancePath: STRING := "*";
tpd_datain_padio : VitalDelayType01 := DefPropDelay01;
tpd_padio_combout : VitalDelayType01 := DefPropDelay01;
tpd_oe_padio_posedge : VitalDelayType01 := DefPropDelay01;
tpd_oe_padio_negedge : VitalDelayType01 := DefPropDelay01;
tipd_datain : VitalDelayType01 := DefPropDelay01;
tipd_oe : VitalDelayType01 := DefPropDelay01;
tipd_padio : VitalDelayType01 := DefPropDelay01);
port (datain : in std_logic;
oe : in std_logic;
padio : inout std_logic;
combout : out std_logic);
end component;
begin
asynch_inst: flex6k_asynch_io
generic map (
operation_mode => operation_mode,
feedback_mode => feedback_mode,
output_enable => output_enable)
port map (
datain => datain,
oe => oe,
padio => padio,
combout => comb_out);
combout <= comb_out;
end arch;
--
-- END of FLEX6K IO
--
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?