首页 > 其他 > 详细

单端口异步读写

时间:2020-05-08 13:13:00      阅读:53      评论:0      收藏:0      [点我收藏+]

摘要:

代码实现:

技术分享图片
module sp_ram_asy#(parameter DATA_WIDTH=8,ADDRESS_WIDTH=8,RAM_DEEPTH=1<<ADDRESS_WIDTH)(
                cs,
                we,
                address,
                oe,    
                data
                );
    input cs;
    input we;
    input [ADDRESS_WIDTH-1:0]address;
    input oe;
    inout [DATA_WIDTH-1:0]data;
    reg [DATA_WIDTH-1:0]mem[RAM_DEEPTH-1:0];
    reg [DATA_WIDTH-1:0]data_out;
    //synopsys translate_off
    integer i;
    initial begin
        for(i=0;i<RAM_DEEPTH;i=i+1)begin
            mem[i]=8h00;
        end
    end
    //synopsys translate_on
    //write
    always@(cs or we or address)
    begin:MEM_WRITE
        if(cs&&we)
            mem[address]=data;
    end
    //read
    always@(cs or we or oe or address)
    begin:MEM_READ
        if(cs&&!we&&oe)
            data_out=mem[address];
    end
    //tri control
    assign data=(cs && (!we) && oe)?data_out:8bz;
endmodule 
View Code

tb:

技术分享图片
`timescale 1ns/1ns
module sp_ram_asy_tb();
    reg cs;
    reg we;
    reg [7:0]address;
    reg oe;
    wire [7:0]data;
    reg [7:0]data_in;
    integer i;
    assign data=(cs&&we&&!oe)?data_in:8bz;
    sp_ram_asy#(.DATA_WIDTH(8),.ADDRESS_WIDTH(8))sp_ram_asy(
                .cs(cs),
                .we(we),
                .address(address),
                .oe(oe),
                .data(data)
                );
    initial begin
        cs=1b0;
        we=1b0;
        oe=1b0;
        data_in=8d0;
        address=8d0;
        #20;
        //读初值
        begin
            cs=1b1;
            we=1b0;
            oe=1b1;
        end
        #4;
        for(i=0;i<256;i=i+1)begin
            #4 begin
            address=i;
            end
        end
        #1200;
        //
        begin
            cs=1b1;
            we=1b1;
            oe=1b0;
        end
        #4;
        for(i=0;i<256;i=i+1)begin
            #4 begin
            data_in=data_in+1;
            address=i;
            end
        end    
        #1200;
        //
        begin
            cs=1b1;
            we=1b0;
            oe=1b1;
        end
        #4;
        for(i=0;i<256;i=i+1)begin
            #4 begin
                address=i;
            end
        end
        #1200;
        
            cs=1b0;
        #100;
        $stop;
    end
endmodule
View Code

波形:

技术分享图片

 

单端口异步读写

原文:https://www.cnblogs.com/ajiaoa/p/12849544.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!