【IC设计】Vivado单口RAM的使用和时序分析

文章目录

创建单口RAM IP

IP Catalog中选择单口RAM IP

Basic

Port A Options

Other Options

仿真

找到IP例化原语

IP Sources-Instantiation Template-veo文件中找到IP例化原语

编写Testbench

创建single_port_ram_test.v,代码如下:

c 复制代码
`timescale 1ns / 1ps

//功能:测试单口ram
//ena means port a clock enable:
//enables read,write and reset operations through port A.Optional in all configurations.
//wea means port a write enbale:
//enables write operations through port a available in all ram configurations.
module single_port_ram_test();
    reg clk;

    //ena使能
    reg ena;
    
    //write enable a port
    //wea为0时处于读取状态,读取有1个周期的时延,wea为1时处于写入状态
    reg wea;
    
    //地址宽度为10,ram中最多存1024个数据
    reg [9:0] addra;

    //输入数据宽度为32,即4个16进制数据
    reg [31:0] dina;

    //输出数据douta
    wire [31:0] douta;

    reg [3:0] count;
    
    reg rst ;
    
    initial begin
        clk=1;
        rst = 0 ;
        count=4'b0;
        wea=0;
        ena=0;
        @ (negedge clk) ena = 1 ;
        #90;
        dina=32'habcd;
        #20;
        dina=32'h000a;
        #20;
        dina=32'h00ba;
        #20;
        dina=32'h0bcd;
        #20;
        dina=32'hxxxx;
        #120;
        $finish;
    end
    always begin
        #10;
        clk=~clk;
    end

    always @ ( posedge clk , posedge rst ) begin
        if (rst)
            count  <= 'b0 ;
        else if ( count < 'd3  && ena )
            count <= count + 'b1 ;
        else
            count <= 0 ;
    end
    
    //初始状态rst=0,所以将addra置为0
    always @ ( posedge clk , posedge rst ) begin
        if ( rst )
            addra <= 'b0 ;
        //每个上升沿addra+1
        else if ( addra < 3  && ena)
            addra <= addra + 1 ;
        else
            addra <= 'b0 ;
    end
    
    always @ ( posedge clk , posedge rst ) begin
        if (rst)
            wea <= 'b0 ; 
        else if (count == 'd3) 
            wea <= ~ wea ; 
        else
            wea <= wea ;
    end
    
    

    //单口ram实例
    blk_mem_gen_1 single_port_ram_inst (
        .clka(clk),    // input wire clka
        .ena(ena),      // input wire ena
        .wea(wea),      // input wire [0 : 0] wea
        .addra(addra),  // input wire [9 : 0] addra
        .dina(dina),    // input wire [31 : 0] dina
        .douta(douta)  // output wire [31 : 0] douta
    );
endmodule

波形分析

相关推荐
hahaha601612 小时前
3NRD降噪算法FPGA实现8并行度设计
fpga开发
松小白song13 小时前
一次“载电流显示为 0“的排查经历:负值钳位引发的踩坑
fpga开发
yingheceping16 小时前
复旦微FPGA开发板厂商TOP5甄选榜:2026选型参考
fpga开发·fpga
NamoAmitabha12819 小时前
PL 端的 GPIO IP(AXI GPIO)---PS控制----deepseek
fpga开发·zynq--ps
hahaha60161 天前
3D降噪算法YUV降噪FPGA实现
fpga开发
Hello-FPGA2 天前
基于RFSOC FPGA ZCU216 的CoaXPress 采集demo
fpga开发
9527华安2 天前
FPGA基于ADV7182解码PAL视频,Video Processing Subsystem去隔行,提供6套工程源码和技术支持
fpga开发·音视频·pal·adv7182
hahaha60162 天前
数字图像时域滤波或者3D降噪算法FPGA实现
算法·计算机视觉·fpga开发
GateWorld2 天前
Xilinx 7系列FPGA时钟网络详解
fpga开发·时钟网络·xilinx 7系列
szxinmai主板定制专家2 天前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x