微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 自己用RAM写的交织编码

自己用RAM写的交织编码

时间:10-02 整理:3721RD 点击:
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开始。高手给指导一下。

可是改变顺序读,前8个数据就不对了从第1个开始读了而不是从0开始。高手给指导一下
这个指什么?没看懂,
好像你的读写时钟是反相的,这没啥问题,如果读写地址相差几步以上,应该不会发生读写冲突。

交织编码是什么意思?

顺序读出就是rdaddress<=rdaddress + 6'b00_0001;改变顺序读就是按照程序中交织的顺序读rdaddress<=rdaddress + 6'b00_1000; 2# eaglelsb

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top