usd 发表于 2010-6-26 01:10:35

CPLD读取单片机数据

通过接收51单片机的nWE信号来开始接收地址和数据,可是检验后发现数据没有读到RAM中去,能帮我分析一下么?

module TFT(clk,A,D,nCS3,nWE,nOE,
    VD_L,VD_H,
    VA,VOE,VCE,VWE,UE,LE);
input clk;
input A; //address
input D; //data
input nCS3,nWE,nOE;
inout VD_L; //ram's low data line
inout VD_H; // ram's high data line
outputVA;//ram's address line
output VOE,VCE,VWE,UE,LE; //ram's control signal
reg VA;
reg ADDR;
reg VOE,VCE,VWE,UE,LE;
reg VD_L;
reg VD_H;
//定义四个寄存器变量!
reg CMD;
reg Y;
reg DAT;
   //二个X值得高低寄存器.
reg D_XL;
reg D_XH;
reg D_LH;//用于判断X的高低八位
//用于标志功能的位!
reg i;
reg cyc_cnt;
//////////////////单片机的写操作///////////////////////
always@(posedge nWE)
begin
if(A==2'b10)
begin
CMD=D;//根据不同的CMD值来看是显示,清平还是八点写!
i=0;
end
//////////这一部分用于输入的X,Y,Data值///////////////////
else if(A==2'b00)//X时分为高低八位,要分别处理!
begin
D_LH=D_LH+1;
if(D_LH==1)
D_XL=D;
else//D_LH=2;
begin
D_XH=D;
D_LH=0;
i=0;//用于多点连写的标志
end
end
else if(A==2'b01)//Y只有八位
begin
Y=D;
i=0;//用于多点连写的标志
end
else //(A==11)
begin
//基本显示功能下的形成原始地址
DAT=D;
if(Y<117)
begin
ADDR=Y*234+D_XH*256+D_XL;
end
else
ADDR=(Y-117)*234+D_XH*256+D_XL;
i=i+1;
end
end//first begin
/////////////////存储操作//////////////////////////////////
always@(posedge clk)
begin
VCE=0;
LE=0;
UE=0;
if(cyc_cnt==2)
begin
VWE=1;
VA=ADDR+i;
if(Y<117)
VD_L=DAT;
else
VD_H=DAT;
end
if(cyc_cnt==4)
begin
VWE=0;
cyc_cnt=0;
end
cyc_cnt=cyc_cnt+1;
end
endmodule

ICE 发表于 2010-6-26 02:38:02

LCD模组内部是个状态机,标志是CMD寄存器的值<br>
你先用modlesim模拟下,才好找问题啊,先不写RAM,先看状态机的运转正常不

usb 发表于 2010-6-26 04:07:25

另外你的乘法用移位来做,用的资源会更少

AAT 发表于 2010-6-26 05:45:09

能说具体点么/

Sunlife 发表于 2015-6-17 10:50:25


LCD模组内部是个状态机,标志是CMD寄存器的值<br>
你先用modlesim模拟下,才好找问题啊,先不写RAM,先看状态机的运转正常不
页: [1]
查看完整版本: CPLD读取单片机数据