zoukankan      html  css  js  c++  java
  • xilinx fpga中块ram的使用——简单双端口ram的使用

    在简单双端口ram中最简单有9个端口:分别是

    clka  为输入端口的时钟
    wea  读写控制端,高为写,低为读
    addra 写地址
    dina  待写入的数据
    clkb 为输出端口的时钟的
    addrb 读地址
    doutb 读出的数据

    在ip核中还可以加入ena/enb端口,这两个端口的作用是控制相应写入和读出端口的数据,为高是正常写入或读出,为低时写入为0,读出为0。

    也可以加入复位端口rst,不过复位有两种优先级CE和SR,选择CE时,rst的优先级低于ENA的优先级;选择SR时,rst的优先级高于ENA的优先级。

    还可以选择复位的方式,同步还是异步,一般选择同步。

    端口介绍完后,就开始使用双端口ram,工作方式是:可以写入也可以预先用coe文件存入数据,写入数据后就可以读取数据了 ,这里的读取数据和rom的相同,写入地址是多少,就去读取相应地址的数据。

    双端口ram和单端口的ram不同,单端口的ram读取数据方式是,写入数据的下一个时钟自动输出数据,仅可用于流水线式数据处理。

    这里写了一个简单双端口的ram测试代码

     1 `timescale 1ns / 1ps
     2 `define clk_period 20
     3 ////////////////////////////////////////////////////////////////////////////////
     4 // Company: 
     5 // Engineer:
     6 //
     7 // Create Date:   11:39:21 06/04/2018
     8 // Design Name:   ram
     9 // Module Name:   E:/digital image processing/finial_code/ram_test/testbench/ram_tb.v
    10 // Project Name:  ram_test
    11 // Target Device:  
    12 // Tool versions:  
    13 // Description: 
    14 //
    15 // Verilog Test Fixture created by ISE for module: ram
    16 //
    17 // Dependencies:
    18 // 
    19 // Revision:
    20 // Revision 0.01 - File Created
    21 // Additional Comments:
    22 // 
    23 ////////////////////////////////////////////////////////////////////////////////
    24 
    25 module ram_tb;
    26 
    27     // Inputs
    28     reg clka;
    29     reg ena;
    30     reg [0:0] wea;
    31     reg [3:0] addra;
    32     reg [7:0] dina;
    33     reg clkb;
    34     reg enb;
    35     reg [3:0] addrb;
    36   reg clk;
    37 
    38     // Outputs
    39     wire [7:0] doutb;
    40 
    41     // Instantiate the Unit Under Test (UUT)
    42     ram uut (
    43         .clka(clk), 
    44         .ena(ena),
    45         .wea(wea), 
    46         .addra(addra), 
    47         .dina(dina), 
    48         .clkb(clk), 
    49     .enb(enb),
    50         .addrb(addrb), 
    51         .doutb(doutb)
    52     );
    53     integer i;
    54   initial clk = 1;
    55   always #(`clk_period/2)clk = ~clk;
    56     initial begin
    57         // Initialize Inputs
    58   ena = 1;
    59   enb = 1;
    60     wea = 0;
    61     dina = 0;
    62     addra = 0;
    63     addrb = 0;
    64     #(`clk_period*20 +1 );
    65     for (i=0;i<=15;i=i+1)begin
    66             wea = 1;   
    67             dina = 255 - i;
    68             addra = i;
    69             #`clk_period;
    70         end
    71     wea = 0;
    72     #(`clk_period*20);
    73     /*for (i=0;i<=15;i=i+1)begin     
    74             addrb = i;
    75             #`clk_period;
    76         end    */
    77         addrb = 4;
    78       #`clk_period;
    79       addrb = 2;
    80       #`clk_period;
    81       addrb = 10;
    82       #`clk_period;
    83     
    84         // Wait 100 ns for global reset to finish
    85         #100;
    86         
    87         // Add stimulus here
    88 
    89     end
    90       
    91 endmodule
    testbench

    modelsim的仿真结果为:

     

  • 相关阅读:
    商贸通帐套隐藏方法
    固定资产打开提示:上年度数据未结转!
    ZOJ 2432 Greatest Common Increasing Subsequence
    POJ 1080 Human Gene Functions
    POJ 1088 滑雪
    POJ 1141 Brackets Sequence
    POJ 1050 To the Max
    HDOJ 1029 Ignatius and the Princess IV
    POJ 2247 Humble Numbers
    HDOJ 1181 变形课
  • 原文地址:https://www.cnblogs.com/danielwc/p/9133342.html
Copyright © 2011-2022 走看看