`timescale 1ns/1ns
module IO_KZ(Data,P27,WR,RD,ALE,CLR,OUTKEY,OUT30,CS,CS1,LEDCS,OC);
inout [7:0]Data;
input WR;
input P27;
input RD;
input ALE;
input CLR;
input OC;
input [4:0]OUTKEY;
output [59:0]OUT30;
output [1:0]CS;
output CS1;
output [14:0]LEDCS;
reg [14:0]LEDCS;
reg [59:0]OUT30;
reg [1:0]CS;
wire CS1;
//wire [7:0]Data;
reg [8:0]IOADD;
reg [15:0]DataBF;
reg wr_en;
reg [7:0]OUTKEYBF;
//wire [7:0]OUTKEYBF1;
assign CS1=((IOADD==338)&&(OC==0))?1'b0:1'b1;//8052
assign Data=((IOADD==277)&&(OC==0)&&(RD==0))?OUTKEYBF:8'bzzzzzzz;//8015
always @(OUTKEY)
begin
if(OUTKEY[0]==0)
OUTKEYBF<=1;
else if(OUTKEY[1]==0)
OUTKEYBF<=2;
else if(OUTKEY[2]==0)
OUTKEYBF<=3;
else if(OUTKEY[3]==0)
OUTKEYBF<=4;
else if(OUTKEY[4]==0)
OUTKEYBF<=5;
else
OUTKEYBF<=0;
end
always @(negedge ALE)
begin
IOADD<={P27,Data};//ALE下降延读地址
end
always @(IOADD or WR) //WR下降延写数据
begin
if((IOADD>256)&&(IOADD<337)&&(IOADD!=277))wr_en<=WR;
else
begin
wr_en<=1;
end
end
always @(negedge wr_en or posedge OC or posedge WR) //WR下降延写数据
begin
if(OC)
begin
CS=2'b00;
LEDCS=15'b00000_0000_0000_00;
end
else if(WR)
begin
CS=2'b00;
end
else
begin
case(IOADD)
261: begin CS=2'b01; end//8005
262: begin CS=2'b10;LEDCS=15'b00000_0000_0000_01;end//8006
263: begin CS=2'b10;LEDCS=15'b00000_0000_0000_10;end//8007
264: begin CS=2'b10;LEDCS=15'b00000_0000_0001_00;end//8008
265: begin CS=2'b10;LEDCS=15'b00000_0000_0010_00;end//8009
266: begin CS=2'b10;LEDCS=15'b00000_0000_0100_00;end//800A
267: begin CS=2'b10;LEDCS=15'b00000_0000_1000_00;end//800B
268: begin CS=2'b10;LEDCS=15'b00000_0001_0000_00;end//800C
269: begin CS=2'b10;LEDCS=15'b00000_0010_0000_00;end//800D
270: begin CS=2'b10;LEDCS=15'b00000_0100_0000_00;end//800E
271: begin CS=2'b10;LEDCS=15'b00000_1000_0000_00;end//800F
272: begin CS=2'b10;LEDCS=15'b00001_0000_0000_00;end//8010
273: begin CS=2'b10;LEDCS=15'b00010_0000_0000_00;end//8011
274: begin CS=2'b10;LEDCS=15'b00100_0000_0000_00;end//8012
275: begin CS=2'b10;LEDCS=15'b01000_0000_0000_00;end//8013
276: begin CS=2'b10;LEDCS=15'b10000_0000_0000_00;end//8014
endcase
end
end
always @(negedge wr_en or posedge CLR or posedge OC ) //WR下降延写数据
begin
if(OC)
begin
DataBF=0;
OUT30[59:0]=60'hfffffffffffffff;
end
else if(CLR)
begin
DataBF=0;
OUT30[59:0]=60'hfffffffffffffff;
end
else
begin
if(Data[0])
DataBF[1:0]=2'b10;
else
DataBF[1:0]=2'b01;
if(Data[1])
DataBF[3:2]=2'b10;
else
DataBF[3:2]=2'b01;
if(Data[2])
DataBF[5:4]=2'b10;
else
DataBF[5:4]=2'b01;
if(Data[3])
DataBF[7:6]=2'b10;
else
DataBF[7:6]=2'b01;
if(Data[4])
DataBF[9:8]=2'b10;
else
DataBF[9:8]=2'b01;
if(Data[5])
DataBF[11:10]=2'b10;
else
DataBF[11:10]=2'b01;
if(Data[6])
DataBF[13:12]=2'b10;
else
DataBF[13:12]=2'b01;
if(Data[7])
DataBF[15:14]=2'b10;
else
DataBF[15:14]=2'b01;
case(IOADD)
257: begin OUT30[15:0] =DataBF;end//8001
258: begin OUT30[31:16]=DataBF;end//8002
259: begin OUT30[47:32]=DataBF;end//8003
260: begin OUT30[59:48]=DataBF;end//8004
endcase
case(IOADD)
278: begin OUT30[1:0]=2'b10;end//8016
279: begin OUT30[1:0]=2'b01;end//8017
280: begin OUT30[3:2]=2'b10;end//8018
281: begin OUT30[3:2]=2'b01;end//8019
282: begin OUT30[5:4]=2'b10;end//801A
283: begin OUT30[5:4]=2'b01;end//801B
284: begin OUT30[7:6]=2'b10;end//801C
285: begin OUT30[7:6]=2'b01;end//801D
286: begin OUT30[9:8]=2'b10;end//801E
287: begin OUT30[9:8]=2'b01;end//802F
endcase
case(IOADD)
288: begin OUT30[11:10]=2'b10;end//8020
289: begin OUT30[11:10]=2'b01;end//8021
290: begin OUT30[13:12]=2'b10;end//8022
291: begin OUT30[13:12]=2'b01;end//8023
292: begin OUT30[15:14]=2'b10;end//8024
293: begin OUT30[15:14]=2'b01;end//8025
294: begin OUT30[17:16]=2'b10;end//8026
295: begin OUT30[17:16]=2'b01;end//8027
296: begin OUT30[19:18]=2'b10;end//8028
297: begin OUT30[19:18]=2'b01;end//8029
endcase
case(IOADD)
298: begin OUT30[21:20]=2'b10;end//802A
299: begin OUT30[21:20]=2'b01;end//802B
300: begin OUT30[23:22]=2'b10;end//802C
301: begin OUT30[23:22]=2'b01;end//802D
302: begin OUT30[25:24]=2'b10;end//802E
303: begin OUT30[25:24]=2'b01;end//802F
304: begin OUT30[27:26]=2'b10;end//8030
305: begin OUT30[27:26]=2'b01;end//8031
306: begin OUT30[29:28]=2'b10;end//8032
307: begin OUT30[29:28]=2'b01;end//8033
endcase
case(IOADD)
308: begin OUT30[31:30]=2'b10;end//8034
309: begin OUT30[31:30]=2'b01;end//8035
310: begin OUT30[33:32]=2'b10;end//8036
311: begin OUT30[33:32]=2'b01;end//8037
312: begin OUT30[35:34]=2'b10;end//8038
313: begin OUT30[35:34]=2'b01;end//8039
314: begin OUT30[37:36]=2'b10;end//803A
315: begin OUT30[37:36]=2'b01;end//803B
316: begin OUT30[39:38]=2'b10;end//803C
317: begin OUT30[39:38]=2'b01;end//803D
endcase
case(IOADD)
318: begin OUT30[41:40]=2'b10;end//803E
319: begin OUT30[41:40]=2'b01;end//803F
320: begin OUT30[43:42]=2'b10;end//8040
321: begin OUT30[43:42]=2'b01;end//8041
322: begin OUT30[45:44]=2'b10;end//8042
323: begin OUT30[45:44]=2'b01;end//8043
324: begin OUT30[47:46]=2'b10;end//8044
325: begin OUT30[47:46]=2'b01;end//8045
326: begin OUT30[49:48]=2'b10;end//8046
327: begin OUT30[49:48]=2'b01;end//8047
endcase
case(IOADD)
328: begin OUT30[51:50]=2'b10;end//8048
329: begin OUT30[51:50]=2'b01;end//8049
330: begin OUT30[53:52]=2'b10;end//804A
331: begin OUT30[53:52]=2'b01;end//804B
332: begin OUT30[55:54]=2'b10;end//804C
333: begin OUT30[55:54]=2'b01;end//804D
334: begin OUT30[57:56]=2'b10;end//804E
335: begin OUT30[57:56]=2'b01;end//804F
336: begin OUT30[59:58]=2'b10;end//8050
337: begin OUT30[59:58]=2'b01;end//8051
endcase
end
end
endmodule
CPLD与51单片机总线接口程序
- 单片机(619333)
- cpld(168088)
相关推荐
纯单片机和纯CPLD设计的优缺点分析
大量单片机/CPLD的外围芯片和接口电路使得单片机应用系统的设计变得简单而且快捷,新型单片机的上市和高级语言的支持(如C51)进一步延长了单片机的寿命。
2018-10-17 08:43:00
13675


51单片机烧写程序的方法
STC89C51是应用广泛的51单片机,很多人都是通过该单片机入门学习的,单片机的学习需要勤动手。单片机需要烧写程序,要用到相关的软件和硬件。下面介绍一下51单片机烧写程序的方法。 1所用到的硬件
2023-09-11 10:10:00
3026


8031单片机和外围接口电路
8031单片机和外围接口电路由于MCS-51单片机的P0口是分时复用的地址/数据总线,因此在进行程序存储器扩展时,必须利用地址锁存器将信号从地址/数据总线中分离开来。
2009-03-14 17:15:49
8051单片机应用实例
芯片82C51简介 552.4.2 单片机串行接口扩展模块电路设计 582.4.3 单片机串行接口扩展模块程序设计 602.5 实例4——关于RS-422A串行通信接口 62第3章 USB总线接口
2008-06-19 10:26:40
51单片机程序下载、ISP及串口基础知识
接口。一方面USB接口负责给单片机供电,另一方面,USB转TTL或RS232转TTL已经集成的学习板上。51单片机程序的烧写我们最常见的51单片机是美国Atmel公司生产的AT系列单片机和中国宏晶公司
2013-12-19 14:28:04
51单片机与LCD1602接口电路与程序分享
51单片机与LCD1602接口电路与程序一、工作方式:间接工作方式。二、实现功能:显示“Hope the epidemic will pass soon”。三、仿真电路图:四、程序源码
2021-11-19 06:56:46
51单片机与arm
的外设资源,还有就是较大的数据和 程序存储空间。相比之下,51单片机就没有优势了吗?当然不是,51单片机的优势在于小巧的内核,成熟的技术(其实现在ARM的技术也很成熟),还有就是 位操作。在相当多
2012-10-15 09:38:37
评论