ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:485.44KB ,
资源ID:7014153      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7014153.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(异步FIFO设计.docx)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

异步FIFO设计.docx

1、异步FIFO设计 2011.6.22 摘要 本文采用格雷码设计了一个异步FIFO,经过DC综合的结果如下: 时钟频率:1.1GHz 面积: 10744.447um2 功耗: 7.791mw 目 录 1. 异步FIFO的设计 2 1.1 异步FIFO简介 2 1.2 FIFO的参数 2 1.3 FIFO的设计原理 2 1.4 FIFO的设计模块 6 1.5 用modelsim仿真FIFO 11 1.6 用DC对FIFO进行综合 13 2.参考文献 1

2、5 1. 异步FIFO的设计 1.1 异步FIFO简介 FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。 根均FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是

3、互相独立的。 异步FIFO(Asynchronous FIFO),一般用于不同时钟域之间的数据传输,比如FIFO的一端连接频率较低的AD数据采样信号,另一端与计算机的频率较高的PCI总线相连。另外,对于不同宽度的数据接口也可以用AFIFO,例如单片机为8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用AFIFO来达到数据匹配的目的。 由于实际中,异步FIFO比较常见。为了便于描述,在后面的章节中将异步FIFO简称为FIFO. 1.2 FIFO的参数 FIFO的宽度: 进行一次读写操作的数据的位宽。 FIFO的深度: 双口存储器中能容纳的数据的总数。 满

4、标志: FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出。 空标志: FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出。 读时钟: 读操作所遵循的时钟,在每个时钟沿来临时读数据。 写时钟: 写操作所遵循的时钟,在每个时钟沿来临时写数据。 读指针: 指向下一个读出地址。读完后自动加1。 写指针: 指向下一个要写入的地址的,写完自动加1。 读写指针其实就是读写memory的地址

5、只不过这个地址不能任意选择,而是连续的。 1.3 FIFO的设计原理 整体的框图如下: 图1.1 FIFO的整体电路图 1.3.1 FIFO的读写指针 FIFO可以看成是先进新出的缓冲区,它不像普通的存储器那样,有专门的地址信号。它只能根据地址,顺序地读写缓冲区。所以需要有两个读写指针。这里定义如下: wptr: 写数据的指针 rptr: 读数据的指针 每读/写完一个数据,读/写指针就会加1,指向下一个待读/写的位置。 1.3.2 同步器的设计 为了产生空/满标志,需要对2个读/写指针进行比较。由于FIFO的读/写时钟信号,来自2个不同的时钟域,所以先要

6、将这2个指针同步到一个时钟域。这里采用两级D触发器级联来构成同步器。 1.3.3 格雷码计数器 采用二进制码对地址指针进行计数时,从一个计数值变到下一个计数值时,可能有多位发生跳变,如从7à8变化时,低位由0111à1000,这样同步器在采样数据时,可能会发生错误。由于采用格雷码计数时,每次只有1位发生跳变,这样使亚稳态发生错误的可能性大大减小了。 1.3.4 空标志的产生 由于读/写指针,总是指向FIFO的memory中下一个要读/写的位置。只有在读/写复位的时候,读/写指针才回到0位置。复位后,随着数据的读出/写入,读/写指针指向的地址逐渐增加。如果读的速度比较快,当读指针

7、赶上写指针,即读指针与写指针指向同一个位置时,输出的空标志有效。如下图所示: 图1.2 FIFO的空/满标志 1.3.5 满标志的产生 满标志的产生,基于这样的原理:即“写指针比空指针多绕了一圈”后,又指向了空指针所指向的位置。由上可知,空标志的产生,也是由于读/写指针指向了同一位置。那怎么来区分,当读/写指针指向同一位置时,FIFO是满,还是空呢? 这里,采用增加一位地址位的方法,来区分满标志和空标志。假设FIFO的深度为16,那么采用5位的读/写地址指针。地址的低4位,用来对寻址memory,读/写指针的最高位用来判断FIFO为空还是为满。当读/写指针的低4位相同时,

