一、模块框图及基本思路

fifo_ip:ISE生成的IP

fifo_control:在fifo未满情况下不断写入递增的四位数,每隔1s读出一个数据驱动Led显示

fifo_top:前两个模块的组合

二、软件部分

fifo_control:

 module fifo_control(
clk,rst,
Data_Out,
din,wr_en,full,
dout,rd_en,empty
);
input clk,rst;
output[:] Data_Out;
output [:] din; //相对fifo来说是输入
input [:] dout; //相对fifo来说是输出
output wr_en,rd_en;
input full,empty; /****************定时部分*********************/
localparam T1S=50_000_000-;
reg[:] Count_1s;
always @(posedge clk or posedge rst)
begin
if(rst)
begin
Count_1s<='d0;
end
else if(Count_1s==T1S)
Count_1s<='d0;
else if(!isCount)
Count_1s<='d0;
else Count_1s<=Count_1s+'b1;
end
/*****************FIFO写入部分********************/
reg [:] i;
reg wr_en;
reg [:]din; always @(posedge clk or posedge rst)
if(rst)
begin
din<='d0;
i<='d0;
wr_en<='b0;
end
else if(!full)
case(i)
'd0:begin din<=din+1'b1;i<=i+'b1;wr_en<=1'b1;end
'd1:begin i<=2'd0;wr_en<='b0;end
endcase
/*******************FIFO读出部分***************************/
reg[:] Data_Out_r;
wire [:] dout;
reg isCount;
reg [:]j;
reg rd_en; always @(posedge clk or posedge rst)
if(rst)
begin
Data_Out_r<='d0;
j<='d0;
isCount<='b0;
rd_en<='b0;
end
else if(!empty)
case(j)
'd0:if(Count_1s==T1S) begin j<=j+1'b1;isCount<='b0;rd_en<=1'b1; end
else isCount<='b1;
'd1:begin rd_en<=1'b0;j<=j+'b1;end
'd2:begin Data_Out_r<=dout;j<=3'd0; end
endcase
assign Data_Out=Data_Out_r; /****************************************************/ endmodule

fifo_top:

 module fifo_top(
clk,RSTn,
Data_Out
);
input clk,RSTn;
output[:] Data_Out; wire [:]din;
wire [:]dout;
wire wr_en,rd_en,full,empty; /****************************************************/
fifo_ip U0 (
.clk(clk), // input clk
.rst(!RSTn), // input rst
.din(din), // input [3 : 0] din
.wr_en(wr_en), // input wr_en
.rd_en(rd_en), // input rd_en
.dout(dout), // output [3 : 0] dout
.full(full), // output full
.empty(empty) // output empty
);
/*********************************************************/
fifo_control U1 (
.clk(clk),
.rst(!RSTn),
.Data_Out(Data_Out),
.din(din),
.wr_en(wr_en),
.full(full),
.dout(dout),
.rd_en(rd_en),
.empty(empty)
); endmodule

三、硬件部分

黑金SPARTAN开发板

 NET "clk" LOC = T8;
NET "RSTn" LOC = L3; NET "Data_Out[0]" LOC = P4;
NET "Data_Out[1]" LOC = N5;
NET "Data_Out[2]" LOC = P5;
NET "Data_Out[3]" LOC = M6;

