以下Verilog HDL代码符合wishbone总线B3标准协议,在Altera和Xilinx的开发工具上可以实现综合,自动推断并采用片上RAM资源,可以完成内存内容的初始化。

  1 /*
  2 ************************************************************************************************
  3 *    File   : ram_wb.v
  4 *    Module : ram_wb
  5 *    Author : Lyu Yang
  6 *    Date   : 01,01,1970
  7 *    Description : wishbone generic ram
  8 ************************************************************************************************
  9 */
 10
 11 // synthesis translate_off
 12 `timescale 1ns / 1ps
 13 // synthesis translate_on
 14 `timescale 1ns / 100ps
 15 module ram_wb (
 16     clk_i,
 17     rst_i,
 18     cyc_i,
 19     stb_i,
 20     we_i,
 21     sel_i,
 22     adr_i,
 23     dat_i,
 24     dat_o,
 25     cti_i,
 26     ack_o
 27 );
 28
 29 parameter adr_width = 10;
 30 parameter mem_size  = 1024;
 31
 32 // clock
 33 input                   clk_i;
 34 // async reset
 35 input                   rst_i;
 36
 37 // wishbone signals
 38 input                   cyc_i;
 39 input                   stb_i;
 40 input                   we_i;
 41 input   [3:0]           sel_i;
 42 input   [adr_width+1:0] adr_i;
 43 input   [31:0]          dat_i;
 44 output  [31:0]          dat_o;
 45 input   [2:0]           cti_i;
 46 output  reg             ack_o;
 47
 48 wire [31:0]          wr_data;
 49
 50 // mux for data to ram
 51 assign wr_data[31:24] = sel_i[3] ? dat_i[31:24] : dat_o[31:24];
 52 assign wr_data[23:16] = sel_i[2] ? dat_i[23:16] : dat_o[23:16];
 53 assign wr_data[15: 8] = sel_i[1] ? dat_i[15: 8] : dat_o[15: 8];
 54 assign wr_data[ 7: 0] = sel_i[0] ? dat_i[ 7: 0] : dat_o[ 7: 0];
 55
 56 ram #(
 57     .dat_width(32),
 58     .adr_width(adr_width),
 59     .mem_size(mem_size)
 60 ) ram0 (
 61     .dat_i(wr_data),
 62     .dat_o(dat_o),
 63     .adr_i(adr_i[adr_width+1:2]),
 64     .we_i(we_i & ack_o),
 65     .clk(clk_i)
 66 );
 67
 68 // ack_o
 69 always @ (posedge clk_i or posedge rst_i)
 70 if (rst_i)
 71     ack_o <= 1'b0;
 72 else if (!ack_o)
 73     begin
 74         if (cyc_i & stb_i)
 75             ack_o <= 1'b1;
 76     end
 77 else if ((sel_i != 4'b1111) | (cti_i == 3'b000) | (cti_i == 3'b111))
 78     ack_o <= 1'b0;
 79
 80 endmodule
 81
 82 //
 83 module ram
 84 (
 85     clk,
 86     we_i,
 87     adr_i,
 88     dat_i,
 89     dat_o
 90 );
 91
 92 parameter adr_width = 10;
 93 parameter dat_width = 32;
 94 parameter mem_size  = 1024;
 95
 96 input [dat_width-1:0]      dat_i;
 97 input [adr_width-1:0]      adr_i;
 98 input                        we_i;
 99 output reg [dat_width-1:0] dat_o;
100 input                      clk;
101
102 reg [dat_width-1:0] ram [0:mem_size - 1];
103
104 initial $readmemh("data.txt", ram);
105
106 always @ (posedge clk)
107 begin
108     dat_o <= ram[adr_i];
109     if (we_i)
110         ram[adr_i] <= dat_i;
111 end
112
113 endmodule // ram
114      

  使用Verilog中的$readmemh(filepath, data)或者$readmemb(filepath, data)功能,不仅在仿真中可以实现内存内容的初始化,现在的综合工具可以分析并得出适合各家工具的初始化文件并完成综合。

  另外,data.txt中数据内容的描述格式为:@十六进制地址[空白间隔 Tab Space \n]十六进制数据。例如,笔者在写Nios II处理器bootloader时候,片上存储bootloader程序的初始化文件部分为:

@00000000
00808014
@00000001
1001483a
@00000002
10bff804
@00000003
00bffd16
@00000004
00400034kljdaklj

  需要注意的是,地址可以不写,如果不写的话工具读取的时候认为地址从0开始连续分布。如果内容少于所需,那么剩余部分填充内容不确定(一般为0)。

转载于:https://www.cnblogs.com/lyuyangly/p/4852603.html

Wishbone B3总线Generic RAM写法相关推荐

  1. OR1200处理器中Wishbone总线接口模块WB_BIU介绍

    下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 WB_BIU模块是OR1200处理器与外部Wishbone总线连接的接口模块.15.1节给出了WB_BIU模块的对外连接关系,并指出 ...

  2. 片上总线学习之Wishbone

    片上总线学习之Wishbone Wishbone是Silicore公司推出的一种轻量级协议,结构简单,开源免费,未来有可能成为新的IEEE标准,看好其在Soc片上总线的应用前景,典型的WISHBONE ...

  3. 深入 AXI4总线 (四):RAM 读取实战

    光说不练,云玩家.这篇文章中我们就通过访问一个 AXI4 接口的 RAM 的实际操作,加深我们对 AXI4 总线的理解. 我们的实验平台是 ISE 14.7 以及 modelsim 10.2, RAM ...

  4. 自己动手写事件总线(EventBus)

    2019独角兽企业重金招聘Python工程师标准>>> 本文由云+社区发表 事件总线核心逻辑的实现. <!--more--> EventBus的作用 Android中存在 ...

  5. 【STM32H7教程】第91章 STM32H7的FDCAN总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第91章       STM32H7的FDCAN总线基础知识和 ...

  6. AXI总线之AXI-LITE总线分析与实现

    AXI是由ARM公司提供的一种总线协议,Xilinx从6系列的FPGA开始对AXI总线提供支持,现如今已经发展到AXI4这个版本.在Xilinx的ZYNQ系列中,AXI是经常用的一种接口.AXI有3个 ...

  7. STM32的总线AMBA、AHB、APB

    一.总线的简单介绍: 处理器无疑是计算机中最重要的部件,但并不是唯一的部件.一台计算机也需要随机访问存储器(RAM)来存放机器码指令以便让处理器执行.计算机还必须有一些方法使这些指令进入RAM(输入设 ...

  8. FPGA验证学习(五):SoC的总线架构

    前言 SoC的发展离不开应用领域的需求牵引.在根据需求进行片上系统设计时,不仅要考虑SoC本身,而且还要考虑SoC应用产品的需求,重点关注特定IP获取和系统总体结构(性能.功耗.成本.可靠性.适用性) ...

  9. 《Linux 性能及调优指南》1.4 硬盘I/O子系统

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

最新文章

  1. aspx 与 ashx cs
  2. 2020 年 Java 面试常见 350 题
  3. 内存数据库MemSQL ——基于内存,MVCC+哈希表、跳表
  4. 小心!智能合约再爆高危漏洞,两大加密货币直接变废纸!
  5. C指针原理(24)-C指针基础
  6. kaggle (02) - 房价预测案例(进阶版)
  7. python删除链表中的最小元素_LintCode Python 入门级题目 删除链表元素、整数列表排序...
  8. ORACLE 批量实例分析
  9. 北京理工大学语音识别技术.ppt
  10. 谷歌 analytics.js 简要分析
  11. xsl判断节点存在_[剑指offer]25删除链表中重复的节点
  12. 常用的分析方法论及分析框架
  13. 对OB28的源代码进行调试
  14. netsetman使用教程_网络管理软件NetSetMan安装教程
  15. 关于地图矢量下载器的使用感受
  16. HbuiderX调用微信开发者工具设置
  17. 网络安全思维导图(全套11张)
  18. 花花公子推荐伤感qq日志:乖不哭,我拜你
  19. 大聪明教你学Java | 调用腾讯云短信接口,实现短信通知
  20. 什么是大数据开发?看完我终于懂了......

热门文章

  1. 三菱FX系列PLC面板布置和PLC系统构成
  2. 计算机仿真塞曼效应实验报告,塞曼效应实验报告[完整版].doc
  3. Java ThreadLocalRandom 伪随机数生成器的源码深度解析与应用
  4. java接口与抽象类的异同
  5. 浏览器提示代理服务器没有响应
  6. drop,delete与truncate的区别
  7. Markdown pad2 使用本地图片
  8. dalao自动报表邮件2.0
  9. SVL simulator 2021.3 Radar目标检测结果异常的解决方案
  10. mg动画制作的简单思路整理