ram自己写?用IP?
前言
ram这种东西,可以用ip方便,也可以自己写代码描述它。
以下讨论单口ram;8bit*256
流程
1.IP:
使用IP当然是最方便的事情啦,但可移植性差而且可定制性较差。
仿真波形:

2.Verilog描述:
描述就得自己写自己调试代码了,不过写好就是一劳永逸啦。。。
开始写了第一版代码:
//************************************************
// Filename : ram.v
// Author : Kingstacker
// Company : School
// Email : kingstacker_work@163.com
// Device : Altera cyclone4 ep4ce6f17c8
// Description : 8bit*256 ram
//************************************************
module ram #( parameter DATA_WIDTH = ,DEPTH = ,ADDR_WIDTH = )(
//input;
input wire clk,
input wire wren, //write high enable;
input wire [ADDR_WIDTH-:] address,
input wire [DATA_WIDTH-:] data,
//output;
output reg [DATA_WIDTH-:] q
);
reg [DATA_WIDTH-:] memory[:DEPTH-];
//read;
always @(posedge clk ) begin
q <= memory[address];
end //always
//write;
always @(posedge clk ) begin
if(wren) begin
memory[address] <= data;
end
end //always
endmodule
综合RTL:

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

第二版代码:地址寄存一拍。
//************************************************
// Filename : ram.v
// Author : Kingstacker
// Company : School
// Email : kingstacker_work@163.com
// Device : Altera cyclone4 ep4ce6f17c8
// Description : 8bit*256 ram
//************************************************
module ram #( parameter DATA_WIDTH = ,DEPTH = ,ADDR_WIDTH = )(
//input;
input wire clk,
input wire wren, //write high enable;
input wire [ADDR_WIDTH-:] address,
input wire [DATA_WIDTH-:] data,
//output;
output wire [DATA_WIDTH-:] q
);
reg [DATA_WIDTH-:] memory[:DEPTH-];
reg [ADDR_WIDTH-:] address_reg;
//read;
always @(posedge clk ) begin
address_reg <= address;
end //always
assign q = memory[address_reg];
//write;
always @(posedge clk ) begin
if(wren) begin
memory[address] <= data;
end
end //always endmodule
综合rtl:

仿真波形:

以上。
ram自己写?用IP?的更多相关文章
- 教你怎样写自定义IP地址算法
通过IP地址可以看到算法规律,写成自定义IP地址,也可以把IP地址转为自定格式的IP地址.也可以用于加密一些明文数字.起始次方可自定义(以1次方和0次方为例) a.以下写正反算法(以1次方为最小单位) ...
- 用sed写配置IP脚本参数
#!/bin/bash#配置ip地址参数脚本NET=/etc/sysconfig/network-scripts/ifcfg-ens33if grep -E "BOOTPROTO=dhcp& ...
- 多线程IP获取工具(C#)
以前帮一个朋友写的“IP采集工具”! Control.CheckForIllegalCrossThreadCalls = false; 多线程,测试后还比较稳定. 500线程时候,CPU5%左右,内存 ...
- ASP.NET 的IP帮助类
个人网站地址: https://www.lesg.cn/netdaima/net/2016-239.html ASP.NET 的IP帮助类 在Web开发中会出现需要调用客户IP的方法: 一般调用方法就 ...
- TCP/IP 协议难点之一—— IP分片
1 IP协议简单介绍 就个人而言,网络中,抛开网络安全加密这些,就只单单讨论协议本身,比较难的有三个地方: IP分片与重组 TCP滑动窗口与TCP状态的改变 TCP定时器 其实协议本身根据<TC ...
- TCP/IP网络编程中socket的行为
一. read/write的语义:为什么会阻塞? 先从write说起: #include <unistd.h>ssize_t write(int fd, const void *buf, ...
- CentOS 6.5设置静态IP教程 并且可以ping通
CentOS6.5掉电或重启,它的IP会被DHCP重新分配,如果要远程控制这台电脑,不得不去打开显示器去查看它的新IP,这样太麻烦了.于是需要将这台电脑的IP设置成静态的. 网上常规的设置静态ip的方 ...
- 浅谈TCP/IP网络编程中socket的行为
我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...
- s3c2440 J-flash 烧写 NOR flash
视屏教程里是在NOR Flash 烧写了一个supervivi然后通过superViVi配合DNW下载Uboot程序到landflash第零块,由于我电脑室64位win7,官方提供的USB下载驱动不能 ...
随机推荐
- form,ajax注册,logging日志使用
一.form表单类型提交注册信息 二.ajax版本提交注册信息 <!DOCTYPE html> <html lang="en"> <head> ...
- Linux 命令(二)
man help:线上查询及帮助命令 命令 --help:简单帮助 help cd:查看一些Linux命令行的一些内置命令 文件和目操作命令(19个) ls cd cp find mkdi ...
- group by用法
select * from Table group by id,一定不能是*,而是某一个列或者某个列的聚合函数. 参考:http://www.cnblogs.com/jingfengling/p/59 ...
- Bad Hair Day POJ - 3250 (单调栈入门题)
Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-cons ...
- 实用小技巧(一):UIScrollView中上下左右滚动方向的判断
https://www.jianshu.com/p/93e8459b6dae 2017.06.01 01:13* 字数 674 阅读 1201评论 0喜欢 1 2017.06.01 01:13* 字数 ...
- 【问题解决方案】之 jmeter启动报错:Not able to find Java executable or version. Please check your Java installation
故事发生在云计算实验课上-- ** 故事发生在云计算实验课上-- Step 1 在Xshell中登录自己的cloud虚拟机后,<sudo su ->切换到root用户 Step 2 < ...
- 【学习总结】Master课程 之 虚拟化与云计算
Section 1- Cloud Computing Introduction-云计算介绍 1-What can Cloud Computing do? - 云计算可以做什么? 服务模式:美国国家标准 ...
- 网站之robots.txt文件
一.robots.txt是什么? robots.txt是一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被搜索引擎访问的部分,或者指定搜索引擎只收录指定的内容. 当一个搜索引擎(又称搜索 ...
- async并发处理
- vue-router的简单实现原理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...