找回密码
 注册
搜索
查看: 1787|回复: 2

[讨论] 求助,关于用cpld做ARM的IO扩展。

[复制链接]
发表于 2007-4-13 22:45:38 | 显示全部楼层 |阅读模式
我在用CPLD给44B0扩展IO
连接8条数据线、6条地址线、和一个nGCS4线。 另外还有nWe, nOe,nReset, nWait线
想通过EPM7128S来给44b0扩展IO口
仿真里面也看到输出是对的,可是下载到CPLD之后,在ARM里面往对应扩展口写数据,写完的数据在示波器只保持一下就没了
实际上待输出的数据都保存在对应的寄存器里,按道理应该是不会变的
仿真是对的,就是下载到CPLD后, 在ARM往CPLD对应输出口输出数据不成功, 在ADS单步调试,发现对应口有输出,只是输出只是一瞬间。 难道是ARM数据总线上数据保持时间不够? 可是我已经把bankconx 寄存器设置成保持最久的状态,所以我在考虑是不是可以用ARM的nWait信号线延长写周期的时间。。。。
我是在ADS单步执行的,用示波器查看CPLD的输出口,在ADS执行到写1到输出口的语句时,输出口变高,但是执行下一步之后,输出口就变低了。

下面是我的代码。

//该处地址的格式:nGCS4+MCU_addr[5:0]  一共7位
`define JDQaddr 7'b001_0000 //继电器控制地址1
`define U22port1addr 7'b001_0100 //开关量输入口1
`define U22port2addr 7'b001_0101 //开关量输入口2
`define ExtendDatabusaddr1 7'b001_0110 //AD变换接口1
`define ExtendDatabusaddr2 7'b001_0111 //AD变换接口2
`define Ledaddr 7'b001_1000 //发光管地址

//定义总线状态标志
`define no_rw  3'h0
`define JDQ_rw 3'h1         
`define U22port1_rw 3'h2 //开关量输入
`define U22port2_rw 3'h3
`define ExtendDatabus1_rw 3'h4
`define ExtendDatabus2_rw 3'h5
`define Led_rw 3'h6
module IOextend1(nGCS4,MCU_data,MCU_addr,
     exint2,exint3,exint4,
     nWe,nOe,nWait,nReset,
     poweron,
     JDQPORT,// JDQPORT2,
     extenddata_cs1,extenddata_cs2,
     extenddata_oe,extenddata_dir,
     led,
     U22port1,U22port2                  
     );
     
input nGCS4;
reg nGCS4_reg;

input nWe;
input nOe;
input poweron;
output[1:0] nWait;
reg[1:0] nWait_reg;
  
input nReset;
reg nReset_reg;
reg reset_flg; //用于标志刚刚从复位状态回来,以设置输出的初值
input[5:0] MCU_addr;
inout[7:0] MCU_data;
reg[6:0] MCUaddr_reg;
reg[7:0] MCU_data_reg;

reg[3:0] addr_sel; //定义总线状态寄存器
  
output exint2;
output exint3;
output exint4;
reg exint2_reg;
reg exint3_reg;
reg exint4_reg;

output[1:0] led;
reg[1:0] led_reg;

//====================
// 继电器控制
//====================
output[7:0] JDQPORT;
reg [7:0] JDQPORT_reg;

//====================
// AD控制口
//====================
output[1:0] extenddata_cs1;
output[1:0] extenddata_cs2;
output extenddata_oe;
output[2:0] extenddata_dir;
  
reg[1:0] extenddata_cs1_reg;
reg[1:0] extenddata_cs2_reg;
reg extenddata_oe_reg;
reg[2:0] extenddata_dir_reg;

//====================
// U22控制口
//====================
output [7:0] U22port1,U22port2;
reg [7:0] U22port1_reg,U22port2_reg;

//只要nReset电平变化,则设置状态标志,方便是否复位输出口
//只要该引脚为低电平,则给各输出的reg设置初始值
//当该引脚为高电品时,在nWE, nOE那里的 if(nReset_reg==0)不成立,从而不会给各输出的reg设置初始值
always @( nReset)
begin
nReset_reg=nReset;

/*
  JDQPORT_reg=8'hff;
  extenddata_dir_reg=1'b1;   
  led_reg=2'b11;
  U22oe1_reg=1'b1;
  U22oe2_reg=1'b1;
  U22dir1_reg=1'b1;
  U22dir2_reg=1'b1;
  U22port1_reg=8'hff;
  U22port2_reg=8'hff;
  exint2_reg=1'b1; //exint3,exint4,
  exint3_reg=1'b1;
  exint4_reg=1'b1;
  nWait_reg=2'b11; */
end

//在系统地址总线变化的时候,确定是否选中了CPLD所对应的相关接口地址
always @(nGCS4 or MCU_addr)
begin

case({nGCS4,MCU_addr})
`JDQaddr:
  begin
   addr_sel=`JDQ_rw;

  end
`Ledaddr:
  begin
   addr_sel=`Led_rw;
  end
default:
  begin
   addr_sel=`no_rw;
  
  end
endcase

end

always @(  nWe  or  nOe or   nReset )
begin

//如果上电输入口为posedge,并且此时复位口为低电平,则初始化各寄存器

if(!nReset)
begin
  JDQPORT_reg<=8'b1111_1111;
  extenddata_dir_reg<=1'b11;  
  extenddata_oe_reg<=1'b1;
  led_reg<=2'b11;
  exint2_reg<=1'b1; //exint3,exint4,
  exint3_reg<=1'b1;
  exint4_reg<=1'b1;
  nWait_reg<=2'b11;
end

//总线写周期
if(!nWe)
begin
  case(addr_sel)
  `JDQ_rw: //继电器写
   begin
    JDQPORT_reg<=MCU_data;
   
   end
  `Led_rw: //发光管
   begin
    led_reg<=MCU_data[1:0];
   
   end
  default:
   begin
   
   end
  endcase

end

end

assign JDQPORT=JDQPORT_reg;
assign extenddata_oe=1'b1;
assign extenddata_dir=1'b11;   
assign extenddata_cs1=2'b11;
assign extenddata_cs2=2'b11;
// 如果CPLD不需要往数据总线上传数据的时候,
//assign MCU_data=((nOe==1'b0)&& ((addr_sel==`U22port1_rw)||(addr_sel==`U22port2_rw)))? MCU_data_reg:8'hz ;
assign led=led_reg;
assign exint2=1'b1; //exint3,exint4,
assign exint3=1'b1;
assign exint4=1'b1;
assign nWait=2'b11;
assign U22port1=8'b0000_0000;
assign U22port2=8'b1111_1111;
endmodule
发表于 2007-4-23 16:33:13 | 显示全部楼层
不太明白?
点评回复

使用道具 举报

发表于 2007-7-9 21:59:26 | 显示全部楼层
不太明白!!
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-1-24 11:26 , Processed in 0.047567 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表