简单的双端口ram

简单的双端口ram,两地址线,两数据线,一条读写信号。在写时能读(写地址和读地址不一样)

模块文件:

`timescale 1ns / 1ps

module doub_ram(
    //input clk,
    input r_w,//1为读,0为写
    input [2:0] addr_r,
    input [2:0] addr_w,
    input [15:0] data_i,
    output [15:0] data_o
    );
    
reg [15:0] ram [7:0];//例化8*16的ram
assign data_o=ram[addr_r];//读数据

always @(r_w or addr_w)//写数据
    if(~r_w)
        ram[addr_w]<=data_i;
        
endmodule
 

激励文件:

`timescale 1ns / 1ps


module test_ram();
    reg r_w;
    reg [2:0] addr_r,addr_w;
    reg [15:0] data_i;
    wire [15:0] data_o;
    
    doub_ram test_rom1(
    .r_w(r_w),
    .addr_r(addr_r),
    .addr_w(addr_w),
    .data_i(data_i),
    .data_o(data_o)
    );
    
    //assign data1=data;
    
    initial 
    begin//先写数据,将ram空间赋值
    r_w=0;
    addr_w=3'b000;
    data_i=16'b0000_0000_0000_0111;
   
    #20
    r_w=0;
    addr_w=3'b001;
    data_i=16'b0000_0000_0000_0110;
    
    #20;
    r_w=0;
    addr_w=3'b010;
    data_i=16'b0000_0000_0000_0101;
   
    #20
    r_w=0;
    addr_w=3'b011;
    data_i=16'b0000_0000_0000_0100;
   
    #20;
    r_w=0;
    addr_w=3'b100;
    data_i=16'b0000_0000_0000_0011;
   
    #20
    r_w=0;
    addr_w=3'b101;
    data_i=16'b0000_0000_0000_0010;
  
    #20;
    r_w=0;
    addr_w=3'b110;
    data_i=16'b0000_0000_0000_0001;
  
    #20
    r_w=0;
    addr_w=3'b111;
    data_i=16'b0000_0000_0110_0000;
数据写完/// 

//读数据 
    #200;
    r_w=1;
    addr_r=3'b110;
    #10;
    addr_r=3'b100;
    #10; 
    
//写数据,同时读数据,读写地址可以不一样
    #20
    r_w=0;
    addr_w=3'b111;//写111地址
    data_i=16'b0000_0000_0110_0000;
    addr_r=3'b101;//同时读101地址
    #20;
    addr_w=3'b101;//写101地址
    data_i=16'b0000_0110_0110_0000;
    addr_r=3'b111;//同时读111数据
    #20;
    addr_w=3'b001;//写001地址
    data_i=16'b0000_0110_0110_0000;
    addr_r=3'b001;//同时读001数据

    end
endmodule
 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值