在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2416|回复: 3

[求助] 自己用RAM写的交织编码

[复制链接]
发表于 2010-5-28 19:53:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
module My_Int(data_in,sink_val,q,source_val,clk,aclr);
input clk,aclr,sink_val;
input  [1:0]   data_in;
output [1:0]   q;
output         source_val;
wire [1:0]  q;
reg         source_val;
reg  [1:0]  data;   
reg       rden,wren;           
reg [5:0] wraddress;
reg [5:0] rdaddress;
reg [5:0] countwr;
reg [1:0] state;
wire   wrclock,rdclock;
parameter STATE1=2'b01;
parameter STATE2=2'b10;
assign wrclock=clk;
assign rdclock=~clk;

always @ (posedge clk or posedge aclr)
if(aclr)
  begin
   data<='d0;
   rden<=0;
   wren<=0;
   source_val<=0;
   wraddress<=6'd0;
   rdaddress<=6'd0;
   countwr<=6'd0;
   state<=STATE1;
  end
else
  begin
           
   case(state)
   STATE1:
    begin
        if((rden==0)&&(sink_val))
        begin
      rden<=0;
      wren<=1;
      wraddress<=countwr;
      data<=data_in;
      countwr<=countwr+6'b00_0001;
      state<=STATE1;
     end
     
     if((wraddress==63)&&(sink_val==0))
      begin
       wraddress<=0;
       wren<=0;
       rdaddress<=6'b00_0000;
       rden<=1;
       source_val<=1;
       state<=STATE2;
      end
    end
   STATE2:
    begin
     if(rdaddress<63)  
     begin
      case (rdaddress)
       56: rdaddress<=1;
       57: rdaddress<=2;
       58: rdaddress<=3;
       59: rdaddress<=4;
       60: rdaddress<=5;
       61: rdaddress<=6;
       62: rdaddress<=7;
      default: rdaddress<=rdaddress + 6'b00_1000;
      endcase      
     state<=STATE2;     
     end
     else
     begin
      rden<=0;
      source_val<=0;
      state<=STATE1;
     end
    end
   endcase
  end
ram64 RAM64(.a(data),.aclr(aclr),.wren(wren),.wraddress(wraddress),
   .rdaddress(rdaddress),.rden(rden),
   .wrclock(wrclock),.rdclock(rdclock),.q(q));

endmodule
     除了第1~8个数据不正确,其他都对。如果是顺序读出:0,1,2,。。。63数据输出正确。可是改变顺序读,前8个数据就不对了从第1个开始读了而不是从0开始。高手给指导一下。
发表于 2010-5-31 17:11:54 | 显示全部楼层
可是改变顺序读,前8个数据就不对了从第1个开始读了而不是从0开始。高手给指导一下
这个指什么?没看懂,
好像你的读写时钟是反相的,这没啥问题,如果读写地址相差几步以上,应该不会发生读写冲突。
发表于 2010-5-31 22:01:14 | 显示全部楼层
交织编码是什么意思?
 楼主| 发表于 2010-6-1 10:11:24 | 显示全部楼层
顺序读出就是rdaddress<=rdaddress + 6'b00_0001;改变顺序读就是按照程序中交织的顺序读rdaddress<=rdaddress + 6'b00_1000; 2# eaglelsb
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-28 05:19 , Processed in 0.017597 second(s), 9 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表