【iCore1S 双核心板_FPGA】例程十二:基于单口RAM的ARM+FPGA数据存取实验

实验现象:

核心代码:

module single_port_ram(
                                    input CLK_12M,
                                    input WR,
                                    input RD,
                                    input CS0,
                                    inout [15:0]DB,
                                    input [24:16]A,
                                    output FPGA_LEDR,
                                    output FPGA_LEDG,
                                    output FPGA_LEDB
                                );
//----------------------------pll-------------------------------//
    /*实例化MY_PLL模块,输出48M时钟*/
    my_pll    u1(
                    .inclk0(CLK_12M),
                    .c0(PLL_48M)
                    );

//---------------------------rst_n----------------------------//                            
    /*复位信号,10个周期后rst_n置1*/    
    reg [3:0]cnt_rst=4'd0;
    reg rst_n;
    
    always@(posedge CLK_12M)
        begin
            if(cnt_rst==4'd10)
                begin
                    rst_n <= 1'd1;
                    cnt_rst <= 4'd10;
                end
            else     cnt_rst <= cnt_rst + 1'd1;
        end
        
//-------------------------fsmc-----------------------------//
    wire rd =(CS0|RD);//    提取读信号
    wire wr =(CS0|WR);//    提取写信号
    reg wr_clk1,wr_clk2;
    
    always@(posedge PLL_48M or negedge rst_n)
        begin
            if(!rst_n)
                begin
                    wr_clk1 <= 1'd1;
                    wr_clk2 <= 1'd1;
                end 
            else {wr_clk2,wr_clk1} <= {wr_clk1,wr};
        end 
    
    wire clk = (!wr_clk2|!rd);  //将读写信号转化为时钟信号
    assign DB = !rd?DB_OUT :16'hzzzz;
    
//---------------------------ram-------------------------------//
    /*实例化ram块*/
    wire [15:0]DB_OUT;
    
    my_ram u2(
                    .address(A),
                    .clock(clk),
                    .data(DB),
                    .wren(!wr),
                    .rden(!rd),
                    .q(DB_OUT)
                );
                
//--------------------------led----------------------------//    

    assign FPGA_LEDR = 1'd1;
    assign FPGA_LEDG = 1'd0;
    assign FPGA_LEDB = 1'd1;
    
//-----------------------endmodule-------------------------//
endmodule     

实验方法及指导书:

链接:http://pan.baidu.com/s/1jIBXsSu 密码:38q7

posted @ 2017-09-13 08:45  XiaomaGee  阅读(440)  评论(0编辑  收藏  举报