![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| FPGA设计中对输入信号寄存的研究 | |||||
作者:Free 文章来源:Free 点击数: 更新时间:2007-12-30 ![]() |
|||||
|
1.输入信号为什么要寄存 一般来说,在全同步设计中,如果信号来自同一时钟域,各模块的输入不需要寄存。只要满足建立时间,保持时间的约束,可以保证在时钟上升沿到来时,输入信号已经稳定,可以采样得到正确的值。但是如果模块需要使用输入信号的跳变沿(比如帧同步信号),千万不要直接这样哦。 always @ (posedge inputs) begin ... end 2.所有信号都需要寄存两拍吗 如果这个输入信号来自异步时钟域(比如FPGA芯片外部的输入),必须寄存两拍。第一拍将输入信号同步化,同步化后的输出可能带来建立/保持时间的冲突,产生亚稳态。需要再寄存一拍,减少(注意是减少)亚稳态带来的影响。 如果这个输入信号来自于同一时钟域且需要用到跳变沿,需要寄存一拍。否则时序报告多半会报clock skew > data delay,造成建立/保持时间的冲突。 总而言之,三条原则: 1.全局时钟的跳变沿最可靠。 2.来自异步时钟域的输入需要寄存一次以同步化,再寄存一次以减少亚稳态带来的影响。 3.不需要用到跳变沿的来自同一时钟域的输入,没有必要对信号进行寄存。 4.需要用到跳变沿的来自同一时钟域的输入,寄存一次即可。 给出一个verilog模板: always @ (posedge Clk) //不对输入信号进行寄存 begin if (inputs) begin ... end ... end always @ (posedge Clk) //对输入信号寄存一拍 begin inputs_reg <= inputs; if (inputs_reg == 1'b0 && inputs == 1'b1) begin ... end ... end always @ (posedge Clk) //对输入信号寄存两拍 begin inputs_reg1 <= inputs; inputs_reg2 <= inputs_reg1; if (inputs_reg1 == 1'b1 && inputs_reg2 == 1'b0) begin ... end ... end 关于Metastable的详细内容可以参考TI的文档,感谢网友brotherjam提供信息。文档标题:Metastable Response In 5-V Logic Circuits。大家可以去TI网站上找。 |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 高速存储器接口的低成本FPGA… 利用流量控制管理器件实现通… 利用流量控制管理器件实现通… 一种基于FPGA的新型误码测试… ALTERA的NIOS CycloneII 2C3… FPGA C 语言编程指南 产生基于FPGA的电路板所需的… 产生基于FPGA的电路板所需的… 产生基于FPGA的电路板所需的… 平台FPGA为实现流量管理提供… |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|