前言

ram这种东西,可以用ip方便,也可以自己写代码描述它。

以下讨论单口ram;8bit*256

流程

1.IP:

使用IP当然是最方便的事情啦,但可移植性差而且可定制性较差。

仿真波形:

2.Verilog描述:

描述就得自己写自己调试代码了,不过写好就是一劳永逸啦。。。

开始写了第一版代码:

 1 //************************************************
 2 //  Filename      : ram.v
 3 //  Author        : Kingstacker
 4 //  Company       : School
 5 //  Email         : kingstacker_work@163.com
 6 //  Device        : Altera cyclone4 ep4ce6f17c8
 7 //  Description   :  8bit*256 ram
 8 //************************************************
 9 module  ram #( parameter DATA_WIDTH = 8,DEPTH = 256,ADDR_WIDTH = 8)(
10     //input;
11     input    wire    clk,
12     input    wire    wren, //write high enable;
13     input    wire    [ADDR_WIDTH-1:0] address,
14     input    wire    [DATA_WIDTH-1:0] data,
15     //output;
16     output   reg     [DATA_WIDTH-1:0] q
17 );
18 reg [DATA_WIDTH-1:0] memory[0:DEPTH-1];
19 //read;
20 always @(posedge clk ) begin
21     q <= memory[address];
22 end //always
23 //write;
24 always @(posedge clk ) begin
25     if(wren) begin
26         memory[address] <= data;
27     end
28 end //always
29 endmodule

综合RTL:

仿真波形:读写同时的时候会有冲突导致xx。

第二版代码:地址寄存一拍。

 1 //************************************************
 2 //  Filename      : ram.v
 3 //  Author        : Kingstacker
 4 //  Company       : School
 5 //  Email         : kingstacker_work@163.com
 6 //  Device        : Altera cyclone4 ep4ce6f17c8
 7 //  Description   :  8bit*256 ram
 8 //************************************************
 9 module  ram #( parameter DATA_WIDTH = 8,DEPTH = 256,ADDR_WIDTH = 8)(
10     //input;
11     input    wire    clk,
12     input    wire    wren, //write high enable;
13     input    wire    [ADDR_WIDTH-1:0] address,
14     input    wire    [DATA_WIDTH-1:0] data,
15     //output;
16     output   wire     [DATA_WIDTH-1:0] q
17 );
18 reg [DATA_WIDTH-1:0] memory[0:DEPTH-1];
19 reg [ADDR_WIDTH-1:0] address_reg;
20 //read;
21 always @(posedge clk ) begin
22     address_reg <= address;
23 end //always
24 assign q = memory[address_reg];
25 //write;
26 always @(posedge clk ) begin
27     if(wren) begin
28         memory[address] <= data;
29     end
30 end //always
31
32 endmodule

综合rtl:

仿真波形:

以上。

转载于:https://www.cnblogs.com/kingstacker/p/7545069.html

ram自己写?用IP?相关推荐

  1. FPGA逻辑设计回顾(13)RAM以及ROM的IP核定制以及关键参数

    文章目录 前言 RAM IP的定制 Xilinx的IP定制位置 Block RAM的定制过程 第一页 第二页 第三页 第四页 第五页 Block RAM的延迟讨论 ROM IP核的定制 总结 前言 本 ...

  2. 用python写一个ip查询工具库

    首先附上一张高清有码的图,效果如图所示. 最近喜欢上了Python,总想用python搞点事情. 写此工具的目的 最近一段时间遇见过不少钓鱼网站,于是乎就在想,这些网站的服务器都在哪里? 为何如此猖獗 ...

  3. verilog基础篇RAM IP核的使用

    在该页面中,我们去掉了q output port(去掉输出寄存器),并且添加了一个rden读使能信号,所谓rden读使能信号就是,当该信号为高电平时,我们才可以读取RAM IP核中的数据. 其余的页面 ...

  4. 【正点原子FPGA连载】第十九章IP核之双端口RAM实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  5. IP核的使用之RAM(Vivado)

    IP核的使用之RAM(Vivado) 文章目录 IP核的使用之RAM(Vivado) 一.引言 二.RAM IP核及相关内容扫盲 1.RAM简介 2.RAM IP核分类(Xilinx) 三.分布式RO ...

  6. 【verilog】 Vivado-Simple Dual-Port RAM IP的使用(Xilinx FPGA,双口RAM,IP使用)

    简单双口RAM的IP核 配置IP 例化顶层 测试 波形 简单双口RAM的IP核 分A端口和B端口 A为输入端口,负责数据的写入 B端口为输出端口,负责数据的读出 两端的时钟可以不同,还允许在写入A的同 ...

  7. ZYNQ之FPGA学习----RAM IP核使用实验

    1 RAM IP核介绍 RAM 的英文全称是 Random Access Memory, 即随机存取存储器, 它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据,其读写速度 ...

  8. 【正点原子MP157连载】 第十四章 IP核之RAM实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  9. 【正点原子FPGA连载】第十四章 IP核之RAM实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

最新文章

  1. Access应用日志一
  2. 20170623_oracle基础知识_常见问题
  3. 数据库查询速度极慢【个人工作问题解决过程记录】
  4. python输入一个数组输出24进制式的时间_python获取时间,自定义的时间格式,时间戳,十六进制时间类型输出...
  5. 《组织行为学》_09 彩虹理论:人力资本越来越高怎么办?
  6. 通过webbrowser控件获取验证码
  7. 团队冲刺第六天个人博客
  8. 【简单数论】H - A^X mod P_HRBUST - 2049_31行代码AC
  9. golang 热插拨 插件_从零开始实现一个插件化框架(一)
  10. Win7系统打开摄像头提示“请检查装置连接状况”怎么办
  11. Understanding glibc malloc - ptmalloc
  12. Linux(CentOS7.1)修改默认yum源为国内的阿里云yum源
  13. 高质量编程之编译警告级别
  14. 密码学基础之对称密钥的分发和存储
  15. Ansys-结构动力学分析-有预应力琴弦横向振动模态分析学习收获
  16. wpa_supplicant 框架
  17. 网站建设教程:企业怎么自己建网站?
  18. 51单片机无法烧录程序的N种解决办法
  19. 【雕爷学编程】Arduino动手做(79)---MQ135空气检测模块
  20. AI-常见机器学习算法介绍

热门文章

  1. 什么是数据库触发器?
  2. 使用图形界面Anaconda创建新环境的一个小问题
  3. python库声纹_针对亿级大规模声纹库检索,有哪些简洁、高效的算法?
  4. python实现二分法查找_python二分法查找
  5. 电脑显示屏亮度怎么调_金合光电丨深圳led显示屏厂家为您诠释行业专业术语
  6. python写文件追加 按行追加_你真的会用python进行文件操作吗
  7. 3个阶段 项目征名_3个月!签约亿元以上项目66个
  8. 计算器小程序java课程设计,java课程设计----计算器小程序报告.doc
  9. python3 threading.lock_Python3 threading
  10. 笔记本电脑怎样连接打印机_怎样使用打印机,打印机的基础知识