SDRAM 不帶自動預充電讀操作

                                                               

  1. //不帶自動預充電讀操作
  2. //tRCD = 20ns
  3. //tRP = 20ns
  4. //tRAS(max) = 12_0000ns, tRAS(min) = 44ns
  5. //tRC(min) = 66ns
  6. //clk=50M, 週期 = 20ns 
  7. //預充電   {CS_N,RAS_N,CAS_N,WE_N} = 4'b0010
  8. //空命令   {CS_N,RAS_N,CAS_N,WE_N} = 4'b0111
  9. //讀命令   {CS_N,RAS_N,CAS_N,WE_N} = 4'b0101
  10. //激活命令 {CS_N,RAS_N,CAS_N,WE_N} = 4'b0011
  11. //BL = 4
  12.  
  13. module sdr_r(
  14.       clk,
  15.       rst,
  16.       r_en,
  17.       r_done,
  18.       r_SDR_CLK,
  19.       r_CKE,
  20.       r_CS_N,
  21.       r_RAS_N,
  22.       r_CAS_N,
  23.       r_WE_N,
  24.       r_BA,
  25.       r_SA,
  26.       r_DQM,
  27.       r_DQ
  28. ); 
  29.  
  30. input  clk,rst;
  31. input  r_en;
  32.  
  33. inout  [15:0] r_DQ;
  34.  
  35. output r_done;
  36. output r_SDR_CLK;
  37. output r_CKE;
  38. output r_CS_N;
  39. output r_RAS_N;
  40. output r_CAS_N;
  41. output r_WE_N;
  42. output [1:0] r_BA;
  43. output [12:0] r_SA;
  44. output [1:0] r_DQM;
  45.  
  46. reg [3:0] r_cnt;
  47. reg r_done;
  48. reg r_CKE;
  49. reg r_CS_N;
  50. reg r_RAS_N;
  51. reg r_CAS_N;
  52. reg r_WE_N;
  53. reg [12:0] r_SA;
  54. reg [1:0] r_DQM;
  55. reg [1:0] r_BA;
  56.  
  57. parameter row  = 13'b0_0000_0000_0001;    //行地址
  58. parameter col  = 9'b0_0000_0001;                 //列地址
  59. parameter bank = 2'b00;                                 //bank地址
  60.  
  61. //============================================
  62. // 序列機
  63. //============================================
  64.  
  65. always@(posedge clk or negedge rst)   
  66. begin
  67.     if(!rst)
  68.     begin
  69.         r_CS_N   <= 1'b0;
  70.         r_RAS_N <= 1'b1;
  71.         r_CAS_N <= 1'b1;
  72.         r_WE_N  <= 1'b1
  73.         r_CKE     <= 1'b0;
  74.         r_done    <= 1'b0;  
  75.     end
  76.     else
  77.     begin
  78.     case(r_cnt)
  79.     1:begin                           //Active
  80.             r_CS_N   <= 1'b0;
  81.             r_RAS_N <= 1'b0;
  82.             r_CAS_N <= 1'b1;
  83.             r_WE_N   <= 1'b1
  84.             r_CKE      <= 1'b1;
  85.             r_done     <= 1'b0;        
  86.             r_SA        <= row;
  87.             r_BA        <= bank;       
  88.        end
  89.     2:begin                             //Read
  90.             r_CS_N    <= 1'b0;
  91.             r_RAS_N  <= 1'b1;
  92.             r_CAS_N  <= 1'b0;
  93.             r_WE_N    <= 1'b1
  94.             r_CKE       <= 1'b1;
  95.             r_done      <= 1'b0;       
  96.             r_DQM      <= 1'b0;  
  97.             r_SA          <= col;
  98.             r_SA[10]    <= 1'b0;
  99.             r_BA          <= bank;        
  100.        end
  101.     3:begin                            //Nop
  102.             r_CS_N   <= 1'b0;
  103.             r_RAS_N <= 1'b1;
  104.             r_CAS_N <= 1'b1;
  105.             r_WE_N   <= 1'b1
  106.             r_DQM     <= 1'b0;
  107.             r_CKE      <= 1'b1;
  108.        end
  109.     4:begin                               //Nop
  110.             r_CS_N    <= 1'b0;
  111.             r_RAS_N <= 1'b1;
  112.             r_CAS_N <= 1'b1;
  113.             r_WE_N   <= 1'b1;
  114.             r_DQM     <= 1'b0;
  115.             r_CKE      <= 1'b1;
  116.        end
  117.     5:begin                                //Nop
  118.             r_CS_N   <= 1'b0;
  119.             r_RAS_N <= 1'b1;
  120.             r_CAS_N <= 1'b1;
  121.             r_WE_N   <= 1'b1;
  122.             r_DQM     <= 1'b0;
  123.             r_CKE      <= 1'b1;
  124.        end
  125.     6:begin                                 //Precharge
  126.             r_CS_N    <= 1'b0;
  127.             r_RAS_N  <= 1'b0;
  128.             r_CAS_N  <= 1'b1;
  129.             r_WE_N    <= 1'b0
  130.             r_CKE       <= 1'b1;
  131.             r_done      <= 1'b0;         
  132.             r_SA[10]   <= 1'b1;
  133.             r_BA         <= bank;
  134.          end
  135.     10:begin                                 //結束給Nop命令
  136.               r_CS_N    <= 1'b0;
  137.               r_RAS_N <= 1'b1;
  138.               r_CAS_N <= 1'b1;
  139.               r_WE_N   <= 1'b1
  140.               r_CKE      <= 1'b0;
  141.               r_done     <= 1'b1;        
  142.          end
  143.     11:begin                                    //結束給Nop命令
  144.               r_CS_N    <= 1'b0;
  145.               r_RAS_N <= 1'b1;
  146.               r_CAS_N <= 1'b1;
  147.               r_WE_N   <= 1'b1
  148.               r_CKE      <= 1'b0;
  149.               r_done     <= 1'b1;         
  150.           end
  151.     default:begin                              //其他給Nop命令
  152.                      r_CS_N   <= 1'b0;
  153.                      r_RAS_N <= 1'b1;
  154.                      r_CAS_N <= 1'b1;
  155.                      r_WE_N   <= 1'b1
  156.                      r_CKE      <= 1'b1;
  157.                      r_done     <= 1'b0;
  158.                 end
  159.     endcase 
  160.     end
  161. end
  162.  
  163. //============================================
  164. // 計數器
  165. //============================================
  166.  
  167. always@(posedge clk or negedge rst)   
  168. begin
  169.     if(!rst)                                  r_cnt <= 4'd0;
  170.     else if(r_en & (!r_done))
  171.     begin
  172.         if(r_cnt == 4'd11)             r_cnt <= 4'd0;
  173.         else                                  r_cnt <= r_cnt + 4'd1;
  174.     end 
  175.     else                                      r_cnt <= r_cnt;
  176.       
  177. end
  178.  
  179. //============================================
  180. // SDR_CLK
  181. //============================================
  182.  
  183. assign r_SDR_CLK = ~clk;  //相位相差180度
  184.  
  185. //============================================
  186. endmodule
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值