真双端口RAM DPRAM 带错误输出

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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值