verilogfifo怎么写

1.异步fifo要求用verilog编写

module FIFO(Wr_Clk,//write FIFO clock nWr, //write FIFO signal Din, //write FIFO data Rd_Clk,//read FIFO clock nRd, //read FIFO signal Dout, //read FIFO data Full, // 1 = FIFO full Empty);// 1 = FIFO empty input Wr_Clk, nWr, Rd_Clk, nRd; input [Bsize-1:0] Din; output [Bsize-1:0] Dout; output Full, Empty; reg Full, Empty; reg [Bsize-1:0] Buff [Dsize-1:0]; reg [Asize:0] Wr_Addr_Bin, Rd_Addr_Bin; reg [Asize:0] Sync_Wr_Addr0_Gray, Sync_Wr_Addr1_Gray, Sync_Wr_Addr2_Gray; reg [Asize:0] Sync_Rd_Addr0_Gray, Sync_Rd_Addr1_Gray, Sync_Rd_Addr2_Gray; wire [Asize-1:0] FIFO_Entry_Addr, FIFO_Exit_Addr; wire [Asize:0] Wr_NextAddr_Bin, Rd_NextAddr_Bin; wire [Asize:0] Wr_NextAddr_Gray, Rd_NextAddr_Gray; wire Asyn_Full, Asyn_Empty; parameter Dsize = 256, Asize = 8, Bsize = 8; initial begin Full = 0; Empty = 1; Wr_Addr_Bin = 0; Rd_Addr_Bin = 0; Sync_Wr_Addr0_Gray = 0; Sync_Wr_Addr1_Gray = 0; Sync_Wr_Addr2_Gray = 0; Sync_Rd_Addr0_Gray = 0; Sync_Rd_Addr1_Gray = 0; Sync_Rd_Addr2_Gray = 0; end////////////////////FIFO数据的写入与输出////////////////////////////////////// assign FIFO_Exit_Addr = Rd_Addr_Bin[Asize-1:0]; assign FIFO_Entry_Addr = Wr_Addr_Bin[Asize-1:0]; assign Dout = Buff[FIFO_Exit_Addr]; always @ (posedge Wr_Clk) begin if (~nWr & ~Full) Buff[FIFO_Entry_Addr] > 1) ^ Wr_NextAddr_Bin; assign Rd_NextAddr_Gray = (Rd_NextAddr_Bin >> 1) ^ Rd_NextAddr_Bin; always @ (posedge Wr_Clk) begin Wr_Addr_Bin 评论0 0 0。

2.异步fifo要求用verilog编写

module FIFO(Wr_Clk,//write FIFO clock nWr, //write FIFO signal Din, //write FIFO data Rd_Clk,//read FIFO clock nRd, //read FIFO signal Dout, //read FIFO data Full, // 1 = FIFO full Empty);// 1 = FIFO empty input Wr_Clk, nWr, Rd_Clk, nRd; input [Bsize-1:0] Din; output [Bsize-1:0] Dout; output Full, Empty; reg Full, Empty; reg [Bsize-1:0] Buff [Dsize-1:0]; reg [Asize:0] Wr_Addr_Bin, Rd_Addr_Bin; reg [Asize:0] Sync_Wr_Addr0_Gray, Sync_Wr_Addr1_Gray, Sync_Wr_Addr2_Gray; reg [Asize:0] Sync_Rd_Addr0_Gray, Sync_Rd_Addr1_Gray, Sync_Rd_Addr2_Gray; wire [Asize-1:0] FIFO_Entry_Addr, FIFO_Exit_Addr; wire [Asize:0] Wr_NextAddr_Bin, Rd_NextAddr_Bin; wire [Asize:0] Wr_NextAddr_Gray, Rd_NextAddr_Gray; wire Asyn_Full, Asyn_Empty; parameter Dsize = 256, Asize = 8, Bsize = 8; initial begin Full = 0; Empty = 1; Wr_Addr_Bin = 0; Rd_Addr_Bin = 0; Sync_Wr_Addr0_Gray = 0; Sync_Wr_Addr1_Gray = 0; Sync_Wr_Addr2_Gray = 0; Sync_Rd_Addr0_Gray = 0; Sync_Rd_Addr1_Gray = 0; Sync_Rd_Addr2_Gray = 0; end////////////////////FIFO数据的写入与输出////////////////////////////////////// assign FIFO_Exit_Addr = Rd_Addr_Bin[Asize-1:0]; assign FIFO_Entry_Addr = Wr_Addr_Bin[Asize-1:0]; assign Dout = Buff[FIFO_Exit_Addr]; always @ (posedge Wr_Clk) begin if (~nWr & ~Full) Buff[FIFO_Entry_Addr] <= Din; else Buff[FIFO_Entry_Addr] <= Buff[FIFO_Entry_Addr]; end///////////////////FIFO读写的地址生成器/////////////////////////////////////// assign Wr_NextAddr_Bin = (~nWr&~Full) ?Wr_Addr_Bin[Asize:0]+1:Wr_Addr_Bin[Asize:0]; assign Rd_NextAddr_Bin = (~nRd&~Empty)?Rd_Addr_Bin[Asize:0]+1:Rd_Addr_Bin[Asize:0]; assign Wr_NextAddr_Gray = (Wr_NextAddr_Bin >> 1) ^ Wr_NextAddr_Bin; assign Rd_NextAddr_Gray = (Rd_NextAddr_Bin >> 1) ^ Rd_NextAddr_Bin; always @ (posedge Wr_Clk) begin Wr_Addr_Bin <= Wr_NextAddr_Bin; Sync_Wr_Addr0_Gray <= Wr_NextAddr_Gray; end always @ (posedge Rd_Clk) begin Rd_Addr_Bin <= Rd_NextAddr_Bin; Sync_Rd_Addr0_Gray <= Rd_NextAddr_Gray; end///////////////////采用双锁存器把异步信号同步起来///////////////////////////// always @ (posedge Wr_Clk) begin Sync_Rd_Addr2_Gray <= Sync_Rd_Addr1_Gray;//读信号同步到写时钟 Sync_Rd_Addr1_Gray <= Sync_Rd_Addr0_Gray; end always @ (posedge Rd_Clk) begin Sync_Wr_Addr2_Gray <= Sync_Wr_Addr1_Gray;//写信号同步到读时钟 Sync_Wr_Addr1_Gray <= Sync_Wr_Addr0_Gray; end/////////////////将产生的Full信号和Empty信号同步的各自的时钟域上////////////// assign Asyn_Empty = (Rd_NextAddr_Gray==Sync_Wr_Addr2_Gray); assign Asyn_Full = (Wr_NextAddr_Gray=={~Sync_Rd_Addr2_Gray[Asize:Asize-1], Sync_Rd_Addr2_Gray[Asize-2:0]}); always @ (posedge Wr_Clk) begin Full <= Asyn_Full; end always @ (posedge Rd_Clk) begin Empty <= Asyn_Empty; end//////////////////////////////////////////////////////////////////////////////endmodule。

3.求一个最简单的fpga fifo例子

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity my_fifo is

port(clk:in std_logic;-----时钟信号

clr:in std_logic;-----清零端

wr:in std_logic;------写信号

rd:in std_logic;------读信号

din:in std_logic_vector(7 downto 0);--------数据写入端

dout:out std_logic_vector(7 downto 0);-----数据读出端

empty:out std_logic;-------存储器为空信号

full:out std_logic);---------存储器为满信号

end;

architecture one of my_fifo is

type memory is array(0 to 7)of std_logic_vector(7 downto 0);-----定义存储空间

signal a,b:integer range 0 to 7;----地址标志位

signal data:memory;

begin

process(clk,clr)

variable x,y:integer range 0 to 7;

begin

if clr='0' then

dout'0');

x:=0;y:=0;

empty

verilogfifo怎么写

转载请注明出处育才学习网 » verilogfifo怎么写

知识

验字五笔怎么写

阅读(210)

本文主要为您介绍验字五笔怎么写,内容包括字五笔怎么打字,验字用五笔怎么打急~,验字用五笔怎么打急~。字五笔:PBF[拼音] [zì] [释义] 1.用来记录语言的符号:文~。汉~。~符。~母。~典。~句。~里行(háng)间。~斟句酌。

知识

国外网站上买东西地址怎么写

阅读(232)

本文主要为您介绍国外网站上买东西地址怎么写,内容包括谁知道在国外网站上买东西怎么写地址,如何从国外的网站上买东西,地址该写英文还中文呢,会用什么快递寄,在国外的网上购物如何写地址。++付款。好多国家只在本国销售,只接受本国货币,甚至

知识

3月24日英文怎么写

阅读(268)

本文主要为您介绍3月24日英文怎么写,内容包括3月24日用英语怎么说,3月24号英文怎么说,2014年3月24用英语怎么写。3月24日的英文翻译_百度翻译3月24日March 24th march_百度翻译march 英[mɑ:tʃ] 美[mɑ:rtʃ] [例

知识

大学周学习计划怎么写

阅读(239)

本文主要为您介绍大学周学习计划怎么写,内容包括大学学习计划怎么写,大学具体的学习计划要怎么写,大学学习计划书怎么样写。不断加强专业学习,循序渐进的过程完成学习任务。通过网络网上课件和学习管理平台的学习。在课前,要按质按量的完成老

知识

自已的学习计划怎么写

阅读(214)

本文主要为您介绍自已的学习计划怎么写,内容包括我的学习计划和目标怎么写,学习计划怎么写,个人学习计划书怎么写,格式。新的学期即将到来,为了使下学期的学习成绩进步、各科成绩优异、不偏科,在此做新学期的打算,如下:做好预习。预习是学好各

知识

这里的繁体字怎么写

阅读(193)

本文主要为您介绍这里的繁体字怎么写,内容包括繁体字的这里怎么写的,繁体字的这里怎么写的,此的繁体字怎么写。什没有繁体字,么的繁体字是麽 什么是一个汉语词语,拼音是shén me,表示疑问,是对名词的提问用语,通常表示对事物的提问。见《坛经·

知识

店铺关门半个月怎么写

阅读(203)

本文主要为您介绍店铺关门半个月怎么写,内容包括店铺有事关门一天,怎么写公告,店铺有事关门一天怎么写公告,门店关门七天怎样写通知以告知顾客。店铺有事关门一天的公告有如下几种写法:各位客人:因今天有事,关店一天,明日继续营业,谢谢光临。 通

知识

大数日记怎么写

阅读(218)

本文主要为您介绍大数日记怎么写,内容包括大树的日记怎么写,小学数学日记怎样写大数我认识手抄报,生活中的大数,日记150字,关于生活的或感想150字。《大树的日记》我是一棵大树,一直快乐的生活在茂密的森林里,有小鸟站在我细细的小手上唱歌,有

知识

模联动议怎么写

阅读(215)

本文主要为您介绍模联动议怎么写,内容包括模联中的动议文件怎么写,模联中的动议文件怎么写,paraphrase怎么写。paraphrase释义,意译,用英文解释英文。“Paraphrase”就是运用同类词语的替换或句型的变换解释句或段的意义。Paraph

知识

应聘特长一行怎么写

阅读(245)

本文主要为您介绍应聘特长一行怎么写,内容包括应聘特长怎么写,个人简历中的特长怎么写,简历中的特长怎么写。特长是指你在某一方面有突出的能力,比如演讲、公文写作、计算机能力等等,我认为最好写跟你工作相关的,如果你写唱卡拉ok,当然这也是你

知识

小孩要认一树为寄爷书帖怎么写

阅读(266)

本文主要为您介绍小孩要认一树为寄爷书帖怎么写,内容包括小孩祭拜古树的祭拜文怎么写,望指教,小儿认干爹文书怎么写,农村小孩认柏树怎么写。祈求风顺拜干亲 “拜干亲”就是认义父、义母,是流行全国的一种保育习俗。在北方叫“认干爹,干妈”;在

知识

大写的g倒过来怎么写

阅读(345)

本文主要为您介绍大写的g倒过来怎么写,内容包括大写G怎么写最规范,大写的G怎么写笔顺,大写的G左右反过来在电脑上怎么按。大写G由一笔完成,在三线格中由最上面一根线下面一些起笔,画椭圆,到由上至下第三根线时,转弯,直到接触超过第二根线一点,再

知识

团支部工作记录本怎么写

阅读(573)

本文主要为您介绍团支部工作记录本怎么写,内容包括团支部发展记录要怎么写,《团支部工作手册》应该怎样填写,团支部发展记录要怎么写。每个团支部都应该有一本属于自己团支部的《团支部发展记录》。这是进一步加强团支部建设的载体,也是团的

知识

个人收款委托书怎么写范文

阅读(342)

本文主要为您介绍个人收款委托书怎么写范文,内容包括个人委托个人的收款委托书怎么写,收款委托书怎么写,单位委托个人收款的委托书怎么写。最低0.27元开通文库会员,查看完整内容> 原发布者:文海轻舟98 个人代收款委托书范本 个人代收款委托书

[/e:loop]