RAM_IP核 仿真,quartus ii (内置)

年轻人,多睡觉!工作业余之际,复习下曾经学过的。害怕忘记,于是记录下来,也有一段记忆。若有错误,欢迎指正。

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

程序设计
1.首先是,一个计数器。循环计64个数。

reg [5:0] time_cnt;
always@(posedge clk or negedge rst)
if(!rst)
        time_cnt<=0;
    else if(cnt==6'd63)
        time_cnt<=0;
    else
        time_cnt<=time_cnt+1'b1;

2.使用time_cnt 开始读和写的控制

assign wren=(time_cnt<=6'd0&&time_cnt>=6'd31);
assign rden=(time_cnt<=6'd32&&time_cnt>=6'd63);

3.然后开始32个地址循环 计数。(注意我用的clk 是negedge 有效)

reg [4:0] address;
always@(negedge clk or negedge rst)
if(!rst)
        address<=0;
    else if(address==5'd31)
        address<=0;
    else
        address<=address+1'b1;

4.使用time_cnt 开始读和写的控制使能

assign wren=(time_cnt<=6'd0&&time_cnt>=6'd31);
assign rden=(time_cnt<=6'd32&&time_cnt>=6'd63);

5.写控制

reg [7:0] wrdata;
always@(negedge clk or negedge rst)
if(!rst)
        wrdata<=0;
    else
        wrdata<=time_cnt;

6.最后例化一个单口RAM进去
下图是quartus 上的生成RAM的工具.注意下图红圈
这里写图片描述

然后是综合的结果

这里写图片描述
ip ram 选项中的 q这个端口的选项没有选。资源没什么变化。
因为选择了Q 就多了一个寄存器要缓一个读时钟。
7.再写个testbench

initial
begin
    clk=0;
    rst=0;
    #10
    rst=1;
end

always
begin
    #10000 clk=~clk;
end

8.两个仿真图比较。前个图√ 红圈,后面没有√了红圈。
这里写图片描述

这里写图片描述

前者勾了红圈,比后者多寄存器,要延迟一个周期左右。
9.最后对没有√红圈的选项,下载到了板子上,使用了signal Tap 采取了信号。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值