Professional Documents
Culture Documents
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity raj is
Port (
clk
: in std_logic;
-- clock
rstn
: in std_logic;
-- reset
start
: in std_logic;
dati
adr
reg_wen
: in std_logic;
fifo_wen
: in std_logic;
wr_rdn
: in std_logic;
cs
: in std_logic;
bcr_cnten
: in std_logic;
acr_cnten
: in std_logic;
lar_cnten
enable
: in std_logic;
p2s_fifo_empty
: in std_logic;
s2p_fifo_usedw
mstr_busy
: in std_logic;
stop
: in std_logic;
abort
: in std_logic;
last_xfr
: in std_logic;
local_busy
err_pend
abort
lm_tsr
isr_rd
: in std_logic;
-- sdram is busy
: in std_logic;
isr
csr
bcr
acr
lar
req
transfer
: out std_logic;
local_start
: out std_logic;
to start data transfer
dato
output
probe
);
end raj;
signal normal_termination
: std_logic;
signal start_chain
: std_logic;
signal chain_end
: std_logic;
signal dma_bcr
signal dma_csr
signal dma_done
: std_logic;
signal dma_error
: std_logic;
signal chain_acr_ld
: std_logic;
signal chain_bcr_ld
: std_logic;
signal dma_fifo_rd
: std_logic;
signal trans64
signal isr_in
: std_logic;
: std_logic_vector(5 downto 0);
signal dma_on
: std_logic;
signal dma_acr
signal dma_isr
signal dma_lar
signal dma_fifo_dato
signal soft_flush
signal dma_reg_dati
signal reg_dat_sel
signal direction
: std_logic;
signal acr_wr
: std_logic;
signal csr_wr
: std_logic;
signal csr_wr_reg
signal int_irq
signal local_irq
signal rst
signal req_int
signal high
signal dma_reg_hit
: std_logic;
: std_logic;
: std_logic;
: std_logic;
: std_logic;
: std_logic;
: std_logic_vector(4 downto 0);
rst
direction
<= dma_csr(3);
-- assert local irq when there is error pending or DMA has completed
local_irq
isr_in(1)
<= err_pend;
isr_in(2)
<= int_irq;
end if;
end process;
process(clk,rstn)
-- register csr_wr
begin
if(rstn='0') then
csr_wr_reg <= '0';
elsif(clk'event and clk = '1') then
-- start chain
dma_on <= (dma_isr(4) and dma_csr(4) and not err_pend) or (isr_in(5) and
dma_csr(4) and not err_pend);
port map(
clk
=>
clk,
rstn
=>
rstn,
normal_termination
=>
normal_termination,
stop
=>
stop,
lm_tsr
=>
lm_tsr,
err_pend
start
=>
=>
err_pend,
start ,
start_chain
=>
start_chain,
chain_end
=>
chain_end,
p2s_fifo_empty
=>
p2s_fifo_empty,
s2p_fifo_usedw
=>
s2p_fifo_usedw,
direction
=>
direction,
dma_bcr
=>
dma_bcr,
local_busy
=>
local_busy,
req
=>
dma_done
req_int,
=>
dma_done,
dma_error
=>
dma_error,
chain_acr_ld
=>
chain_acr_ld,
chain_bcr_ld
=>
chain_bcr_ld,
dma_fifo_rd
=>
dma_fifo_rd,
local_start
chain_dma_loading
=>
local_start,
=>
reg_dat_sel
dma_reg0 : dma_reg
port map(
clk
=>
clk
rstn
=>
rstn
adr
=>
adr
=>
dma_reg_dati
dati
and dma_fifo_dato
wen
=>
reg_wen ,
acr_ld
=>
chain_acr_ld
bcr_ld
=>
chain_bcr_ld
acr_cnten
=>
acr_cnten,
lar_cnten
=>
lar_cnten,
bcr_cnten
=>
bcr_cnten,
isr_in
=>
dma_on
isr_in ,
=>
dma_on ,
cs
=>
cs,
acr
=>
dma_acr ,
bcr
=>
dma_bcr ,
csr
=>
dma_csr ,
isr
=>
dma_isr ,
lar
=>
dma_lar ,
dato
dma_reg_hit
);
=>
dato,
=>
dma_reg_hit
elsif(req_int='1') then
normal_termination <= '0';
end if;
end if;
end process;
-- assign outputs
end;
end behavioural;