原创

设计一个fifo,输入16bit,输出16bit的data,寻址宽度5bit,有空满标志。

top 层如下所示:

 /*
date : 2014/10/14
version : modelsim 10.1e-altera
design : pengxiaoen
function : 同步fifo设计
*/
module test2 (
clock ,
reset,
in_data , ou_data ,
wr_full ,
rd_empty ,
wr_en ,
rd_en
); input clock ,reset ;
input [:] in_data ; // 写入的数据
input wr_en ; //写使能
input rd_en ; //读使能 output [:] ou_data ; // 读出的数据
output wr_full ; //写满标志
output rd_empty ; //读空标志 wire [:] add_head; //ram地址头,当读使能有效+1
wire [:] add_end ; //ram地址尾,当写使能有效+1 //---------ram 模块,用来存储数据和输出数据--------------------------
data_memory U1_mem(
.clock (clock),
.reset (reset),
.wr_en (wr_en),
.rd_en (rd_en),
.add_head (add_head) ,
.add_end (add_end),
.in_data (in_data),
.ou_data (ou_data)
); //------------地址产生器 + 标志产生器---------------------------------
fifo_control U2_cont(
.clock (clock),
.reset (reset),
.wr_en (wr_en),
.rd_en (rd_en),
.wr_full (wr_full),
.rd_empty (rd_empty),
.add_head (add_head),
.add_end (add_end)
); endmodule
 module  data_memory (
clock ,reset ,
wr_en , rd_en ,
add_head ,add_end ,
in_data ,ou_data
);
input clock ,reset ; // system clock and system reset
input wr_en ; // write enable
input rd_en ; // read enable
input [:] add_head ; // memory address head
input [:] add_end ; // memory address end
input [:]in_data ; // data input to memory
output reg[:]ou_data ; // data output reg [:] mem [:] ; //define the memory
always @ (posedge clock )
if(!reset)
begin
ou_data <= 'dx ;
end
else
begin
case ({wr_en, rd_en})
'b00 : ou_data <= 16'dx ;
'b01 : ou_data <= mem[add_head] ;
'b10 : mem[add_end] <= in_data ;
'b11 : begin
ou_data <= mem[add_end] ;
mem[add_head] <= in_data ;
end
endcase
end endmodule
 module fifo_control (
clock ,reset ,
wr_en ,rd_en ,
wr_full ,rd_empty,
add_head,add_end
);
input clock ,reset ; // system clock and system reset
input wr_en ; // write enable
input rd_en ; // read enable
output reg wr_full ; // fifo full flag
output reg rd_empty ; // fifo empty
output reg [:] add_head ,add_end ; reg [:] head_temp , end_temp ;
//------地址产生块,依据读写使能进行相应地址递增,并保存原始的位置信息-----------------------
always @ (posedge clock)
if(!reset)
begin
head_temp <= 'd0 ;
end_temp <= 'd0 ;
add_head <= 'd0 ;
add_end <= 'd0 ;
end else
begin
case ({wr_en, rd_en})
'b00 : begin
head_temp <= add_head ;
end_temp <= add_end ;
end
'b01 : begin
end_temp <= add_end ;
add_head <= add_head + 'd1 ;
end
'b10 : begin
head_temp <= add_head ;
add_end <= add_end + 'd1 ;
end
'b11 : begin
add_head <= add_head + 'd1 ;
add_end <= add_end + 'd1 ;
end
endcase
end //--------标志产生块-------------------
always @ (posedge clock)
if(!reset)
begin
wr_full <= 'd0 ;
rd_empty <= 'd0 ;
end
else
begin
case ({wr_en , rd_en})
'b00 : begin
rd_empty <= 'd0 ;
wr_full <= 'd0 ;
end
'b01 : begin
wr_full <= 'd0 ; //写标志复位
if ((add_head + 'd1) == head_temp)
rd_empty <= 'd1 ; //只有切换到写使能才复位
end
'b10 : begin
rd_empty <= 'd0 ; //读标志复位
if ((add_end + 'd1) == end_temp)
wr_full <= 'd1 ; //只有切换到读使能才复位
end
'b11 : begin
rd_empty <= 'd0 ;
wr_full <= 'd0 ;
end
endcase
end endmodule

下面附上测试代码

 `timescale  1ns/1ps 

 module test2_tb ;
reg clock ,reset ;
reg [:] in_data ;
reg wr_en ;
reg rd_en ; wire [:] ou_data ;
wire wr_full ;
wire rd_empty ; test2 U_top (
.clock (clock),
.reset (reset),
.in_data (in_data), .ou_data (ou_data),
.wr_full (wr_full),
.rd_empty (rd_empty),
.wr_en (wr_en),
.rd_en (rd_en)
); integer i ; always # clock = ~clock ; initial
begin
clock ='d0 ; reset = 1'd0 ; wr_en <= 'd0 ; rd_en <= 1'd0 ;
in_data = 'd0 ;
# reset = 'd1 ; wr_en <= 1'd1 ;
for (i=;i<;i=i+) // 故意溢出
# in_data <= in_data + 'd1 ; rd_en <= 'd1 ; wr_en <= 1'd0 ;
#(* ) // 让读空标志位触发
$stop ; end endmodule

同步fifo的verilogHDL设计实例的更多相关文章

  1. 同步FIFO学习

    在网上找的一个经典同步FIFO例子. 一.前言 FIFO (First-In-First-Out) 是一种先进先出的数据交互方式,在数字ASIC设计中常常被使用.FIFO按工作时钟域的不同又可以分为: ...

  2. Verilog学习笔记简单功能实现(八)...............同步FIFO

    Part 1,功能定义: 用16*8 RAM实现一个同步先进先出(FIFO)队列设计.由写使能端控制该数据流的写入FIFO,并由读使能控制FIFO中数据的读出.写入和读出的操作(高电平有效)由时钟的上 ...

  3. 怎么用Verilog语言描述同步FIFO和异步FIFO

    感谢 知乎龚大佬 打杂大佬 网上几个nice的博客(忘了是哪个了....) 前言 虽然FIFO都有IP可以使用,但理解原理还是自己写一个来得透彻. 什么是FIFO? Fist in first out ...

  4. 同步fifo的Verilog实现

    FIFO是一种先进先出的数据缓存器,他与普通存储器相比: 优点:没有外部读写地址线,这样使用起来非常简单: 缺点:只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存 ...

  5. 同步FIFO design and IP level verification

    一.前言 应聘IC前端相关岗位时,FIFO是最常考也是最基本的题目.FIFO经常用于数据缓存.位宽转换.异步时钟域处理.随着芯片规模的快速增长,灵活的system verilog成为设计/验证人员的基 ...

  6. 同步fifo与异步fifo

    参考以下帖子: https://blog.csdn.net/hengzo/article/details/49683707 https://blog.csdn.net/Times_poem/artic ...

  7. 推荐35个新鲜出炉的响应式 Web 设计实例

    响应式设计的准则在于根据用户使用的屏幕的分辨率来改变网站的的布局.因此,视频或图像的大小和文本的数量,可以被视为是一个明显的变化.让你即使从智能手机浏览一个网站的时候能轻松地看到网站上的重要内容.今天 ...

  8. 最新Dashboard设计实例、技巧和资源集锦,视觉和功能两不误,妥妥的!

    Dashboard设计,尽管设计师们叫法各不相同(例如:“数据面板设计”, “控制面板设计”, “仪表盘设计”或“后台界面设计”等等).但,此类设计的最终目都是力求以最直观.最简洁的方式呈现各种信息和 ...

  9. App启动页设计实例与技巧

    App启动页,也称闪屏页,最初是为缓解用户等待Web/iOS/Android App数据加载的焦虑情绪而出现,后被设计师巧妙用于品牌文化展示,服务特色介绍以及功能界面熟悉等平台进行设计,被赋予了更加丰 ...

随机推荐

  1. [LeetCode]题解(python):099-Recover Binary Search Tree

    题目来源: https://leetcode.com/problems/recover-binary-search-tree/ 题意分析: 二叉搜索树中有两个点错了位置,恢复这棵树. 题目思路: 如果 ...

  2. CentOS5.4下安装codeblocks 12.11

    centos6.3下安装codeblock简单多了,这些开源的软件也都在不断进步.原来装过codeblocks10.05,忘了,这次安装又花了我半天时间,最后总算搞定. 先是安装了wxGTK-2.8. ...

  3. 关于JVM的GC机制

    GC优点: 1.提高生产率,不用逐行检查内存是否释放. 2.Java安全策略的一部分,不会使用户错误释放内存而导致JVM崩溃. GC算法基本两点: 1.检测出垃圾对象. 2.回收垃圾对象,释放相应堆空 ...

  4. A2W和W2A :很好的多字节和宽字节字符串的转换宏

    以前看<Window核心编程>,感觉多字节和宽字节之间还比较麻烦的,至少MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理 ...

  5. Java Date 和 Calendar

    Java 语言的Date(日期),Calendar(日历),DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分.日期是商业逻辑计算一个关键的部分,所有的开发者都应该能够计算 ...

  6. http://download.qt-project.org/archive/qt/4.5/qt-all-opensource-src-4.5.2.tar.bz2

    Index of /archive/qt/4.5 http://download.qt-project.org/archive/qt/4.5/qt-all-opensource-src-4.5.2.t ...

  7. Tomcat7.0.22在Windows下详细配置过程

    Tomcat7.0.22在Windows下详细配置过程 一.JDK1.7安装 1.下载jdk,下载地址:http://www.oracle.com/technetwork/java/javase/do ...

  8. MySQL支持emoji

    方案1: 应用层支持 MySQL默认的数据库编码是utf8,对于emoji文字是不能直接存储的,要想存储emoji,有许多库支持对emoji的转换,例如将

  9. ansible不配ssh连接,用户密码登录

    ansible 不配ssh免密链接,直接用ssh用户密码连接,要先装sshpass. 否则会报错: sshpass安装 sshpass下载地址:http://sourceforge.net/proje ...

  10. Visual Studio shortcut keys

    VS2010 快捷键   Ctrl+E,D ----格式化全部代码  Ctrl+E,F ----格式化选中的代码  CTRL + SHIFT + B生成解决方案  CTRL + F7 生成编译  CT ...