基于Verilog的简单FIFO读写实验的更多相关文章

  1. 基于Verilog的带FIFO写入缓冲的串口发送接口封装

    一.模块框图及基本思路 tx_module:串口发送的核心模块,详细介绍请参照前面的“基于Verilog的串口发送实验” fifo2tx_module:当fifo不为空时,读取fifo中的数据并使能发 ...

  2. 基于Verilog的带FIFO输出缓冲的串口接收接口封装

    一.模块框图及基本思路 rx_module:串口接收的核心模块,详细介绍请见“基于Verilog的串口接收实验” rx2fifo_module:rx_module与rx_fifo之间的控制模块,其功能 ...

  3. 基于Verilog HDL 各种实验

    菜鸟做的的小实验链接汇总:           1.基于Verilog HDL 的数字时钟设计 2.乘法器 3.触发器(基本的SR触发器.同步触发器.D触发器) 4.基于Verilog HDL的ADC ...

  4. 基于AHB总线的master读写设计(Verilog)

    一.AHB总线学习 1. AHB总线结构 如图所示,AHB总线系统利用中央多路选择机制实现主机与从机的互联问题.从图中可以看出,AHB总线结构主要可分为三部分:主机.从机.控制部分.控制部分由仲裁器. ...

  5. 基于Verilog HDL 的数字时钟设计

    基于Verilog HDL的数字时钟设计 一.实验内容:     利用FPGA实现数字时钟设计,附带秒表功能及时间设置功能.时间设置由开关S1和S2控制,分别是增和减.开关S3是模式选择:0是正常时钟 ...

  6. 基于Verilog的奇数偶数小数分频器设计

    今天呢,由泡泡鱼工作室发布的微信公共号“硬件为王”(微信号:king_hardware)正式上线啦,关注有惊喜哦.在这个普天同庆的美好日子里,小编脑洞大开,决定写一首诗赞美一下我们背后伟大的团队,虽然 ...

  7. 基于modelsim-SE的简单仿真流程—上

    基于modelsim-SE的简单仿真流程 编写RTL功能代码 要进行功能仿真,首先得用需要仿真的模块,也就是RTL功能代码,简称待测试的模块,该模块也就是在设计下载到FPGA的电路.一个电路模块想要有 ...

  8. berkerly db 中简单的读写操作(有一些C的 还有一些C++的)

    最近在倒腾BDB,才发现自己确实在C++这一块能力很弱,看了一天的api文档,总算是把BDB的一些api之间的关系理清了,希望初学者要理清数据库基本知识中的环境,句柄,游标的基本概念,这样有助于你更好 ...

  9. 基于SMB协议的共享文件读写 博客分类: Java

    基于SMB协议的共享文件读写 博客分类: Java   一.SMB协议 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445. 服务器信息块(SMB)协议是一种IBM协议,用于在计 ...

随机推荐

  1. 【winform】DataGridView控件[表格]

    一.表格 0.从数据库获取一个表在DataGridView中显示: 数据库查询的方式大同小异,重点是如何把数据显示到控件中的方法,通过dataset作为数据的中继,把Adapter中的数据存到data ...

  2. JavaScript Dom 绑定事件

    JavaScript  Dom 绑定事件 // 先获取Dom对象,然后进行绑定 document.getElementById('xx').onclick document.getElementByI ...

  3. Linux统计系统文件类型出现的次数

    awk '/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}' /etc/fstab /^UUID/ 匹配确定行范围

  4. selenium+java利用AutoIT实现文件上传

    转自https://www.cnblogs.com/yunman/p/7112882.html?utm_source=itdadao&utm_medium=referral 1.AutoIT介 ...

  5. P4512 【模板】多项式除法

    思路 多项式除法板子 多项式除法 给出\(A(x)\)和\(B(x)\),求一个\(n-m\)次的多项式\(D(x)\),一个\(m-1\)次多项式\(R(x)\),满足 \[ A(x)=B(x)D( ...

  6. [译]RabbitMQ教程C#版 - "Hello World"

    先决条件 本教程假定 RabbitMQ 已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助 如果您在阅读本教程时遇到困难, ...

  7. 【Bilinear interpolation】双线性插值详解(转)

           最近在做视频拼接的项目,里面用到了图像的单应性矩阵变换,在最后的图像重映射,由于目标图像的坐标是非整数的,所以需要用到插值的方法,用的就是双线性插值,下面的博文主要是查看了前辈的博客对双 ...

  8. 解决Intellij IDEA中console窗口中文乱码的问题

    配置完tomcat之后,测试运行时,中文是乱码,如下图(自己忘截图了,图源网络,看水印) 网上其他的修改方法我就不说了,至少我试了一个都没用. 下面两个方法也是网上的,在此总结一下: 1.在idea. ...

  9. C# 绘图

    e.Graphics.DrawLine (绘制一条连接由坐标对指定的两个点的线条) e.Graphics.DrawString (绘制指定位置的文本字符串) e.Graphics.DrawRectan ...

  10. Java线程机制学习

    前面的文章中总结过Java中用来解决共享资源竞争导致线程不安全的几种常用方式: synchronized: ReentrantLock: ThreadLocal: 这些都是在简单介绍了基本用法的基础上 ...