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下载驱动不能 ...
随机推荐
- python读取/创建XML文件
Python中定义了很多处理XML的函数,如xml.dom,它会在处理文件之前,将根据xml文件构建的树状数据存在内存.还有xml.sax,它实现了SAX API,这个模块牺牲了便捷性,换取了速度和减 ...
- Linux提示删除文件cannot remove `文件名': Operation not permitted
Linux系统下删除某个文件时提示如下报错: 执行lsattr命令可以看到隐藏属性-------i--------,如下图: 通过查找资料发现: chattr命令用于改变文件属性.这项指令可改变存放在 ...
- Mike and strings CodeForces - 798B (简洁写法)
题目链接 时间复杂度 O(n*n*|s| ) 纯暴力,通过string.substr()函数来构造每一个字符串平移后的字符串. #include <iostream> #include & ...
- scrapy之多环境的选择使用
scrapy之多环境的选择使用 个人主机主机上可能存在多个python环境,当在终端中使用scrapy时,容易产生错误,无法使用到自己想使用的那个python,如何解决这个问题呢? 出现这类问题时,直 ...
- jmeter之批量修改请求路径
今天工作时碰到一个问题:测试环境中由于tomcat没指定webapps下的文件夹名,导致tomcat使用了webapps下默认的文件夹名,而我的jmeter脚本都已经做出来了,一共83个接口,挨个改路 ...
- Win1064位下mysql插入百万行数据耗时问题
performance - Inserting 1 Million records is taking too much time MYSQL - Stack Overflowhttps://stac ...
- PHPUnit实践一(初识)
PHPUnit实践一(初识) 本系列教程所有的PHPUnit测试基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我们的普通用到的测试: 代码直接echo,debug等方法测 ...
- [转帖]一个FORK的面试题
一个FORK的面试题 https://coolshell.cn 搞不懂 fork 的含义. Linux 里面的线程不是教科书上面的标准的线程 好像用 父子进程来进行 模拟线程的处理 父子线程应该共享 ...
- 模态框 modal data-toggle data-target
模态框 modal data-toggle data-target 1. Data-*属性 模态框(modal) 触发事件(data-toggle) 触发对象data-target(ID 或类) ...
- ajax设置默认值ajaxSetup()方法
$(function(){ //设置全局 jQuery Ajax全局参数 $.ajaxSetup({ type:"POST", async:false, cache:false, ...