zoukankan      html  css  js  c++  java
  • AHB总线接口RAM

     1 //##################################################################################################
     2 //  Project     : AMBA AHB RAM
     3 //  Author      : Lyu Yang
     4 //  Date        : 2020-05-10
     5 //  Description : AHB RAM
     6 //##################################################################################################
     7 module ahb_ram (
     8     input   wire                hclk        ,
     9     input   wire                hreset_n    ,
    10     input   wire                hsel        ,
    11     input   wire    [1:0]       htrans      ,
    12     input   wire                hwrite      ,
    13     input   wire    [2:0]       hsize       ,
    14     input   wire    [31:0]      haddr       ,
    15     input   wire    [31:0]      hwdata      ,
    16     input   wire                hready_in   ,
    17     output  reg     [31:0]      hrdata      ,
    18     output                      hready_out  ,
    19     output  wire    [1:0]       hresp
    20 );
    21 
    22 localparam      MEM_SIZE = 4096;
    23 
    24 integer         k;
    25 wire            hbus_ena;
    26 reg             hbus_ena_d;
    27 reg     [3:0]   mem_wstrb;
    28 reg     [31:0]  mem_addr;
    29 reg     [31:0]  mem[MEM_SIZE-1:0];
    30 
    31 // Memory Init
    32 initial $readmemh("app_test.txt", mem);
    33 
    34 // AHB response always OKAY
    35 assign hresp = 2'h0;
    36 assign hready_out = 1'b1;
    37 assign hbus_ena = hsel & hready_in & htrans[1];
    38 
    39 always @(posedge hclk, negedge hreset_n)
    40     if(~hreset_n)
    41         hbus_ena_d <= 1'b0;
    42     else
    43         hbus_ena_d <= hbus_ena;
    44 
    45 always @(posedge hclk, negedge hreset_n)
    46     if(~hreset_n)
    47         mem_addr <= 32'd0;
    48     else if(hbus_ena)
    49         mem_addr <= haddr;
    50 
    51 always @(posedge hclk, negedge hreset_n)
    52     if(~hreset_n)
    53         mem_wstrb <= 4'h0;
    54     else if(hbus_ena & hwrite) begin
    55         case(hsize)
    56             3'b000: begin
    57                 case(haddr[1:0])
    58                     2'b00: mem_wstrb <= 4'b0001;
    59                     2'b01: mem_wstrb <= 4'b0010;
    60                     2'b10: mem_wstrb <= 4'b0100;
    61                     2'b11: mem_wstrb <= 4'b1000;
    62                 endcase
    63             end
    64             3'b001: begin
    65                 case(haddr[0])
    66                     1'b0: mem_wstrb <= 4'b0011;
    67                     1'b1: mem_wstrb <= 4'b1100;
    68                 endcase
    69             end
    70             3'b010: begin
    71                 mem_wstrb <= 4'b1111;
    72             end
    73             default: begin
    74                 mem_wstrb <= 4'b0000;
    75             end
    76         endcase
    77     end
    78     else begin
    79         mem_wstrb <= 4'b0000;
    80     end
    81 
    82 always @(posedge hclk)
    83     for(k=0; k<4; k=k+1)
    84         if(mem_wstrb[k] && hbus_ena_d)
    85             mem[mem_addr[31:2]][k*8+:8] <= hwdata[k*8+:8];
    86 
    87 always @(posedge hclk)
    88     if(hbus_ena)
    89         hrdata <= mem[haddr[31:2]];
    90 
    91 endmodule
  • 相关阅读:
    AJAX问题总结(针对JAVA)
    关于IE浏览器的缓存问题
    tomcat和jdk版本兼容问题。
    Java中的索引和数据库的索引区别
    Eclipse 连接Oracle 11g 时报ORA-12505错误的解决办法
    Tomcat 8 & JNDI Datasource
    【LeetCode】019. Remove Nth Node From End of List
    【前端UI框架】EasyUI
    装饰者模式
    【LeetCode】234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/lyuyangly/p/4852710.html
Copyright © 2011-2022 走看看