Wishbone B3总线Generic RAM写法
以下Verilog HDL代码符合wishbone总线B3标准协议,在Altera和Xilinx的开发工具上可以实现综合,自动推断并采用片上RAM资源,可以完成内存内容的初始化。
/*
************************************************************************************************
* File : ram_wb.v
* Module : ram_wb
* Author : Lyu Yang
* Date : 01,01,1970
* Description : wishbone generic ram
************************************************************************************************
*/
// synthesis translate_off
`timescale 1ns / 1ps
// synthesis translate_on
`timescale 1ns / 100ps
module ram_wb (
clk_i,
rst_i,
cyc_i,
stb_i,
we_i,
sel_i,
adr_i,
dat_i,
dat_o,
cti_i,
ack_o
);
;
;
// clock
input clk_i;
// async reset
input rst_i;
// wishbone signals
input cyc_i;
input stb_i;
input we_i;
:] sel_i;
:] adr_i;
:] dat_i;
:] dat_o;
:] cti_i;
output reg ack_o;
:] wr_data;
// mux for data to ram
:] = sel_i[] ? dat_i[:] : dat_o[:];
:] = sel_i[] ? dat_i[:] : dat_o[:];
: ] = sel_i[] ? dat_i[: ] : dat_o[: ];
: ] = sel_i[] ? dat_i[ : ] : dat_o[ : ];
ram #(
.dat_width(),
.adr_width(adr_width),
.mem_size(mem_size)
) ram0 (
.dat_i(wr_data),
.dat_o(dat_o),
.adr_i(adr_i[adr_width+:]),
.we_i(we_i & ack_o),
.clk(clk_i)
);
// ack_o
always @ (posedge clk_i or posedge rst_i)
if (rst_i)
ack_o <= 'b0;
else if (!ack_o)
begin
if (cyc_i & stb_i)
ack_o <= 'b1;
end
'b111))
ack_o <= 'b0;
endmodule
//////////////////////////////////////////////////////////////////////////
module ram
(
clk,
we_i,
adr_i,
dat_i,
dat_o
);
;
;
;
:] dat_i;
:] adr_i;
input we_i;
:] dat_o;
input clk;
:] ram [:mem_size - ];
initial $readmemh("data.txt", ram);
always @ (posedge clk)
begin
dat_o <= ram[adr_i];
if (we_i)
ram[adr_i] <= dat_i;
end
endmodule // ram
使用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)。
Wishbone B3总线Generic RAM写法的更多相关文章
- OR1200处理器中Wishbone总线接口模块WB_BIU介绍
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 WB_BIU模块是OR1200处理器与外部Wishbone总线连接的接口模块.15.1节给出了WB_BIU模块的对外连接关系,并指出 ...
- Wishbone接口通用RAM
/* ************************************************************************************************ ...
- 自己动手写事件总线(EventBus)
本文由云+社区发表 事件总线核心逻辑的实现. EventBus的作用 Android中存在各种通信场景,如Activity之间的跳转,Activity与Fragment以及其他组件之间的交互,以及在某 ...
- RAM建模和初始化
冯诺依曼提出的存储计算,计算存储,因此,几乎所有的CPU和ASIC都会使用存储器,它们的类型很多,包括异步RAM.同步RAM.ZBT RAM.DDR DRAM.ROM等.由于大部分的异步RAM和SRA ...
- OpenRisc-44-or1200的pipeline整体分析
引言 我们在前面分析了ORPSoC,or1200_top,和or1200_cpu的整体架构,在最近,我们也分析了or1200的pipeline(流水线)中的两级,EX级和IF级. 但是,我们还没有从宏 ...
- 《Linux 性能及调优指南》1.4 硬盘I/O子系统
翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...
- OpenRisc-47-or1200的WB模块分析
引言 “善妖善老,善始善终”,说的是无论什么事情要从有头有尾,别三分钟热度. 对于or1200的流水线来说,MA阶段是最后一个阶段,也是整条流水线的收尾阶段,负责战场的清扫工作.比如,把运算指令的运算 ...
- python 读取csv文件
python中有一个读写csv文件的包,直接import csv即可 新建test.csv 1.写 import csv with open("test.csv","w& ...
- JIRA中的标记语言的语法参考
前言 看到网上有的文章说JIRA是使用Textile这门标记语言,有些语法和Wikitext和Markdown相像.JIRA在2017年进行了一次大更新,某些语法可能和以前不大一样,这里纪录一下常用的 ...
随机推荐
- windows系统安装mysql压缩zip版
1.下载 打开官网:https://www.mysql.com 进入DOWNLOADS--->Community--->MySQL Community Server,选择系统对应的版本点击 ...
- DateTimeToUnix/UnixToDateTime 对接时间转换
问题,通过毫秒数来解析出时间:(很多对接的时候经常需要用到) <?php $MyJson = '{"jingdong_vas_subscribe_get_responce": ...
- poj 1330(初探LCA)
Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23795 Accept ...
- linux下环境变量设置的问题
在当前环境变量前新增加一个路径 export PATH=/your/bin/path:$PATH export LD_LIBRARY_PATH=/your/lib/path:$LD_LIBRARY_P ...
- HTTP资源合集
(1)MoZILLA开发者web技术文档之HTTP 未完待续...
- CentOS7安装Pycharm后无法使用日常的快捷键
1.在百度查了一圈,原来是vim在搞鬼 楼主在安装的时候,有另外添加了vim插件,所以ctrl +c之类的键都用不了,而且每次写py文件前都要先按insert键,真坑! 2.卸载pycharm里面的v ...
- 戴尔笔记本Inspiron 7560(灵越) 加装固态硬盘从选购固态硬盘到系统迁移到设置SSD为第一启动(受不了了,网上的教程就没有完整的)
菜鸡我的笔记本为戴尔灵越Inpsiron 7560,其实Inspiron 15 7560 和Inspiron 7560是同一个型号. 电脑拆了安过内存条,换过电池,现在又加了一块固态硬盘. 因为不想安 ...
- mysql 如何给root用户设置密码
用root 进入mysql后mysql>set password =password('你的密码');mysql>flush privileges;
- 洛谷P1955 [NOI2015] 程序自动分析 [并查集,离散化]
题目传送门 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或x ...
- eclipse汉化 adt汉化
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha