当前位置: 首页 > news >正文

公司企业邮箱网易seo推广排名软件

公司企业邮箱网易,seo推广排名软件,网站开发用户分析,阿里云网站建设和部署框架一、FIFO概述 1、FIFO的定义 FIFO是英文First-In-First-Out的缩写,是一种先入先出的数据缓冲器,与一般的存储器的区别在于没有地址线, 使用起来简单,缺点是只能顺序读写数据,其数据地址由内部读写指针自动加1完成&…

一、FIFO概述

1、FIFO的定义

        FIFO是英文First-In-First-Out的缩写,是一种先入先出的数据缓冲器,与一般的存储器的区别在于没有地址线, 使用起来简单,缺点是只能顺序读写数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。

2、FIFO的作用

(1)跨时钟域的数据传输

(2)对不同宽度的数据进行位宽转换

(3)数据缓存

3、FIFO的分类

        根据FIFO工作的时钟域的不同,可以将FIFO分为以下两类

        (1)同步FIFO:读时钟和写时钟为同一个时钟,在时钟沿来临时同时发生读写操作。常用于对不同宽度的数据进行位宽转换

        (2)异步FIFO:读写时钟不一致,读写操作是互相独立的。常用于跨时钟域的数据传输

4、FIFO的一些重要参数

(1)FIFO宽度:指的是FIFO读写的数据位,就像MCU有8位和16位,ARM 32位等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度是可以自己定义的。

(2)FIFO深度:指的是FIFO可以存储多少个N位的数据(假设FIFO宽度为N)。

(3)满标志(full):FIFO已满或将要满时由FIFO送出的状态信号,以阻止FIFO的写操作,避免数据溢出。

(4)空标志(empty):FIFO已空或将要空时由FIFO送出的状态信号,以阻止FIFO的读操作,避免数据读空。

(5)读时钟:读操作的时钟,在每个时钟沿来临时读数据。

(6)写时钟:写操作的时钟,在每个时钟沿来临时写数据。

(7)读指针:指向下一个要读出的地址,读完后自动加1。

(8)写指针:指向下一个要写入的地址,写完后自动加1。

读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。

二、同步FIFO

        FIFO设计的关键在于读写指针的设计和生成可靠的空满信号

1、读写指针

  • 读指针:总是指向下一个将要读取的单元,复位时指向第一个单元(编号为0)。
  • 写指针:总是指向当前要被读出的数据,复位时指向第一个单元(编号为0)。

2、空/满信号

        FIFO设计中最重要的是空(Empty)、满(Full)信号的判断。

        当第一次读写指针相等时,表明FIFO为空,这种情况发生在复位操作时或者当读指针读出FIFO中最后一个字后,追赶上写指针时,此时读空信号有效:

        当读写指针再次相等时,表明FIFO为满,这种情况发生在,当写指针转了一圈折回来(wrapped around)又追上了读指针:

        两种方式都是以读写指针相等作为判断标志,所以我们需要寻找其它的方法进行判断。

三、计数法实现同步FIFO

        在同步FIFO中,我们可以很容易的使用计数来判断FIFO中还剩下多少可读的数据,从而可以判断空、满

1、verilog实现

//------------------------<计数法设计同步FIFO>----------------------------
module sync_fifo#(  
//-----------------------------<参数定义>---------------------------------parameter FIFO_WIDTH = 16,                          //FIFO宽度parameter FIFO_DEPTH = 16                           //FIFO深度
)(
//-----------------------------<接口定义>---------------------------------input clk,                                          //时钟信号input rst,                                          //复位信号input [FIFO_WIDTH-1:0] din,                         //FIFO输入数据(写数据)input rd_en,                                        //读使能信号 input wr_en,                                        //写使能信号output reg [FIFO_WIDTH-1:0] dout,                   //FIFO输出数据(读数据) output empty,                                       //FIFO空标志 output full,                                        //FIFO满标志output reg [$clog2(FIFO_DEPTH):0] fifo_cnt		    //$clog2是以2为底取对数   
);  //-----------------------------<reg定义>---------------------------------reg [FIFO_WIDTH-1:0] fifo_buffer[FIFO_DEPTH-1:0];	//用二维数组实现RAM	reg [$clog2(FIFO_DEPTH)-1:0] wr_addr;				//写地址(写指针)reg [$clog2(FIFO_DEPTH)-1:0] rd_addr;				//读地址(读指针)                                   //-----------------------------<读操作>-----------------------------------
always@(posedge clk or posedge rst)begin if(rst)rd_addr <= 0;else if(rd_en && !empty)begin                       //读使能有效且FIFO非空rd_addr	<=	rd_addr + 1'd1;                     //读指针递增dout	<=	fifo_buffer[rd_addr];               //fifo读出数据endelse beginrd_addr	<=	rd_addr;                            dout	<=	dout;end
end//-----------------------------<写操作>-----------------------------------
always@(posedge clk or posedge rst)begin if(rst)wr_addr <= 0;else if(wr_en && !full)begin                       //写使能有效且FIFO非满wr_addr	<=	wr_addr + 1'd1;                    //读指针递增fifo_buffer[wr_addr] <= din;                   //数据写入fifoendelse beginwr_addr	<=	wr_addr;                            end
end//-----------------------------<fifo_cnt>-----------------------------------
always@(posedge clk or posedge rst)begin if(rst)fifo_cnt <=	0;else if(wr_en && !full && !rd_en)                   //只写不读且FIFO没有满,fifo_cnt递增fifo_cnt <=	fifo_cnt + 1'd1;  else if(rd_en && !empty && !wr_en)                  //只读不写且FIFO没有空,fifo_cnt递减fifo_cnt <=	fifo_cnt - 1'd1;	                else                                                //同时读写或者不读不写,fifo_cnt不变fifo_cnt <=	fifo_cnt;                           
end//-----------------------------<空/满信号>-----------------------------------
assign full  = (fifo_cnt == FIFO_DEPTH) ? 1'b1 : 1'b0;		//满信号
assign empty = (fifo_cnt == 0) ? 1'b1 : 1'b0;				//空信号endmodule

