zoukankan      html  css  js  c++  java
  • quartus之ram的IP测试

    quartus之ram的IP测试

    1、基本原理

    ram,读取存储器,用于储存数据。基本的原理就是使用时钟驱动时序,利用地址区分位置,使用使能控制写入。输出的结果以写入的位宽输出。

    2、实际操作

    顶层代码:

    module ram(
        input clk,
        input rst_n,
        output [7:0] q
    );
    reg [7:0] address;
    reg [7:0] data;
    
    always@(posedge clk)begin
        if(!rst_n)begin
            address<=8'd0;
            data<=8'd0;
        end
        else if(address<8'd100)begin
            address<=address+1'b1;
            data<=address;
        end
    end
    
    ram_ip U1(
        .address(address),
        .clock(clk),
        .data(data),
        .wren(rst_n),
        .q(q)
    );
    
    endmodule

    ram_ip是quartus中直接调用IP得到的文件,IP的所有设置均为默认。

    测试文件:

    `timescale 1ns/1ns
    module ram_tb;
    
    reg clk;
    reg rst_n;
    wire [7:0] q;
    
    initial begin
        clk<=1'b0;
        rst_n<=1'b0;
    end
    
    always #10 clk<=~clk;
    
    initial begin
        $monitor($time,,"q=%h",q);
        #20
        rst_n<=1'b1;
        #10000
        $stop;
    end
    
    ram U1_tb(
        .clk(clk),
        .rst_n(rst_n),
        .q(q)
    );
    
    endmodule

    这个是测试的激励文件,采用变量监测的方式得到想要的结果。

                        0 q=0030 q=xx
                       50 q=0090 q=01110 q=02130 q=03150 q=04170 q=05190 q=06210 q=07230 q=08250 q=09
    270 q=0a 290 q=0b 310 q=0c 330 q=0d 350 q=0e 370 q=0f 390 q=10410 q=11430 q=12450 q=13470 q=14
    490 q=15510 q=16530 q=17550 q=18570 q=19590 q=1a 610 q=1b 630 q=1c 650 q=1d 670 q=1e 690 q=1f 710 q=20730 q=21750 q=22770 q=23790 q=24810 q=25830 q=26850 q=27870 q=28890 q=29910 q=2a 930 q=2b 950 q=2c 970 q=2d 990 q=2e 1010 q=2f 1030 q=301050 q=311070 q=321090 q=331110 q=341130 q=351150 q=361170 q=371190 q=381210 q=391230 q=3a 1250 q=3b 1270 q=3c 1290 q=3d 1310 q=3e 1330 q=3f 1350 q=401370 q=411390 q=421410 q=431430 q=441450 q=451470 q=461490 q=471510 q=481530 q=491550 q=4a 1570 q=4b 1590 q=4c 1610 q=4d 1630 q=4e 1650 q=4f 1670 q=501690 q=511710 q=521730 q=531750 q=541770 q=551790 q=561810 q=571830 q=581850 q=591870 q=5a 1890 q=5b 1910 q=5c 1930 q=5d 1950 q=5e 1970 q=5f 1990 q=602010 q=612030 q=622050 q=63** Note: $stop : D:/Library/FPGA_altera/A3_ram/ram_tb.v(20) Time: 10020 ns Iteration: 0 Instance: /ram_tb

    数据比较多,通过存储器的视图查看:

    从前面的30ns时q的值为xx的情况可以看出,在一个完整的时钟周期内,如果wren发生了变化,读取的数据也将不确定。这也是异步时序的缺点,容易出现未知情况。如果使能信号为同步时序,则可以有效避免。

    3、最后小结

    ram还是使用的比较多的IP,一般的设计中需要处理大量的数据时,一般会采用ram来完成。与之相似的还有ROM,其值是直接配置好后读取的,无法写入,具体的操作和RAM类似。ROM数据的配置文件可以了解一下。

  • 相关阅读:
    栈和堆的详细介绍
    在DataTable中执行DataTable.Select("条件")返回DataTable;
    委托和事件
    面试宝典
    sql的寫法,推薦的寫法,全文索引提高類似like查詢的效率
    Google地图
    一般处理程序中,获取session
    提交表单
    手脱tElock 0.98b1 -> tE!
    手脱FSG 2.0 -> bart/xt
  • 原文地址:https://www.cnblogs.com/electricdream/p/13384003.html
Copyright © 2011-2022 走看看