8、如果最高位也相同,那么空标志有效,否则满标志有效。 由于格雷码具有一个特性:关于中间的计数值对称。如果从格雷码的中间划开,把它分成2段。分别从上往下看,会发现在对应的位置,只有最高的2位是完全相反,而其余的低位部分则是相同的。因此,当读/写指针的最高2位完全相反,而其余的低位完全相同时,满标志有效(“读指针比写指针多绕了一圈”)。具体如下图所示: 图1.3 格雷码的对称特性 1.3.6 格雷码计数器 如果读/写数据的使能信号(rinc/winc)有效,在下一个读/写时钟的上升沿到来时,会从(对)memory读出/写入一个数据,并且相应的读/写指针会加1。由于习

9、惯上用二进制码来寻址memory,而且用二进制码能很方便地进行累积操作,所以这里以二进制码为主,并将二进制码转换为格雷码,以比较读/写指针来产生空/满标志位。 二进制码可以通过以下方式转换成格雷码: gray = (bin >> 1) ^ bin 其中,gray表示格雷码,bin表示二进制码。 如,设一个5位的二进制码为B[4:0],它对应的格雷码为G[4:0],则 G[4] = B[4] G[3] = B[3] ^ B[3] G[2] = B[2] ^ B[2] G[1] = B[1] ^ B[1] G[0] = B[0] ^ B[0] 具体如下图所示:

10、 图1.4 比较指针和寻址指针的产生电路 1.4 FIFO的设计模块 整个FIFO包括1个顶层模块和5个子模块。 1.4.1 子模块fifomem 这个子模块,主要实现对FIFO的memory进行操作。如果写使能信号(winc)有效,且FIFO满标志(wfull)无效,则在下一个写时钟(wclk)的上升沿到来时,将数据(wdata)写入到memory中写地址(waddr)指针所指向的位置。同时,只要给出读地址(raddr),就可以从memory中读出数据(rdata),与读时钟(rclk)无关。相应的代码如下所示: module fifome

11、m #(parameter DATASIZE = 8, // Memory data word width parameter ADDRSIZE = 4) // Number of mem address bits (output [DATASIZE-1:0] rdata, input [DATASIZE-1:0] wdata, input [ADDRSIZE-1:0] waddr, raddr, input wclken, wfull, wclk); /

12、/ RTL Verilog memory model localparam DEPTH = 1<

13、钟域中。相应的代码如下: module sync_r2w #(parameter ADDRSIZE = 4) (output reg [ADDRSIZE:0] wq2_rptr, input [ADDRSIZE:0] rptr, input wclk, wrst_n); reg [ADDRSIZE:0] wq1_rptr; always @(posedge wclk or negedge wrst_n) if (!wrst_n) {wq2_rptr,wq1_rptr} <= 0; else

14、 {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr}; endmodule 1.4.3 子模块sync_w2r 这个子模块,也采用2个D触发器的级联,将格雷码表示的读指针,同步到写时钟域中。相应的代码如下: module sync_w2r #(parameter ADDRSIZE = 4) (output reg [ADDRSIZE:0] rq2_wptr, input [ADDRSIZE:0] wptr, input rclk, rrst_n); reg [ADDRSIZE:0] rq1_wpt

15、r; always @(posedge rclk or negedge rrst_n) if (!rrst_n) {rq2_wptr,rq1_wptr} <= 0; else {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr}; Endmodule 1.4.4 子模块rptr_empty 这个子模块的输入包括:读使能信号(rinc)、读时钟(rclk)、读复位信号(rrst_n,低电平有效)。输出包括:读寻址指针(raddr)、读比较指针(rptr)。其中读寻址指针为二进制码,读比较指针为

16、格雷码,且读寻址指针比读比较指针少一位。可以参照图1.4,相关的代码如下: module rptr_empty #(parameter ADDRSIZE = 4) (output reg rempty, output [ADDRSIZE-1:0] raddr, output reg [ADDRSIZE :0] rptr, input [ADDRSIZE :0] rq2_wptr, input rinc, rclk, rrst_n); reg [ADDRSIZE:0] rbin; wire [ADDR

17、SIZE:0] rgraynext, rbinnext; always @(posedge rclk or negedge rrst_n) if (!rrst_n) {rbin, rptr} <= 0; else {rbin, rptr} <= {rbinnext, rgraynext}; // Memory read-address pointer (okay to use binary to address memory) assign raddr = rbin[ADDRSIZE-1:0]; as

18、sign rbinnext = rbin + (rinc & ~rempty); assign rgraynext = (rbinnext>>1) ^ rbinnext; //--------------------------------------------------------------------------------------- // FIFO empty when the next rptr == synchronized wptr or on reset //------------------------------------------

