📄 pcic_t.tdf
字号:
-- Function prototype for pcic_c: pci_b configuration Module
FUNCTION pcic_c (clk, rstn, cben_ir[3..0], ad_ir[31..0], adr_phase, cfg_dat_vld, serr_det,
adr_dec_ena, tabrt_set, tabrt_rcvd_set, mabrt_set, bar_hit_rst, perr_det_set,
perr_rep_set, lcfg_adr[7..0], lcfg_ben[3..0], lcfg_dat_in[31..0], lcfg_adr_vld,
lcfg_dat_vld, dac_cfg, ad_ir_addr[31..0], cben_ir_addr[3..0])
WITH (LOCAL_CONFIG_ENA, HOST_BRIDGE_ENA, VENDOR_ID, DEVICE_ID, REVISION_ID, CLASS_CODE,
SUBSYSTEM_ID, SUBSYSTEM_VENDOR_ID, MIN_GRANT, MAX_LATENCY, BAR0, BAR1,
BAR2, BAR3, BAR4, BAR5, NUMBER_OF_BARS)
RETURNS (mem_bar_hit, io_bar_hit, cfg_dat_out[31..0], io_ena, mem_ena, mstr_ena, mwi_ena,
perr_ena, serr_ena, perr_rep, tabrt_sig, tabrt_rcvd, mabrt_rcvd, serr_sig,
perr_det, lat_dat[7..0], cache_dat[7..0], base_hit[5..0], lcfg_dat_out[31..0], dac_out);--, cap_ptr_dat[7..0]);
-- Function prototype for pcic_sr: pci_b set/reset flip flop with set dominant
FUNCTION pcic_sr (s, r, clk, clrn, prn)
RETURNS (q);
% JOT
FUNCTION pcic_m (clk, rstn, gnt, low_ad_ir[31..0], high_ad_ir[31..0], frame, irdy, trdy, devsel, stop, perr, mstr_ena, lat_dat[7..0],
lm_req32, lm_last, lm_rdyn, low_lm_dati[31..0], lm_adri[31..0], low_lm_beni[3..0], ack64, high_lm_dati[31..0],
high_lm_beni[3..0], lm_cmd[3..0])
WITH (OPTIMIZE_MSTR)
RETURNS (low_data_out[31..0], high_data_out[31..0], ad_oe, ad_sel, ad_ir_ce_D, cbe_ce, low_cbe_out[3..0], high_cbe_out[3..0], cbe_oe,
frame_out, frame_oe, irdy_out, irdy_oe, req_out, perr_vld, perr_oe, par_oe, perr_rep_set, targ_abrt_set, mstr_abrt_set,
lm_ackn, trdyrn, low_lm_dato[31..0], lm_tsr[8..0], mstr_actv, hr_dat_sel, dati_HR_ena, ADOR_ena, hr_cbe_sel, cbe_HR_ena,
req64_out, req64_oe, high_lm_dato[31..0], hr_adr_sel);
%
FUNCTION pcic_m (clk, rstn, gnt, frame, irdy, trdy, devsel, stop, perr, mstr_ena, lat_dat[7..0],
lm_req64, lm_req32, lm_last, lm_rdyn, low_lm_dati[31..0], lm_adri[31..0], low_lm_beni[3..0], ack64, high_lm_dati[31..0],
high_lm_beni[3..0], lm_cmd[3..0]%64bit_PCI%)
WITH (OPTIMIZE_MSTR)
RETURNS (low_data_out[31..0], high_data_out[31..0], ad_oe, ad_sel, ad_ir_ce_D, cbe_ce, low_cbe_out[3..0], high_cbe_out[3..0], cbe_oe,
frame_out, frame_oe, irdy_out, irdy_oe, req_out, perr_vld, perr_oe, par_oe, perr_rep_set, targ_abrt_set, mstr_abrt_set,
lm_adr_ackn, lm_ackn, %trdyrn,% lm_tsr[9..0], mstr_actv, hr_dat_sel, dati_HR_ena, ADOR_ena, hr_cbe_sel, cbe_HR_ena,
req64_out, req64_oe, hr_adr_sel, lm_ldata_ackn, lm_hdata_ackn, lm_dxfrn, ADOR_HI_DENA, HI_LOW_SEL, 64_trans_out, ad_ir_ce_a, cben_ir_ce_a,
cben_ir_ce_d, dac_decode_out);
INCLUDE "maxplus2.inc";
PARAMETERS
(
CAP_LIST_ENA = "NO",
HOST_BRIDGE_ENA = "NO",
DATA_TIMEOUT = 16, -- Timeout length
OPTIMIZE_TARG = "YES"
);
CONSTANT DATA_TIMEOUT_WIDTH = CEIL(LOG2(DATA_TIMEOUT-1));
subdesign 'pcic_t'
(
-- PCI Signal Inputs
clk : INPUT; -- PCI Clock
rstn : INPUT; -- PCI Reset
ad_ir_address[31..0] : INPUT; -- AD Input Registers Address
ad_ir_data[31..0] : INPUT;
cben_ir_data[3..0] : INPUT;
cben_IR_address[3..0] : INPUT; -- Command/Byte Enable Input Registers
frame : INPUT; -- Active High FRAMEn Input
irdy : INPUT; -- Active High IRDYn Input
idsel : INPUT; -- IDSEL Input Register
req64 : INPUT; -- Request 64 bit transactions
-- Local Side Inputs
low_lt_dati[31..0] : INPUT; -- Local Target Data Input
high_lt_dati[31..0] : INPUT; -- Local Target Data Input
lt_rdyn : INPUT; -- Local Target Ready Input
lt_discn : INPUT; -- Local Target Disconnect Input
lt_abortn : INPUT; -- Local Target Abort Input
-- 64bit_PCI : INPUT; -- Indicates a pure 64 bit system
perr_rep_set : INPUT; -- Data Parity Error Signaled
perr_det_set : INPUT; -- Parity Error Detected
serr_sig_set : INPUT; -- System Parity Error Signaled
mstr_actv : INPUT; -- Master is Active. Has PCI Bus.
mstr_dac_decode : INPUT;
mstr_abrt_set : INPUT; -- Master Abort Set
targ_abrt_set : INPUT; -- Target Abort Set
lm_ackn : INPUT;
-- cap_ptr_dat[7..0] : INPUT;
serr_vld : OUTPUT; -- SERR valid
perr_vld : OUTPUT; -- Parity Error was detected
perr_oe : OUTPUT; -- PERR Output Enable
par_oe : OUTPUT; -- PAR Output Enable
-- Local Side Outputs
lt_dxfrn : OUTPUT; -- Target data transfer is occurring
lt_tsr[11..0] : OUTPUT; -- Target Transaction Status Registers
-- 5..0: Target Base Address Register accessed
-- 6: Target indicates an Expansion ROM hit
-- 7: Target transaction is 64 bit
-- 8: Target is accessed from PCI bus
-- 9: Burst
-- 10: I/O Cycle
lt_adr[63..0] : OUTPUT; -- Local Target Address
lt_cmd[3..0] : OUTPUT; -- Local Target Command
low_lt_ben[3..0] : OUTPUT; -- Local Target Byte Enables
high_lt_ben[3..0] : OUTPUT; -- Local Target Byte Enables
lt_framen : OUTPUT; -- Local Target Frame
lt_ackn : OUTPUT; -- Local target Acknowledge
lt_ldata_ackn : OUTPUT; -- Local low output data acknowledge
lt_hdata_ackn : OUTPUT; -- Local high output data acknowledge
irdyrn : OUTPUT; -- This is a registered version of PCI irdyn signal
-- AD Bus Controls
low_data_out[31..0] : OUTPUT; -- Local Side Low Output Data to AD Output Register
high_data_out[31..0]: OUTPUT; -- Local Side High Output Data to AD Output Register
cfg_dat_out[31..0] : OUTPUT; -- Configuration data Output to AD Output Register
cfg_cyc_out : OUTPUT; -- Configuratiob Cycle Indicator
hr_dat_sel : OUTPUT; -- Holding Register Select Signal
hi_low_sel : OUTPUT; -- Select the high data or the low data
dati_HR_ena : OUTPUT; -- Holding Register Enable Signal
ad_oe : OUTPUT; -- Target AD OE Output
ad_sel : OUTPUT; -- Target AD Output Mux Select
ad_IR_ce_A : OUTPUT; -- AD Input Register Clock Enable Address
ad_IR_ce_D : OUTPUT; -- AD Input Register Clock Enable Data
cben_IR_ce_A : OUTPUT; -- CBEn Input Register Clock Enable Address
cben_IR_ce_D : OUTPUT; -- CBEn Input Register Clock Enable Data
-- Target Control Signal Outputs
targ_oeR : OUTPUT; -- Output Enable Signal for Target Controls
trdy_out : OUTPUT; -- PCI Target Ready Output
devsel_out : OUTPUT; -- PCI Device Select Output
stop_out : OUTPUT; -- PCI Stop Output
ack64_out : OUTPUT; -- PCI Ack64 Output
-- Local Command Register Outputs
io_ena : OUTPUT; -- I/O Space Enable
mem_ena : OUTPUT; -- Memory Space Enable
mstr_ena : OUTPUT; -- Bus Master Enable
mwi_ena : OUTPUT; -- Memory Write and Invalidate Enable
perr_ena : OUTPUT; -- Pariy Error Response Enable
serr_ena : OUTPUT; -- SERR Enable
-- Local Status Register Outputs
cfg_perr_rep : OUTPUT; -- Data Parity Error Signaled
cfg_tabrt_sig : OUTPUT; -- Signaled Target Abort
cfg_tabrt_rcvd : OUTPUT; -- Recieved Target Abort
cfg_mabrt_rcvd : OUTPUT; -- Recieved Master Abort
cfg_serr_sig : OUTPUT; -- Signaled SERR
cfg_perr_det : OUTPUT; -- Detected Parity Error
-- Other Local Configuration Register Outputs
lat_dat[7..0] : OUTPUT; -- Latency Timer Register Data
cache_dat[7..0] : OUTPUT; -- Cache Line Register Data
base_hit[5..0] : OUTPUT; -- Base Address Register Comparison Outputs
-- Local Side Configuration Space Support
lcfg_adr[7..0] : INPUT = GND; -- Local Configuration Address
lcfg_ben[3..0] : INPUT = GND; -- Local Configuration Byte enables
lcfg_dat_in[31..0] : INPUT = GND; -- Local Configuration Data Input Bus
lcfg_adr_vld : INPUT = GND; -- Local Configuration Address Valid
lcfg_dat_vld : INPUT = GND; -- Local Configuration data Valid
lcfg_wr_rdn : INPUT = GND; -- Local Configuration Write/Readn 1= write, 0 = read
lcfg_dat_out[31..0] : OUTPUT; -- Local Configuration Data Output
-- For CE on top level
ADOR_ena : output; -- AD output register enable
ador_hi_dena : output; -- AD high output register disable
lt_sel_w : output; -- Local Target Write Indicator
64_trans_out : output;
adr_phase_out : OUTPUT;
dac_sr_out : OUTPUT;
-- lt_lackn : OUTPUT;
-- lt_hackn : OUTPUT;
)
VARIABLE
-- Target Control Signal Outputs
-- par_oeR : DFFE; -- Output Enable Signal for par
targ_oeR_reg : DFFE; -- Output Enable Signal for Target Controls
-- targ_oeR_reg_lc[5..1] : LCELL;
targ_oeR_reg_lc[4..1] : LCELL;
trdy_OR : node; -- PCI Target Ready Output
trdy_R : NODE; -- PCI Target Ready Output
trdy_R_not : DFFE;
trdy_R_not_lc : NODE;
-- devsel_OR : DFFE; -- PCI Device Select Output
devsel_OR : DFFE; -- PCI Device Select Output
devsel_OR_lc1 : NODE;
devsel_OR_lc2 : NODE;
devsel_OR_lc3 : NODE;
devsel_OR_lc4 : NODE;
devsel_OR_lc5 : NODE;
ack64_OR : DFFE; -- Acknowledge 64 bit transactions
ack64_OR_lc1 : NODE;
ack64_OR_lc2 : NODE;
ack64_OR_lc3 : NODE;
ack64_OR_lc4 : NODE;
ack64_OR_lc5 : NODE;
64_trans_or : NODE;
stop_OR : NODE; -- PCI Stop Output
stop_R : NODE;
stop_or_not : DFFE;
frame_IR : DFFE; -- Active High FRAMEn Input Register
frame_I1R : DFFE; -- Active High FRAMEn Delayed Two Clocks
frame_I2R : DFFE; -- Active High FRAMEn Delayed Two Clocks
dac_sr : pcic_sr;
hi_adr_hr[31..0] : DFFE;
req64_R : DFFE;
irdyrn : DFFE; -- This is a registered version of PCI irdyn signal
idsel_IR : DFFE; -- IDSEL Input Register
perr_vldR : DFFE;
adr_phase_lc1 : LCELL; -- Address Phase Indicator delayed one clock
adr_phase : NODE;--LCELL; -- Address Phase Indicator delayed one clock
cfg : pcic_c; -- Instantiate Configuration Registers
mem_bar_hit : LCELL;--NODE; -- One of Memory BARs has a hit
io_bar_hit : NODE; -- One of I/O bars has a hit
tabrt_set : NODE; -- Status Register Target Abort Signaled Set
tabrt_rcvd_set : NODE; -- Status Register Target Abort Recieved Set
tabrt_sig_cyc : pcic_sr;
-- mabrt_set : NODE; -- Status Register Maser Abort Set
targ_trig : NODE; -- Target Access Triggered
targ_trig_lc1 : NODE;
targ_trig_lc2 : NODE;
junk : node;
ad_ir_ce_A_1 : NODE;
ad_ir_ce_A_2 : NODE;
-- ad_ir_ce_A_3 : NODE;
ad_ir_ce_A_4 : NODE;
ad_ir_ce_D_1 : NODE;
cben_ir_ce_A_1 : NODE;
cben_ir_ce_A_2 : NODE;
-- cben_ir_ce_A_3 : NODE;
cben_ir_ce_A_4 : NODE;
cben_ir_ce_D_1 : NODE;
-- cap_ptr_dat_R[7..0] : DFFE;
IF (OPTIMIZE_TARG == "NO") GENERATE
targ_sm : MACHINE of bits ( targ_smb[6..0]) WITH
STATES( TS_IDLE = B"0000000",
TS_ADR_VLD = B"0000011",
TS_ADR_CLMD = B"0000101",
TS_DXFR = B"0001001",
TS_LRD_WAIT = B"0010001",
TS_DISC = B"0100001",
TS_TURN_AR = B"1000001");
lw_sm : MACHINE OF BITS ( lw_smb[3..0]) WITH
STATES( LW_IDLE = B"0000",
LW_LXFR = B"0011",
LW_WAIT = B"0101",
LW_DONE = B"1001");
lr_sm : MACHINE OF BITS ( lr_smb[6..0]) WITH
STATES( LR_IDLE = B"0000000",
LR_PXFR = B"0000011",
LR_LXFR = B"0000101",
LR_WAIT = B"0001001",
LR_DONE = B"0010001",
LR_PXFR_32 = B"0100001",
LR_WAIT_32 = B"1000001");
-- Target Write Next State Nodes
LW_IDLE_d : NODE;
LW_LXFR_d : NODE;
LW_WAIT_d : NODE;
LW_DONE_d : NODE;
-- Target Read Next State Nodes
LR_IDLE_d : NODE;
LR_PXFR_d : NODE;
LR_LXFR_d : NODE;
LR_WAIT_d : NODE;
LR_DONE_d : NODE;
LR_PXFR_32_d : NODE;
LR_WAIT_32_d : NODE;
ELSE GENERATE
-- Target State Machine
TS_IDLE_not,
TS_ADR_VLD,
TS_ADR_CLMD,
TS_DXFR,
TS_LRD_WAIT,
TS_DISC,
TS_TURN_AR : DFFE;
TS_IDLE,
TS_IDLE_d,
TS_ADR_VLD_d,
TS_ADR_CLMD_d,
TS_DXFR_d,
TS_LRD_WAIT_d,
TS_DISC_d,
TS_TURN_AR_d : NODE;
TS_IDLE_d_lc : NODE;
TS_DXFR_d_lc1 : NODE;
TS_DXFR_d_lc2 : NODE;
TS_DXFR_d_lc3 : NODE;
TS_DXFR_d_lc4 : NODE;
TS_DXFR_d_lc5 : NODE;
-- Target Write State Machine
LW_IDLE_not,
LW_LXFR,
LW_WAIT,
LW_DONE : DFFE;
LW_IDLE,
LW_IDLE_d,
LW_LXFR_d,
LW_WAIT_d,
LW_DONE_d : NODE;
-- Target Read State Machine
LR_IDLE_not,
-- LR_PXFR,
LR_LXFR,
LR_WAIT,
LR_DONE,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -