atahost_top.vhd
来自「ATA接口的IP核,经过量产的验证,已经在quartus5.1下编译通过了.」· VHDL 代码 · 共 590 行 · 第 1/2 页
VHD
590 行
PIO_cmdport_T1,
PIO_cmdport_T2,
PIO_cmdport_T4,
PIO_cmdport_Teoc : in unsigned(7 downto 0);
PIO_cmdport_IORDYen : in std_logic; -- PIO compatible timing settings
PIO_dport0_T1,
PIO_dport0_T2,
PIO_dport0_T4,
PIO_dport0_Teoc : in unsigned(7 downto 0);
PIO_dport0_IORDYen : in std_logic; -- PIO data-port device0 timing settings
PIO_dport1_T1,
PIO_dport1_T2,
PIO_dport1_T4,
PIO_dport1_Teoc : in unsigned(7 downto 0);
PIO_dport1_IORDYen : in std_logic; -- PIO data-port device1 timing settings
PIOsel : in std_logic; -- PIO controller select
PIOack : out std_logic; -- PIO controller acknowledge
PIOq : out std_logic_vector(15 downto 0); -- PIO data out
PIOtip : buffer std_logic; -- PIO transfer in progress
PIOpp_full : out std_logic; -- PIO Write PingPong full
-- DMA registers
DMA_dev0_Td,
DMA_dev0_Tm,
DMA_dev0_Teoc : in unsigned(7 downto 0); -- DMA timing settings for device0
DMA_dev1_Td,
DMA_dev1_Tm,
DMA_dev1_Teoc : in unsigned(7 downto 0); -- DMA timing settings for device1
DMActrl_DMAen,
DMActrl_dir,
DMActrl_BeLeC0,
DMActrl_BeLeC1 : in std_logic; -- DMA settings
DMAsel : in std_logic; -- DMA controller select
DMAack : out std_logic; -- DMA controller acknowledge
DMAq : out std_logic_vector(31 downto 0); -- DMA data out
DMAtip : buffer std_logic; -- DMA transfer in progress
DMA_dmarq : out std_logic; -- Synchronized ATA DMARQ line
DMATxFull : buffer std_logic; -- DMA transmit buffer full
DMARxEmpty : buffer std_logic; -- DMA receive buffer empty
DMA_req : out std_logic; -- DMA request to external DMA engine
DMA_ack : in std_logic; -- DMA acknowledge from external DMA engine
-- ATA signals
RESETn : out std_logic;
DDi : in std_logic_vector(15 downto 0);
DDo : out std_logic_vector(15 downto 0);
DDoe : out std_logic;
DA : out unsigned(2 downto 0);
CS0n : out std_logic;
CS1n : out std_logic;
DMARQ : in std_logic;
DMACKn : out std_logic;
DIORn : out std_logic;
DIOWn : out std_logic;
IORDY : in std_logic;
INTRQ : in std_logic
);
end component atahost_controller;
-- asynchronous reset signal
signal arst_signal : std_logic;
-- primary address decoder
signal PIOsel, DMAsel : std_logic; -- controller select, IDE devices select
-- registers
-- IDE control register
signal IDEctrl_IDEen, IDEctrl_rst, IDEctrl_ppen, IDEctrl_FATR0, IDEctrl_FATR1 : std_logic;
-- PIO compatible timing settings
signal PIO_cmdport_T1, PIO_cmdport_T2, PIO_cmdport_T4, PIO_cmdport_Teoc : unsigned(7 downto 0);
signal PIO_cmdport_IORDYen : std_logic;
-- PIO data register device0 timing settings
signal PIO_dport0_T1, PIO_dport0_T2, PIO_dport0_T4, PIO_dport0_Teoc : unsigned(7 downto 0);
signal PIO_dport0_IORDYen : std_logic;
-- PIO data register device1 timing settings
signal PIO_dport1_T1, PIO_dport1_T2, PIO_dport1_T4, PIO_dport1_Teoc : unsigned(7 downto 0);
signal PIO_dport1_IORDYen : std_logic;
-- DMA control register
signal DMActrl_DMAen, DMActrl_dir, DMActrl_BeLeC0, DMActrl_BeLeC1 : std_logic;
-- DMA data port device0 timing settings
signal DMA_dev0_Td, DMA_dev0_Tm, DMA_dev0_Teoc : unsigned(7 downto 0);
-- DMA data port device1 timing settings
signal DMA_dev1_Td, DMA_dev1_Tm, DMA_dev1_Teoc : unsigned(7 downto 0);
signal PIOack, DMAack, PIOtip, DMAtip : std_logic;
signal PIOq : std_logic_vector(15 downto 0);
signal PIOpp_full : std_logic;
signal DMAq : std_logic_vector(31 downto 0);
signal DMA_dmarq : std_logic; -- synchronized version of DMARQ
signal DMATxFull, DMARxEmpty : std_logic;
signal irq : std_logic; -- ATA bus IRQ signal
begin
-- generate asynchronous reset level
arst_signal <= arst_i xor ARST_LVL;
--
-- hookup wishbone slave
--
u0: atahost_wb_slave
generic map(
DeviceID => DeviceID,
RevisionNo => RevisionNo,
-- PIO mode 0 settings
PIO_mode0_T1 => PIO_mode0_T1,
PIO_mode0_T2 => PIO_mode0_T2,
PIO_mode0_T4 => PIO_mode0_T4,
PIO_mode0_Teoc => PIO_mode0_Teoc,
-- Multiword DMA mode 0 settings
-- OCIDEC-1 does not support DMA, set registers to zero
DMA_mode0_Tm => 0,
DMA_mode0_Td => 0,
DMA_mode0_Teoc => 0
)
port map(
-- WISHBONE SYSCON signals
clk_i => wb_clk_i,
arst_i => arst_signal,
rst_i => wb_rst_i,
-- WISHBONE SLAVE signals
cyc_i => wb_cyc_i,
stb_i => wb_stb_i,
ack_o => wb_ack_o,
rty_o => wb_rty_o,
err_o => wb_err_o,
adr_i => wb_adr_i,
dat_i => wb_dat_i,
dat_o => wb_dat_o,
sel_i => wb_sel_i,
we_i => wb_we_i,
inta_o => wb_inta_o,
-- PIO control inputs
PIOsel => PIOsel,
PIOtip => PIOtip,
PIOack => PIOack,
PIOq => PIOq,
PIOpp_full => PIOpp_full,
irq => irq,
-- DMA control inputs
DMAsel => DMAsel,
DMAtip => DMAtip,
DMAack => DMAack,
DMARxEmpty => DMARxEmpty,
DMATxFull => DMATxFull,
DMA_dmarq => DMA_dmarq,
DMAq => DMAq,
-- outputs
-- control register outputs
IDEctrl_rst => IDEctrl_rst,
IDEctrl_IDEen => IDEctrl_IDEen,
IDEctrl_FATR0 => IDEctrl_FATR0,
IDEctrl_FATR1 => IDEctrl_FATR1,
IDEctrl_ppen => IDEctrl_ppen,
DMActrl_DMAen => DMActrl_DMAen,
DMActrl_dir => DMActrl_dir,
DMActrl_BeLeC0 => DMActrl_BeLeC0,
DMActrl_BeLeC1 => DMActrl_BeLeC1,
-- CMD port timing registers
PIO_cmdport_T1 => PIO_cmdport_T1,
PIO_cmdport_T2 => PIO_cmdport_T2,
PIO_cmdport_T4 => PIO_cmdport_T4,
PIO_cmdport_Teoc => PIO_cmdport_Teoc,
PIO_cmdport_IORDYen => PIO_cmdport_IORDYen,
-- data-port0 timing registers
PIO_dport0_T1 => PIO_dport0_T1,
PIO_dport0_T2 => PIO_dport0_T2,
PIO_dport0_T4 => PIO_dport0_T4,
PIO_dport0_Teoc => PIO_dport0_Teoc,
PIO_dport0_IORDYen => PIO_dport0_IORDYen,
-- data-port1 timing registers
PIO_dport1_T1 => PIO_dport1_T1,
PIO_dport1_T2 => PIO_dport1_T2,
PIO_dport1_T4 => PIO_dport1_T4,
PIO_dport1_Teoc => PIO_dport1_Teoc,
PIO_dport1_IORDYen => PIO_dport1_IORDYen,
-- DMA device0 timing registers
DMA_dev0_Tm => DMA_dev0_Tm,
DMA_dev0_Td => DMA_dev0_Td,
DMA_dev0_Teoc => DMA_dev0_Teoc,
-- DMA device1 timing registers
DMA_dev1_Tm => DMA_dev1_Tm,
DMA_dev1_Td => DMA_dev1_Td,
DMA_dev1_Teoc => DMA_dev1_Teoc
);
--
-- hookup controller section
--
u1: atahost_controller
generic map(
TWIDTH => TWIDTH,
PIO_mode0_T1 => PIO_mode0_T1,
PIO_mode0_T2 => PIO_mode0_T2,
PIO_mode0_T4 => PIO_mode0_T4,
PIO_mode0_Teoc => PIO_mode0_Teoc,
DMA_mode0_Tm => DMA_mode0_Tm,
DMA_mode0_Td => DMA_mode0_Td,
DMA_mode0_Teoc => DMA_mode0_Teoc
)
port map(
clk => wb_clk_i,
nReset => arst_signal,
rst => wb_rst_i,
irq => irq,
IDEctrl_IDEen => IDEctrl_IDEen,
IDEctrl_rst => IDEctrl_rst,
IDEctrl_ppen => IDEctrl_ppen,
IDEctrl_FATR0 => IDEctrl_FATR0,
IDEctrl_FATR1 => IDEctrl_FATR1,
a => wb_adr_i(5 downto 2),
d => wb_dat_i,
we => wb_we_i,
PIO_cmdport_T1 => PIO_cmdport_T1,
PIO_cmdport_T2 => PIO_cmdport_T2,
PIO_cmdport_T4 => PIO_cmdport_T4,
PIO_cmdport_Teoc => PIO_cmdport_Teoc,
PIO_cmdport_IORDYen => PIO_cmdport_IORDYen,
PIO_dport0_T1 => PIO_dport0_T1,
PIO_dport0_T2 => PIO_dport0_T2,
PIO_dport0_T4 => PIO_dport0_T4,
PIO_dport0_Teoc => PIO_dport0_Teoc,
PIO_dport0_IORDYen => PIO_dport0_IORDYen,
PIO_dport1_T1 => PIO_dport1_T1,
PIO_dport1_T2 => PIO_dport1_T2,
PIO_dport1_T4 => PIO_dport1_T4,
PIO_dport1_Teoc => PIO_dport1_Teoc,
PIO_dport1_IORDYen => PIO_dport1_IORDYen,
PIOsel => PIOsel,
PIOack => PIOack,
PIOq => PIOq,
PIOtip => PIOtip,
PIOpp_full => PIOpp_full,
DMActrl_DMAen => DMActrl_DMAen,
DMActrl_dir => DMActrl_dir,
DMActrl_BeLeC0 => DMActrl_BeLeC0,
DMActrl_BeLeC1 => DMActrl_BeLeC1,
DMA_dev0_Td => DMA_dev0_Td,
DMA_dev0_Tm => DMA_dev0_Tm,
DMA_dev0_Teoc => DMA_dev0_Teoc,
DMA_dev1_Td => DMA_dev1_Td,
DMA_dev1_Tm => DMA_dev1_Tm,
DMA_dev1_Teoc => DMA_dev1_Teoc,
DMAsel => DMAsel,
DMAack => DMAack,
DMAq => DMAq,
DMAtip => DMAtip,
DMA_dmarq => DMA_dmarq,
DMATxFull => DMATxFull,
DMARxEmpty => DMARxEmpty,
DMA_req => DMA_req,
DMA_ack => DMA_ack,
RESETn => resetn_pad_o,
DDi => dd_pad_i,
DDo => dd_pad_o,
DDoe => dd_padoe_o,
DA => da_pad_o,
CS0n => cs0n_pad_o,
CS1n => cs1n_pad_o,
DIORn => diorn_pad_o,
DIOWn => diown_pad_o,
IORDY => iordy_pad_i,
INTRQ => intrq_pad_i,
DMARQ => dmarq_pad_i,
DMACKn => dmackn_pad_o
);
end architecture structural;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?