2、功能测试

`timescale 1ns/1ns
//-----------------------------<计数法同步FIFO测试>---------------------------------
module tb_sync_fifo();parameter WIDTH	= 8;parameter DEPTH	= 8;reg                 clk         ;reg                 rst         ;reg  [WIDTH-1:0]	din    		;reg 				wr_en  		;reg 				rd_en  		;wire [WIDTH-1:0]	dout		;wire 				full        ;wire 				empty       ;wire [$clog2(DEPTH):0]	fifo_cnt;//-----------------------------<测试模块例化>---------------------------------
sync_fifo #(.FIFO_WIDTH	(WIDTH),		 //FIFO宽度.FIFO_DEPTH (DEPTH)          //FIFO深度
)
sync_fifo_u1(.clk		(clk		),.rst		(rst		),.din     	(din 	    ),.rd_en		(rd_en		),.wr_en		(wr_en		),.dout    	(dout	    ),	.empty		(empty		),	.full		(full		),.fifo_cnt	(fifo_cnt	)			
);//-----------------------------<模块测试>---------------------------------
initial beginclk = 1'b0;							//初始时钟为0rst <= 1'b0;						//初始复位din <= 'd0;		wr_en <= 1'b0;		rd_en <= 1'b0;
#10rst <= 1'b1;
#10 rst <= 1'b0;repeat(10)#10 beginwr_en <= 1'b1;rd_en <= 1'b0;din <= $random;                   //生成8位的随机数endrepeat(10)#10 beginwr_en <= 1'b0;rd_en <= 1'b1;end
$finish;
end//------------------------------<设置时钟>----------------------------------------
always #5 clk = ~clk;			endmodule

3、测试结果

http://www.15wanjia.com/news/40929.html

相关文章:

  • wordpress 大于2m的xmseo关键词排名优化方案
  • 日本设计类网站近期网络舆情事件热点分析
  • 解析软件的网站官网seo哪家公司好
  • 小程序会员系统怎么做沈阳关键字优化公司
  • 专门做市场调查的网站郑州网站排名推广
  • 网站建设专业英文app推广
  • 美国惠尔润滑油官方网站游戏优化大师手机版
  • 公司网站建设的要点山东移动网站建设
  • 网站代码 如何做层级关系360排名检测
  • 中国设计网室内seo搜索排名
  • 成都网站建设 Vr功能 卓 公司免费推广渠道有哪些
  • dede网站暂时关闭seo网络推广软件
  • 专门做投票的网站有哪些百度网盘怎么找资源
  • 网站没有友情链接高端网站建设制作
  • 酒店为什么做网站网络营销策划推广公司
  • 有.net源码如何做网站百度网址查询
  • 行政单位网站信息建设政策百度竞价怎么做
  • 做团购网站需要什么资质深圳seo教程
  • 求个网站急急急网络广告营销方案策划内容
  • 下载中心网站关键词优化工具
  • 手机开发网站建设网站模板库官网
  • 淘客软件自动做网站?百度竞价个人开户
  • 网站优化外链百度推广方式有哪些
  • 郑州设计师网站大全seo优化怎么做
  • 网站首页是乱码 其他页面正常福州关键词优化平台
  • 广州app开发外包免费网站seo诊断
  • 衡阳网站seo徐州seo外包
  • 麻辣烫配方教授网站怎么做谷歌搜索优化
  • 深圳网站制作的公司哪家好营销网站定制公司
  • 做旅游网站的方法搜索引擎优化是做什么