MyFPGA Forum

 找回密码
 注册
搜索
查看: 2015|回复: 0

RAM_IP核 仿真,quartus ii (内置)

[复制链接]
发表于 2020-6-28 17:09:52 | 显示全部楼层 |阅读模式
本帖最后由 wyzhou 于 2020-6-28 17:11 编辑

最近都在用intel altera的板子。学学里面的RAM 的使用。

程序设计
1.首先是,一个计数器。循环计64个数。
  1. reg [5:0] time_cnt;
  2. always@(posedge clk or negedge rst)
  3. if(!rst)
  4.         time_cnt<=0;
  5.     else if(cnt==6'd63)
  6.         time_cnt<=0;
  7.     else
  8.         time_cnt<=time_cnt+1'b1;
复制代码
2.使用time_cnt 开始读和写的控制
  1. assign wren=(time_cnt<=6'd0&&time_cnt>=6'd31);
  2. assign rden=(time_cnt<=6'd32&&time_cnt>=6'd63);
复制代码
3.然后开始32个地址循环 计数。(注意我用的clk 是negedge 有效)
  1. reg [4:0] address;
  2. always@(negedge clk or negedge rst)
  3. if(!rst)
  4.         address<=0;
  5.     else if(address==5'd31)
  6.         address<=0;
  7.     else
  8.         address<=address+1'b1;
复制代码
4.使用time_cnt 开始读和写的控制使能
  1. assign wren=(time_cnt<=6'd0&&time_cnt>=6'd31);
  2. assign rden=(time_cnt<=6'd32&&time_cnt>=6'd63);
复制代码
5.写控制
  1. reg [7:0] wrdata;
  2. always@(negedge clk or negedge rst)
  3. if(!rst)
  4.         wrdata<=0;
  5.     else
  6.         wrdata<=time_cnt;
复制代码
6.最后例化一个单口RAM进去
下图是quartus 上的生成RAM的工具.注意下图红圈
11.png
然后是综合的结果
12.png
ip ram 选项中的 q这个端口的选项没有选。资源没什么变化。
因为选择了Q 就多了一个寄存器要缓一个读时钟。
7.再写个testbench
  1. initial
  2. begin
  3.     clk=0;
  4.     rst=0;
  5.     #10
  6.     rst=1;
  7. end

  8. always
  9. begin
  10.     #10000 clk=~clk;
  11. end
复制代码
8.两个仿真图比较。前个图√ 红圈,后面没有√了红圈。
13.png

14.png

前者勾了红圈,比后者多寄存器,要延迟一个周期左右。
9.最后对没有√红圈的选项,下载到了板子上,使用了signal Tap 采取了信号。
15.png
————————————————
版权声明:本文为CSDN博主「sunshinelifes」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sunshinelifes/article/details/82669564
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-3-28 17:45 , Processed in 0.049453 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表