首页 > 其他分享 >深入浅出玩转FPGA阅读随笔

深入浅出玩转FPGA阅读随笔

时间:2023-07-11 15:45:31浏览次数:29  
标签:使能 FPGA clk 深入浅出 玩转 信号 rst 门控 时钟

笔记4语法学习的经验之谈

可综合的语法:可实现硬件电路的语法
行为级语法:不能够实现硬件电路却常常可作为仿真验证的高层次语法

笔记9复位设计

上升沿触发的D触发器内部电路结构
image
前一级的内部电路实际上是实现了一个“保持”的功能,如果复位信号的释放发生在靠近时钟沿很近的时间点,那么这个维持电路就可能没有足够的时间维持复位值,也没有足够的时间维持D输入端的值,从而造成亚稳态。

解决亚稳态问题的方法

异步复位,同步释放思想

点击查看代码
input clk;
input rst_n;
output rst_nr2;
reg rst_nr1, rst_nr2;

always @(posedge clk or negedge rst_n) begin
	if(!rst_n) rst_nr1 <= 1'b0;
	else rst_nr1 <= 1'b1;
end

always @(posedge clk or negedge rst_n) begin
	if(!rst_n) rst_nr2 <= 1'b0;
	else rst_nr1 <= rst_nr1;
end

笔记10FPGA重要设计思想及工程应用

时钟设计技巧

1.内部逻辑产生的时钟
应尽量避免使用FPGA内部逻辑电路产生的时钟,若使用组合逻辑的输出作为时钟信号或异步复位信号的应用,应采用异步复位同步释放的方法进行同步处理。

2.分频时钟与使能时钟
对于资源较丰富的FPGA,一般都有内嵌的多个PLL或者DLL专门用于时钟管理,利用它们就可以很容易地达到多个时钟的设计,输出时钟能够配置成设计者期望的不同频率和相位差(相对于输人时钟),这样的时钟分频是最稳定的。但是对于某些无法使用PLL或者DILL资源的器件又该怎么办呢?推荐使用“使能时钟”进行设计,在“使能时钟”设计中只使用原有的时钟,让分频信号作为使能信号来用。

点击查看代码
input clk;
input rst_n;
reg[2:0] cnt;
wire en;	//使能信号,高电平有效

//5分频计数0~4
always @(posedge clk or negedge rst_n) begin
	if(!rst_n) cnt <= 3'd0;
	else if(cnt < 3'd4) cnt = cnt + 1'b1;
	else cnt <= 3'd0;
end

assign en = (cnt == 3'd4);

//每5个时钟周期产生1个时钟周期高脉冲
//使用使能时钟
always @(posedge clk or negedge rst_n) begin
	if(!rst_n) …;
	else if(en) …;
end

3.门控时钟
门控时钟通过一个使能信号控制时钟的开或者关。当系统不工作时可以关闭时钟,整个系统就处于非激活状态,这样能够在某种程度上降低系统功耗。
然而使用门控时钟并不符合同步设计的思想,是否有一种方法既可以降低功耗又可以稳定可靠地代替门控时钟?
Altera就提出了一种解决方案,如下图所示,对于上升沿有效的系统时钟clk,它的下降沿先把门控信号打一拍,然后再用这个使能信号和系统时钟相与后作为后续电路的门控时钟。
image

笔记11基于FPGA的跨时钟域信号处理

如何有效地进行跨时钟域的信号传输呢?最基本的思想是同步,在这个基础上设计者可以利用各种手段进行通信。单向控制信号检测、专用握手信号和借助于存储器都是比较常用的设计方法。
单向控制信号检测使用脉冲边沿检测法。
双向控制信号使用专用握手信号,同样需要对握手信号进行脉冲边沿检测。

标签:使能,FPGA,clk,深入浅出,玩转,信号,rst,门控,时钟
From: https://www.cnblogs.com/zhendeblog/p/17544889.html

相关文章