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

📄 isp1581.tdf

📁 这是一款USB接口ISP1582器件实现DMA传输的辅助电路的硬件设计源代码
💻 TDF
字号:
--FUNCTION 74244 (1gn, 1a[1..4], 2gn, 2a[1..4])
--RETURNS (1y[1..4], 2y[1..4]);
--FUNCTION counter16 (clock,clk_en,cnt_en,aclr,aload,aset,data[15..0])
--RETURNS (q[15..0]);
FUNCTION counter8 (clock,clk_en,cnt_en,cin,aclr,aload,data[7..0])
RETURNS (q[7..0],cout);

FUNCTION tri8 (data[7..0],enabledt)
RETURNS (tridata[7..0]);


SUBDESIGN isp1581	
(	
	
	clk								:INPUT;
    ---------------------------------
	d[7..0]							:INPUT;
	rdn,wrn,ale,aa[15..8]			:INPUT;
	cpld_csn						:INPUT;
    ----------------------------------
	int1n							:OUTPUT;
	data[7..0]						:BIDIR;
	--test[7..0]						:OUTPUT;
	a[16..0],m_rdn,m_wrn,m_csn		:OUTPUT;
	--------------------------------
	dreq							:INPUT;
	diow,dior,dack					:OUTPUT;

	eot								:OUTPUT;
	iordy							:INPUT;
	--------------------------------
	ext_wrn,ext_rdn,ext_csn		:OUTPUT;
	res[2..0]					:INPUT;
----------------------------------------
	ispd[7..0]				:BIDIR;
	
)
VARIABLE
addr[2..0] :dffe;
--dma_cnt[15..0] :dffe;
--dma_addr[15..0]:dffe;
ctl_reg[1..0] :dffe;
diowtff :tffe;
--ncs_regc_dmactl,ncs_regc_cntlow,ncs_regc_cnthigh,ncs_regc_addrlow,ncs_regc_addrhigh :node;
ncs_regc_dmactl,ncs_regc_addrlow,ncs_regc_addrhigh :node;

--databuf :74244;

address_cnt_low,address_cnt_high :counter8;
BEGIN

--d[7..0]='zzzzzzzz';
ncs_regc_dmactl=addr[2] or addr[1] or !addr[0] or cpld_csn;
--ncs_regc_cntlow=addr[2] or !addr[1] or addr[0] or cpld_csn;
--ncs_regc_cnthigh=addr[2] or !addr[1] or !addr[0] or cpld_csn;
ncs_regc_addrlow=!addr[2] or addr[1] or addr[0] or cpld_csn or wrn;
ncs_regc_addrhigh=!addr[2] or addr[1] or !addr[0] or cpld_csn or wrn;
-----------------------
addr[2..0].d=d[2..0];
addr[2..0].clk=!ale;
addr[2..0].clrn=!cpld_csn;
addr[2..0].prn=vcc;
addr[2..0].ena=!cpld_csn;

address_cnt_low.clock=!diowtff.q;
address_cnt_low.clk_en=ctl_reg[0];
address_cnt_low.cnt_en=vcc;
address_cnt_low.aclr=gnd;--!ctl_reg[0];
address_cnt_low.data[7..0]=d[7..0];
address_cnt_low.aload=!ncs_regc_addrlow;
address_cnt_low.cin=vcc;

address_cnt_high.clock=!diowtff.q;
address_cnt_high.clk_en=ctl_reg[0];
address_cnt_high.cnt_en=vcc;
address_cnt_high.aclr=gnd;
address_cnt_high.data[7..0]=d[7..0];
address_cnt_high.aload=!ncs_regc_addrhigh;
address_cnt_high.cin=address_cnt_low.cout;

a[16]=gnd;
a[15..8]=address_cnt_high.q[7..0];
a[7..0]=address_cnt_low.q[7..0];
--a[0]=vcc;
-----------------------------
--  |-|-|-|-|-|-|dir|trig|
ctl_reg[1..0].d=d[1..0];
ctl_reg[1..0].clk=wrn;
ctl_reg[1..0].clrn=vcc;
ctl_reg[1..0].prn=vcc;
ctl_reg[1..0].ena=!ncs_regc_dmactl;

-----------------------
--data[7..0]="ZZZZZZZZ";
int1n=vcc;
--a[16..0]=B"11111111111111111";
--a[15..0]=;
m_rdn=!diowtff.q or !ctl_reg[1];
m_wrn=!diowtff.q or ctl_reg[1];
m_csn=!dreq or !ctl_reg[0];
--m_rdn=!ctl_reg[1];
--m_wrn=ctl_reg[1];
--m_csn=!diowtff.q or !ctl_reg[0];--!dreq or !ctl_reg[0];

------------------------
diowtff.t=vcc;
diowtff.clrn=ctl_reg[0] and dreq;
diowtff.prn=vcc;
diowtff.ena=dreq and ctl_reg[0];
diowtff.clk=global(clk);

diow=!diowtff.q or !ctl_reg[1];
dior=!diowtff.q or ctl_reg[1];
dack=!dreq or !ctl_reg[0]; 

--if dreq and ctl_reg[0] and ctl_reg[1] then 		--Write
	--dack=gnd;
	--data[7..0]=B"01111000";
	--dior=vcc;
	--diow=diowtff.q;

--elsif dreq and ctl_reg[0] and !ctl_reg[1] then  --Read
	--dack=gnd;
	--data[7..0]=B"01111000";
	--diow=vcc;
	--dior=vcc;	
	
--else
	--dack=vcc;
	--data[7..0]=B"01111000";
	--diow=vcc;
	--dior=vcc;
--end if;

--databuf.1gn=!dreq or !diowtff.q or !ctl_reg[1];
--databuf.1a[1..4]=B"1111";
--databuf.2gn=!dreq or !diowtff.q or !ctl_reg[1];
--databuf.2a[1..4]=B"1101";

--data[3..0]=databuf.1y[1..4];
--data[7..4]=databuf.2y[1..4];

eot=gnd;
--dack=vcc;
------------------------
data[7..0]=tri8(ispd[7..0],!ctl_reg[1] and dreq);
ispd[7..0]=tri8(data[7..0],ctl_reg[1] and dreq);
--test[7..0]=tri8(ispd[7..0],!ctl_reg[1] and dreq);
ext_wrn=vcc;
ext_rdn=vcc;
ext_csn=vcc;

END;

⌨️ 快捷键说明

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