FPGA中关于RAM的伪双端端口的小实验

`timescale 1ns / 1ps
//顶层


module double_ram(

             input          sysclk,     
             input           rst_n  ,                                          
             output  [7:0]    doutb
    );
             wire wea;
             wire enb;
             wire [5:0] addrb;
             wire [5:0] addra;
             wire[7:0] dina;
   ram_r  ram_r_u(
            .      sysclk ( sysclk)   ,
            .      rst_n  ( rst_n )  ,
            .      enb    ( enb   )  ,
            .      addrb  ( addrb )
             
    ); 
    ram_w  ram_w_u(
            .   sysclk  ( sysclk)   ,  
            .   rst_n   ( rst_n )    ,                            
            .   wea     ( wea   )   ,
            .   enb     ( enb   )   ,
            .   dina    ( dina  )     ,
            .   addra   ( addra )
    );
    
    
    
    
duble_ram your_instance_name (
  .clka(sysclk),    // input wire clka
  .wea(wea),      // input wire [0 : 0] wea
  .addra(addra),  // input wire [5 : 0] addra
  .dina(dina),    // input wire [7 : 0] dina
  .clkb(sysclk),    // input wire clkb
  .enb(enb),      // input wire enb
  .addrb(addrb),  // input wire [5 : 0] addrb
  .doutb(doutb)  // output wire [7 : 0] doutb
);
    
  
endmodule

写模块

`timescale 1ns / 1ps


module ram_w(
             input      sysclk   ,  
             input      rst_n    ,                            
             input [0 : 0] wea      ,
             output         enb    ,
             output  [7 : 0] dina  ,
             output reg   [5:0]  addra
    );
    
   //wea
   assign wea=1;
 //enb
      assign  enb = (addra>=32)?1:0;
   
    //addra
    always@(posedge sysclk)
      if(!rst_n)
        addra<=0;
      else   if(addra==63)
         addra<=0;
         else  
         addra<=addra+1;
     
     //dina
     assign dina ={2'b00, addra};
         
    
    
    
endmodule

读模块

`timescale 1ns / 1ps



module ram_r(
            input           sysclk,
            input           rst_n,
            input           enb,
            output reg  [5:0]  addrb
             
    );
    
    //addrb
    always@(posedge sysclk)
      if(!rst_n)
        addrb<=0;
      else if(enb)begin
      if(addrb==63)
         addrb<=0;
       else
      addrb<=addrb+1;
      end
      else
      addrb<=addrb;
            
    
    
    
    
    
    
    
endmodule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA双端RAM是一种常见的存储器组件,具有两个独立的读写端口,以支持多个并行访问。每个端口都有自己的地址和数据输入/输出。 使用双端RAM可以实现一些特定的应用场景,比如并行计算、数据缓存和通信协议处理等。下面是使用FPGA双端RAM的一般步骤: 1. 首先,在FPGA开发环境创建一个新的项目,并将所需的双端RAM模块添加到设计。这可以通过使用硬件描述语言(如Verilog或VHDL)来完成。 2. 在设计定义每个端口的地址输入、数据输入和数据输出信号。通常情况下,每个端口都有一个地址输入信号(用于选择要访问的存储单元)、一个数据输入信号(用于写入数据)和一个数据输出信号(用于读取数据)。 3. 根据应用需求,为每个端口定义读写操作的时序和控制逻辑。这包括读写使能信号、读写时钟信号和读写操作的控制逻辑。 4. 在FPGA开发环境生成RTL综合文件,并对其进行综合以生成逻辑网表。 5. 将逻辑网表映射到目标FPGA设备,并生成比特流文件。 6. 将比特流文件下载到FPGA设备,并对其进行配置。 7. 在FPGA设备上进行仿真或验证,确保双端RAM在设计的功能和性能都符合预期。 需要注意的是,具体的实现步骤可能会因使用的FPGA开发环境和目标设备而有所不同。因此,在实际应用,建议参考相关的FPGA开发文档和手册,以确保正确地使用双端RAM

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值