- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于ALTERA提供的FIFO核使用原理
关于ALTERA提供的FIFO核使用原理ALTERA提供了LPM_FIFO参数宏模块,可以在代码中例化使用。
FIFO有两种工作模式:(1)SCFIFO指读写用一个时钟进行同步,可以支持同时读写的功能。(2)DCFIFO指读写使用不同的时钟进行同步,这在设计多时钟系统中相当有用,可用于不同时钟同步信号之间的同步调整。
首先看看DCFIFO模式下的几个比较重要的信号:
[A]在写端,主要有以下几个信号:
?????? (1) data[n-1:0]:写入数据信号总线;
?????? (2) wrreq:写入请求信号,高有效
?????? (2) wrclk:写入同步时钟;
?????? (3) wrfull, wrempty:用于指示写端FIFO为空或者满的状态;
?????? (4) wrusedw[log2(SIZE_FIFO)-1:0] :写入的数据个数,按写入个数递增;
上述信号都与写入时钟rclk同步;
[B]在读端,主要有以下几个信号:
?????? (1) q[n-1:0]:读取数据信号总线;
?????? (2) rdreq:读取请求/确认信号,高有效
?????? (2) rdclk:读取同步时钟;
?????? (3) rdfull, rdempty:用于指示读端FIFO为空或者满的状态;
?????? (4) rdusedw[log2(SIZE_FIFO)-1:0] :读取的数据个数,按读取顺序递减;
FIFO主要有两种工作模式:(1) Legacy?mode(Legacy synchronous FIFO?mode?)
此模式下参数lpm_showahead为OFF,只有当rdreq为高时,q才有数据读出,rdreq为低时没有数据。
在Legacy mode,读端的rdreq信号作为读取FIFO的请求信号(REQ),读取数据在rdreq置位后的第二个时钟周期有效。(2) Show-ahead?mode(Show-ahead synchronous FIFO mode)
在此模式下,只要有数写入,就马上读出第一个数,但是不读第二个数,当rdreq为高时继续读取。
在Show-ahead mode,读端的rdreq信号作为读取FIFO的确认信号(ACK),读取数据在rdreq置位后立即有效,不要额外的读取周期。下面分别给出Legacy mode和Show-ahead mode的读写时序:
[A] Legacy mode
[B] Show-ahead mode?
?
由上述时序可以看出两种模式的区别。
值得注意的是:读端在读取数据的时候,必须等待写端数据准备好,即rdempty为低之后开始读取数据,为高期间表明FIFO状态为空,写端写入数据未有效。
相应的在写端如果wrfull为高,则表明FIFO状态以满,不能再写入数据,此时写入的数据无效。
下面给出一个FIFO操作的具体实例:完成将10MHz同步输入的总线同步缓冲到72MHz+6MHz的同步组合输出。
`define PLME_RESET_IND (4b1001)
`define CCA_RESET_IND (4b1010)
`define TxSTARTreq_IND (4b1011)
`define TxMPDU_IND (4b1100)
module CNGI_PLCP2TxPHY_SyncProc(
reset, //poewer on reset
PLCP2TxPHY_clk,
PLCP2TxPHY_ind,
PLCP2TxPHY_msg,
//
clk, //Tx PHY Local(此处不区分原语和MPDU直接采用数据的基带时钟读取)
clk_ena,
//
LENGTH,
syncPLCP2TxPHY_ind,
syncPLCP2TxPHY_msg
);
//
input wire reset;
input wire PLCP2TxPHY_clk;
input wire [3:0] PLCP2TxPHY_ind;
input wire [7:0] PLCP2TxPHY_msg;
//
input wire clk,clk_ena;
input wire [11:0] LENGTH;
//
output wire [3:0] syncPLCP2TxPHY_ind;
output wire [7:0] syncPLCP2TxPHY_msg;
//Generate wrreq
reg fifo_wrreq;
reg [11:0] fifo_wrdata;
always @(posedge PLCP2TxPHY_clk or posedge reset)be
文档评论(0)