|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
module ds12cr887_opt(
clk, rst, gpcs6, gpcs6_o, rd, wr, addr, data,
GPMEMRD_o,GPMEMWR_o,GPALE_o
);
//------------input-------------------------------------
input clk; // 时钟信号
input rst; // 复位信号
//input cs; // 片选信号
input rd; // 读信号
input wr; // 写信号
input [14:1] addr; // 地址线
input gpcs6;
//------------output-------------------------------------
output gpcs6_o;
output GPMEMRD_o; // 读信号
output GPMEMWR_o; // 写信号
output GPALE_o; // ale信号
//------------bidirection--------------------------------
inout [15:0]data; //
//-----------insinside use def------------
reg GPMEMRD_o; // 读信号
reg GPMEMWR_o; // 写信号
reg GPALE_o; // ale信号
reg gpcs6_o; // cs
//=====================================
parameter
Addr_DS_ADDR = 'h7a0, // option set reg
Addr_DS_RD = 'h7b0, // input data
Addr_DS_WR = 'h7c0, // crc result reg
Addr_DS_RST = 'h7d0;
reg addr_mark;
always @(rst or gpcs6 or addr[14:1] or wr or rd)// or AS_CNT_H or AS_CNT_L or RW_CNT or DS_CNT)
begin
if(!rst)
begin
gpcs6_o <= 1'b1; //CS
GPMEMRD_o <= 1'b1; //DS //RD
GPMEMWR_o <= 1'b1; //RW //WR
GPALE_o <= 1'b1; //AS
addr_mark <= 1'b1;
end
else
begin
if((addr == Addr_DS_ADDR) && (!gpcs6) )
begin
if(addr_mark)
begin
gpcs6_o <= 1'b0; //CS
if((!wr))
begin
gpcs6_o <= 1'b0; //CS
GPMEMRD_o <= 1'b1; //DS //RD
GPMEMWR_o <= 1'b1; //RW //WR
GPALE_o <= 1'b0; //AS
addr_mark <= 1'b0;
end else
begin
gpcs6_o <= 1'b1; //CS
GPMEMRD_o <= 1'b1; //DS //RD
GPMEMWR_o <= 1'b1; //RW //WR
GPALE_o <= 1'b1; //AS
addr_mark <= 1'b1;
end
end
//
//as_mark_H <= 1;
end
else
if((addr == Addr_DS_RD) && (!gpcs6) && (!rd))
begin
GPMEMRD_o <= 1'b0; //DS //RD
GPMEMWR_o <= 1'b1;
end
else
if((addr == Addr_DS_WR) && (!gpcs6) && (!wr))
begin
GPMEMWR_o <= 1'b0; //RW //WR
GPMEMRD_o <= 1'b1;
end
else
if((addr == Addr_DS_RST) && (!gpcs6))
begin
gpcs6_o <= 1'b1; //CS
GPMEMRD_o <= 1'b1; //DS //RD
GPMEMWR_o <= 1'b1; //RW //WR
GPALE_o <= 1'b1; //AS
addr_mark <= 1'b1;
end
end
end
endmodule |
|