19、 assign rempty_val = (rgraynext == rq2_wptr); always @(posedge rclk or negedge rrst_n) if (!rrst_n) rempty <= 1'b1; else rempty <= rempty_val; endmodule 1.4.5 子模块rptr_empty 这个子模块的输入包括:写使能信号(winc)、写时钟(wclk)、写复位信号(wrs

20、t_n,低电平有效)。输出包括:写寻址指针(waddr)、写比较指针(wptr)。其中读寻址指针为二进制码,读比较指针为格雷码,且读寻址指针比读比较指针少一位。可以参照图1.4,相关的代码如下: module wptr_full #(parameter ADDRSIZE = 4) (output reg wfull, output [ADDRSIZE-1:0] waddr, output reg [ADDRSIZE :0] wptr, input [ADDRSIZE :0] wq2_rptr, input winc, wc

21、lk, wrst_n); reg [ADDRSIZE:0] wbin; wire [ADDRSIZE:0] wgraynext, wbinnext; // GRAYSTYLE2 pointer always @(posedge wclk or negedge wrst_n) if (!wrst_n) {wbin, wptr} <= 0; else {wbin, wptr} <= {wbinnext, wgraynext}; // Memory write-address pointer (o

22、kay to use binary to address memory) assign waddr = wbin[ADDRSIZE-1:0]; assign wbinnext = wbin + (winc & ~wfull); assign wgraynext = (wbinnext>>1) ^ wbinnext; //------------------------------------------------------------------ // Simplified version of the three necessary full-tes

23、ts: // assign wfull_val=((wgnext[ADDRSIZE] !=wq2_rptr[ADDRSIZE] ) && // (wgnext[ADDRSIZE-1] !=wq2_rptr[ADDRSIZE-1]) && // (wgnext[ADDRSIZE-2:0]==wq2_rptr[ADDRSIZE-2:0])); //------------------------------------------------------------------ assign wfull_val = (wgraynext

24、{~wq2_rptr[ADDRSIZE:ADDRSIZE-1], wq2_rptr[ADDRSIZE-2:0]}); always @(posedge wclk or negedge wrst_n) if (!wrst_n) wfull <= 1'b0; else wfull <= wfull_val; endmodule 1.4.6 顶层模块afifo 这个顶层模块,主要完成5个子模块例化和互联。可以参照图1.1,相关的代码如下: m

25、odule afifo #(parameter DSIZE = 8, parameter ASIZE = 4) (output [DSIZE-1:0] rdata, output wfull, output rempty, input [DSIZE-1:0] wdata, input winc, wclk, wrst_n, input rinc, rclk, rrst_n); wire

26、[ASIZE-1:0] waddr, raddr; wire [ASIZE :0] wptr, rptr, wq2_rptr, rq2_wptr; sync_r2w sync_r2w (.wq2_rptr(wq2_rptr), .rptr(rptr), .wclk(wclk), .wrst_n(wrst_n)); sync_w2r sync_w2r (.rq2_wptr(rq2_wptr), .wptr(wptr), .rclk(rclk), .rrst_n(rrst_n)); fifomem #(DSIZ

27、E, ASIZE) fifomem (.rdata(rdata), .wdata(wdata), .waddr(waddr), .raddr(raddr), .wclken(winc), .wfull(wfull), .wclk(wclk)); rptr_empty #(ASIZE) rptr_empty (.rempty(rempty), .raddr(raddr), .rptr(rptr), .rq2_wptr(rq2_wptr), .rinc(rinc), .rclk(rclk),

28、 .rrst_n(rrst_n)); wptr_full #(ASIZE) wptr_full (.wfull(wfull), .waddr(waddr), .wptr(wptr), .wq2_rptr(wq2_rptr), .winc(winc), .wclk(wclk), .wrst_n(wrst_n)); endmodule 1.5 用modelsim仿真FIFO 1.5.1编写测试代码 根据前面的顶层模块afifo,编写测试代码如下: `timescale 1ns/1ns module test

29、 reg [7:0] wdata; reg winc; reg wclk; reg wrst_n; reg rinc; reg rclk; reg rrst_n; wire [7:0] rdata; wire wfull; wire rempty; integer i; always begin #50 wclk = 1; #50 wclk = 0; end

