Subversion Repositories ngs

Rev

Rev 99 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. // (c) NedoPC 2013
  2. //
  3. // SD data sender to test SD and MP3 dmas
  4.  
  5. `timescale 1ns/100ps
  6.  
  7. module sd
  8. (
  9.         input  wire clk,
  10.         input  wire sdi,
  11.         output wire sdo
  12. );
  13.  
  14.         reg [7:0] byteout;
  15.         reg [7:0] bytein;
  16.  
  17.         int bitcntout;
  18.         int bitcntin;
  19.  
  20.         int state;
  21.         int count;
  22.  
  23.         reg [7:0] tmp;
  24.  
  25.         localparam _FF   = 'd0;
  26.         localparam _FE   = 'd1;
  27.         localparam _DATA = 'd2;
  28.         localparam _CRC  = 'd3;
  29.  
  30.  
  31.         initial byteout = 8'hFF;
  32.         initial bitcntout = 8;
  33.         initial bitcntin = 7;
  34.         initial state = _FF;
  35.         initial count = 5;
  36.  
  37.  
  38.  
  39.         assign sdo = byteout[7];
  40.  
  41.  
  42.         always @(negedge clk)
  43.         begin
  44.                 byteout <= {byteout[6:0],1'b1};
  45.                 bitcntout = bitcntout - 1;
  46.  
  47.                 if( bitcntout<0 )
  48.                 begin
  49.                         bitcntout = 7;
  50.  
  51.                         case( state )
  52.  
  53.                         _FF:begin
  54.                                 count = count - 1;
  55.                                 if( count <= 0 )
  56.                                         state <= _FE;
  57.                                 byteout <= 8'hFF;
  58.                         end
  59.  
  60.                         _FE:begin
  61.                                 state <= _DATA;
  62.                                 byteout <= 8'hFE;
  63.                                 count = 512;
  64.                         end
  65.  
  66.                         _DATA:begin
  67.                                 count = count - 1;
  68.                                 if( count <= 0 )
  69.                                 begin
  70.                                         state <= _CRC;
  71.                                         count <= 2;
  72.                                 end
  73.                                
  74.                                 tmp = $random>>24;
  75.                                 byteout <= tmp;
  76.                                 tb.sdmp3_chk.push_back(tmp);
  77.                         end
  78.  
  79.                         _CRC:begin
  80.                                 count = count - 1;
  81.                                 if( count <= 0 )
  82.                                 begin
  83.                                         state <= _FF;
  84.                                         count <= 1+($random&63);
  85.                                 end
  86.  
  87.                                 byteout <= $random>>24;
  88.                         end
  89.  
  90.  
  91.                         endcase
  92.                 end
  93.         end
  94.  
  95.        
  96.  
  97.         always @(posedge clk)
  98.         begin
  99.                 bytein = {bytein[6:0], sdi};
  100.  
  101.                 bitcntin = bitcntin - 1;
  102.  
  103.                 if( bitcntin<0 )
  104.                 begin
  105.                         bitcntin = 7;
  106.  
  107.                         if( bytein!==8'hFF )
  108.                         begin
  109.                                 $display("sd: received not FF!");
  110.                                 $stop;
  111.                         end
  112.                 end
  113.         end
  114.  
  115.  
  116. endmodule
  117.  
  118.