当前位置:   article > 正文

RAM读写实验(用Altera RAM IP核生成一个单端口的RAM,然后对RAM进行读写操作,并通过Modelsim软件进行仿真)_向ram写数据的步骤

向ram写数据的步骤

RAM(Random Access Memory),即随机存取存储器,它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据, 其读写速度是由时钟频率决定的。

RAM主要用来存放程序及程序执行过程中产生的中间数据、 运算结果等。

 1.新建ram ip核,在ip catalog中搜索ram 选择如图选项

然后新建ip core文件夹,将其存为ram_1port

 开始设计ip 核,将深度设为8,宽度设为32,ip核用什么单位搭起来选择auto,然后输入输出数据的时钟选择一个时钟控制,然后点击next

 取消添加q寄存器,让输出缓存。然后勾上创建一个读使能信号

 为了避免同时对一个值进行读写操作,所以选择读出的数据为don‘t care

 第一个里面选择no就是不更新ROM里面的数据,选择yes就是要更新,然后下面有一个browse,就可以加载数据文件进去。然后下面那个如果勾选的话,就是允许在线更新ROM数据。这里如下图选择,然后一直点击next

 到这里时,要勾选如图文件,方便例化ip 核

 然后点击finish,完成ip核设计

2.编写程序,首先是读写模块

 

  1. module ram_rw(
  2. input clk , //时钟信号
  3. input rst_n , //复位信号,低电平有效
  4. output ram_wr_en , //ram写使能
  5. output ram_rd_en , //ram读使能
  6. output reg [4:0] ram_addr , //ram读写地址
  7. output reg [7:0] ram_wr_data, //ram写数据
  8. input [7:0] ram_rd_data //ram读数据
  9. );
  10. //reg define
  11. reg [5:0] rw_cnt ; //读写控制计数器
  12. //*****************************************************
  13. //** main code
  14. //*****************************************************
  15. //rw_cnt计数范围在0~31,ram_wr_en为高电平;32~63时,ram_wr_en为低电平
  16. assign ram_wr_en = ((rw_cnt >= 6'd0) && (rw_cnt <= 6'd31)) ? 1'b1 : 1'b0;
  17. //rw_cnt计数范围在32~63,ram_rd_en为高电平;0~31时,ram_rd_en为低电平
  18. assign ram_rd_en = ((rw_cnt >= 6'd32) && (rw_cnt <= 6'd63)) ? 1'b1 : 1'b0;
  19. //读写控制计数器,计数器范围0~63
  20. always @(posedge clk or negedge rst_n) begin
  21. if(rst_n == 1'b0)
  22. rw_cnt <= 6'd0;
  23. else if(rw_cnt == 6'd63)
  24. rw_cnt <= 6'd0;
  25. else
  26. rw_cnt <= rw_cnt + 6'd1;
  27. end
  28. //读写控制器计数范围:0~31 产生ram写使能信号和写数据信号
  29. always @(posedge clk or negedge rst_n) begin
  30. if(rst_n == 1'b0)
  31. ram_wr_data <= 8'd0;
  32. else if(rw_cnt >= 6'd0 && rw_cnt <= 6'd31)
  33. ram_wr_data <= ram_wr_data + 8'd1;
  34. else
  35. ram_wr_data <= 8'd0;
  36. end
  37. //读写地址信号 范围:0~31
  38. always @(posedge clk or negedge rst_n) begin
  39. if(rst_n == 1'b0)
  40. ram_addr <= 5'd0;
  41. else if(ram_addr == 5'd31)
  42. ram_addr <= 5'd0;
  43. else
  44. ram_addr <= ram_addr + 1'b1;
  45. end
  46. endmodule

 然后是顶层模块

 

  1. module ip_ram(
  2. input sys_clk , //系统时钟
  3. input sys_rst_n //系统复位,低电平有效
  4. );
  5. //wire define
  6. wire ram_wr_en ; //ram写使能
  7. wire ram_rd_en ; //ram读使能
  8. wire [4:0] ram_addr ; //ram读写地址
  9. wire [7:0] ram_wr_data ; //ram写数据
  10. wire [7:0] ram_rd_data ; //ram读数据
  11. //*****************************************************
  12. //** main code
  13. //*****************************************************
  14. //ram读写模块
  15. ram_rw u_ram_rw(
  16. .clk (sys_clk),
  17. .rst_n (sys_rst_n),
  18. .ram_wr_en (ram_wr_en ),
  19. .ram_rd_en (ram_rd_en ),
  20. .ram_addr (ram_addr ),
  21. .ram_wr_data (ram_wr_data),
  22. .ram_rd_data (ram_rd_data)
  23. );
  24. //ram ip核例化
  25. ram_1port u_ram_1port(
  26. .address (ram_addr),
  27. .clock (sys_clk),
  28. .data (ram_wr_data),
  29. .rden (ram_rd_en),
  30. .wren (ram_wr_en),
  31. .q (ram_rd_data)
  32. );
  33. endmodule

然后在modelsim中看波形

测试文件如图

 

  1. `timescale 1 ns/ 1 ns
  2. module ip_ram_tb();
  3. parameter T = 20;
  4. reg sys_clk;
  5. reg sys_rst_n;
  6. wire ram_wr_en ; //ram写使能
  7. wire ram_rd_en ; //ram读使能
  8. wire [4:0] ram_addr ; //ram读写地址
  9. wire [7:0] ram_wr_data ; //ram写数据
  10. wire [7:0] ram_rd_data ; //ram读数据
  11. initial
  12. begin
  13. sys_clk = 1'b0;
  14. sys_rst_n = 1'b0;
  15. #200
  16. sys_rst_n = 1'b1;
  17. //模拟发送一帧数据
  18. #1500000 $stop;
  19. end
  20. always #(T/2) sys_clk = ~sys_clk;
  21. //ram读写模块
  22. ram_rw u_ram_rw(
  23. .clk (sys_clk),
  24. .rst_n (sys_rst_n),
  25. .ram_wr_en (ram_wr_en ),
  26. .ram_rd_en (ram_rd_en ),
  27. .ram_addr (ram_addr ),
  28. .ram_wr_data (ram_wr_data),
  29. .ram_rd_data (ram_rd_data)
  30. );
  31. //ram ip核例化
  32. ram_1port u_ram_1port(
  33. .address (ram_addr),
  34. .clock (sys_clk),
  35. .data (ram_wr_data),
  36. .rden (ram_rd_en),
  37. .wren (ram_wr_en),
  38. .q (ram_rd_data)
  39. );
  40. endmodule

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/801563
推荐阅读
相关标签
  

闽ICP备14008679号