module DPRAM
(
SYSCLK,
ADD1,
ADD2,
DATW1,
DATW2,
DATR1,
DATR2,
WEN1,
WEN2,
REN1,
REN2,
ERR
);
input SYSCLK;
input[7:0] ADD1;
input[7:0] ADD2;
input[7:0] DATW1;
input[7:0] DATW2;
output[7:0]DATR1;
output[7:0]DATR2;
input WEN1;
input WEN2;
input REN1;
input REN2;
output ERR;
wire SYSCLK;
wire[7:0] ADD1;
wire[7:0] ADD2;
wire[7:0] DATW1;
wire[7:0] DATW2;
reg[7:0] DATR1;
reg[7:0] DATR2;
wire WEN1;
wire WEN2;
wire REN1;
wire REN2;
wire ERR;
reg[7:0]MEM1[255:0];
reg[7:0]MEM2[255:0];
reg[7:0]MEM1_ADD;
reg[7:0]MEM2_ADD;
reg MEM1_WEN;
reg MEM2_WEN;
reg MEM1_REN;
reg MEM2_REN;
reg[7:0]MEM1_WDAT;
reg[7:0]MEM2_WDAT;
always@(*)
begin
if((ADD1[0]==0)&&(WEN1))
MEM1_WEN=1'B1;
else if((ADD2[0]==0)&&(WEN2))
MEM1_WEN=1'B1;
else
MEM1_WEN=0;
end
always@(*)
begin
if((ADD1[0]==1'B1)&&(WEN1))
MEM2_WEN=1'B1;
else if((ADD2[0]==1'B1)&&(WEN2))
MEM2_WEN=1'B1;
else
MEM2_WEN=0;
end
always@(*)
begin
if((ADD1[0]==0)&&(REN1))
MEM1_REN=1'B1;
else if((ADD2[0]==0)&&(REN2))
MEM1_REN=1'B1;
else
MEM1_REN=0;
end
always@(*)
begin
if((ADD1[0]==1'B1)&&(REN1))
MEM2_REN=1'B1;
else if((ADD2[0]==1'B1)&&(REN2))
MEM2_REN=1'B1;
else
MEM2_REN=0;
end
always@(*)
begin
if(ADD1[0]==0)
MEM1_ADD=ADD1;
else if(ADD2[0]==0)
MEM1_ADD=ADD2;
else
MEM1_ADD=0;
end
always@(*)
begin
if(ADD1[0]==1'b1)
MEM2_ADD=ADD1;
else if(ADD2[0]==1'b1)
MEM2_ADD=ADD2;
else
MEM2_ADD='h1;
end
always@(*)
begin
if(ADD1[0]==0)
MEM1_WDAT=DATW1;
else if(ADD2[0]==0)
MEM1_WDAT=DATW2;
else
MEM1_WDAT=0;
end
always@(*)
begin
if(ADD1[0]==1'b1)
MEM2_WDAT=DATW1;
else if(ADD2[0]==1'b1)
MEM2_WDAT=DATW2;
else
MEM2_WDAT=0;
end
always@(*)
begin
if((ADD1[0]==0)&&(MEM1_REN))
DATR1=MEM1[MEM1_ADD];
else if((ADD1[0]==1'B1)&&(MEM1_REN))
DATR1=MEM2[MEM2_ADD];
else
DATR1=8'BZZZZ_ZZZZ;
end
always@(*)
begin
if((ADD2[0]==0)&&(MEM2_REN))
DATR2=MEM1[MEM1_ADD];
else if((ADD2[0]==1'B1)&&(MEM2_REN))
DATR2=MEM2[MEM2_ADD];
else
DATR2=8'BZZZZ_ZZZZ;
end
always@(posedge SYSCLK)
begin
if(MEM1_WEN)
MEM1[MEM1_ADD]<=MEM1_WDAT;
end
always@(posedge SYSCLK)
begin
if(MEM2_WEN)
MEM2[MEM2_ADD]<=MEM2_WDAT;
end
assign ERR=((ADD1[0]==ADD2[0])&&(((WEN1==1'B1)&&(WEN2==1'B1))||((REN1==1'B1)&&(REN2==1'B1))))?1'B1:1'B0;
endmodule