FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

VivadoでIPを生成する方法の調査(VivadoのIPインテグレーションの仕組み調査3. RAMの実装)

f:id:msyksphinz:20170723195744p:plain

AXIインタフェースに対して、RAMを実装していく。

github.com

  • blockram_test_v1_0_S00_AXI.v
  // Add user logic here
  reg [C_S_AXI_DATA_WIDTH-1:0]               mem_ram[1024-1: 0];
  wire                                       mem_wren, mem_rdenn;
  assign mem_wren = axi_wready && S_AXI_WVALID ;
  assign mem_rden = axi_arv_arr_flag ; //& ~axi_rvalid
  always @ (posedge S_AXI_ACLK) begin
    mem_ram [axi_awaddr[11: 2]] <= S_AXI_WDATA[31: 0];
  end

  always @ (posedge S_AXI_ACLK) begin
    if (!S_AXI_RESETN) begin
      axi_rdata <= 32'h0;

      axi_rvalid <= 0;
      axi_rresp  <= 0;
    end else begin
      if (axi_arv_arr_flag && ~axi_rvalid) begin
        axi_rvalid <= 1'b1;
        axi_rresp  <= 2'b0;
        // 'OKAY' response

        axi_rdata <= mem_ram [axi_araddr[11: 2]];
      end else if (axi_rvalid && S_AXI_RREADY) begin
        axi_rvalid <= 1'b0;
      end
    end // else: !if(!S_AXI_RESETN)
  end // always @ (posedge S_AXI_ACLK)

   // User logic ends

まあ簡単な実装なので、すぐにできると思うのだが、少し改造するとビルドスクリプトが動かなくなってしまった。。。調査中。。。

github.com