30、 always begin #100 rclk = 1; #100 rclk = 0; end initial begin wrst_n = 0; rrst_n = 0; rinc = 0; winc = 0; wclk = 0; rclk = 0; wdata = 0; i = 0; #400; wrst_n = 1;

31、 rrst_n = 1; for (i = 0; i < 16; i = i + 1) begin repeat (1) @ (posedge wclk) #20 winc = 1; wdata = i; end repeat (1) @ (posedge wclk) #20 winc = 0; for (i = 0; i < 16; i = i + 1) begin repeat (1) @ (

32、posedge rclk) #20 rinc = 1; end repeat (1) @ (posedge rclk) #20 rinc = 0; end afifo afifo (.rdata(rdata), .wdata(wdata), .wclk(wclk), .rclk(rclk), .wrst_n(wrst_n), .rrst_n(rrst_n)

33、 .wfull(wfull), .rempty(rempty), .winc(winc), .rinc(rinc) ); endmodule 1.5.2仿真波形 当写时钟(wclk)和读时钟(rclk)的周期相同,且都为50ns时,波形如下: 图1.5 仿真波形--读写时钟的周期都为50ns 当写时钟(wclk)周期为100ns,读时钟(rclk)周期为50ns时,波形如下: 图1.6 仿真波形--读/写时钟的

34、周期都为50ns/100ns 当写时钟(wclk)周期为50ns,读时钟(rclk)周期为100ns时,波形如下: 图1.6 仿真波形--读/写时钟的周期都为100ns/50ns 1.5.3仿真结果 根据前面的3种仿真波形,可以看出所设计的FIFO,能满足功能要求。 1.6 用DC对FIFO进行综合 1.6.1编写DC的启动文件 #.synopsys_dc.setup for afifo #modified by He Zhongzhu #June 22nd, 2011 set search_path ". $search_path lib rtl sc

35、ripts mapped unmapped" set target_library "tt_1v20_25c.db" set link_library " * $target_library dw_foundation.sldb" set symbol_library " smic13g.sdb " #set synthesis_library "dw_foundation.sldb standard.sldb" set cache_write ~/ set cache_read $cache_write #

36、 specify directory for intermediate files from analyze define_design_lib DEFAULT -path ./analyzed # suppress Driving cell warning suppress_message {UID-401 DDB-24} set verilogout_no_tri true define_name_rules BORG -allowed {A-Za-z0-9_} -first_restricted "_" -last_restricted "_" -max_length

37、30 set verilogout_no_tri true # specify varibles set dw_prefer_mc_inside true set sh_enable_line_editing true 1.6.2编写DC的约束文件 #top.con for afifo #created by zzhe #June 22th, 2011 reset_design #create_clock -period 5 -name vclk;#virtual clock create_clock -period 0.9 [get_ports wclk

38、] create_clock -period 0.9 [get_ports rclk] #set_uncertain_delay -setup [get_clocks vclk] #set_clock_latency -source -max [get_clocks vclk] #set_clock_transition [get_clocks vclk] set MAX_LOAD [load_of tt_1v20_25c/NAND2BX2M/AN] set_driving_cell -lib_cell INVX16M [all_inputs] set_input

39、delay -max 0 -clock wclk [remove_from_collection [get_ports "w*"] \ [get_ports "wfull wclk"]] set_input_delay -max 0 -clock rclk [remove_from_collection [get_ports "r*"] \ [get_ports "rempty rdata rclk"]] set_output_delay -max 0 -clock wclk [get_ports wfull] set_output_delay -max 0 -clock

40、rclk [get_ports "rempty rdata"] set_load [expr $MAX_LOAD*15] [all_outputs] set_max_area 0 #set auto_wire_load_selection #set_operating_conditions -max "" set_max_capacitance [expr $MAX_LOAD*10] [get_designs *] alias h history alias rc "report_constraints -all_violators" alias rt repo

41、rt_timing alias ra report_area alias rp report_power 1.6.3 DC的综合结果 采用design_vision进行综合,得到的综合结果如下: 时钟频率:1.1GHz 面积: 10744.447um2 功耗: 7.791mw 2.参考文献 [1] Simulation and Synthesis Techniques for Asynchronous FIFO Design.pdf [2 ]Jan M.Rabaey, Digital Integrated Circuits, A Design Perspective 15

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服