FPGA设计中的复位电平

from CSDN:https://blog.csdn.net/a419116194/article/details/103238872

from 知乎用户“王狗蛋”回答“为啥fpga设计用高复位asic设计用低复位呢?“

一般推荐使用低电平有效,因为低电平时电路的阻抗低,噪声造成的电平变化小,也就是说,抗干扰能力更强。换句话说:低电平有效时干扰把它变成高电平,比高电平有效时干扰把它变成低电平要困难。就是因为低电平阻抗低,所以说低电平有效抗干扰能力强。

  在数字系统中,比较容易出现在低电平上叠加一个噪声正脉冲。如果采用高电平有效的方式,就可能在无效的低电平上,出现高电平噪声,从而使某个信号在不应当有效的时候,出现有效的高电平。所以在数字系统中,大多数信号的有效电平为低电平。

  对于复位信号的有效电平选择,Asic设计常用低电平有效,FPGA设计常用高电平有效。

  Asic设计的原因可能是:

  • 以前, 对于TTL和NMOS来说下拉驱动器都比它们的上拉驱动器强得多。 即使在现在,许多CMOS器件也具有比上拉更强的下拉功能;
  • 低电平有效相对静态功率较小,而且反应速度快;
  • 使用低电平有效的一个小优点是只需要一个上拉电阻,而高电平有效则需要一个小的上拉电阻和一个较大的下拉电阻。 因此低电平有效可以节约一个晶体管;
  • 上电时,复位保持在低电平更容易,而如果复位为高电平有效,系统会不稳定,直到复位阈值达到'1'。

  FPGA设计的原因可能是:

  • Xilinx推荐用高电平复位
  • 全局复位通常具有高扇出,因为它需要传播到设计中的每个触发器。这会消耗大量的路由资源,并可能对设备利用率和时序性能产生负面影响。而且全局复位会与设计中的其他网络竞争相同的路由资源。因此,FPGA设计师们提出了不依赖于完全全局复位的其他复位机制。

    配置FPGA时,每个单元(包括触发器和Block RAM)都会初始化。因此,FPGA配置与全局复位具有相同的效果,因为它设置了每个存储的初始状态FPGA中的元素处于已知状态。如图:

  • 看FPGA器件手册的时候一定会看到“支持x路时钟信号”。就像之前说过的一样, 像时钟,复位和使能信号都是具有高扇出,而且要求低偏差(low skew)的信号。 因此像它们的布线资源也是比较特殊的(一般叫做全局布线资源、 时钟布线资源或者low skew网络)。对于FPGA来说并不是哪一条网络连接所有时钟,另一条连接所有复位, 而是在全局网络中任何一条net都可以连接到时钟,复位和使能。 因此同一条net可以既连接寄存器A的时钟又连接寄存器B的复位同时还连接到寄存器C的使能。 如果使用复位低电平有效的话, 如果不做处理那么就要求B时钟下降沿有效而且C低电平使能,这样至少有一个要多加入一级反相器。

    事实上,就算采用低电平复位有效的结构,设计综合软件的程序员也是可以解决的。 但是程序员不愿意啊。 因为在程序中概念的一致性是很重要的, 要么复位和使能高电平同时时钟上升沿, 要么低电平配合下降沿。不然要多加一级判断看系统信号是否为复位,然后取反。 而用户又喜欢常用上升沿驱动寄存器,所以FPGA多用高电平复位了

以下是一个基于 Verilog HDL 的 31 进制计数器的代码,该计数器具有异步复位信号 RST(高电平有效),同步使能信号 EN(高电平有效),同步加载信号 LOAD(高电平有效),和数据输入信号 DATA: ```verilog module counter_31( input clk, // 时钟信号 input rst, // 异步复位信号(高电平有效) input en, // 同步使能信号(高电平有效) input load, // 同步加载信号(高电平有效) input [4:0] data,// 数据输入信号 output reg [4:0] out // 输出信号 ); reg [4:0] counter; // 计数器 always @(posedge clk or negedge rst) begin if (rst == 0) begin // 异步复位 counter <= 0; end else if (en == 1) begin // 同步使能 if (load == 1) begin // 同步加载 counter <= data; end else begin // 计数 if (counter == 30) begin counter <= 0; end else begin counter <= counter + 1; end end end end assign out = counter; // 输出 endmodule ``` 该计数器使用 5 个输入信号和 1 个输出信号。其 clk 是时钟信号,rst 是异步复位信号,en 是同步使能信号,load 是同步加载信号,data 是数据输入信号,out 是输出信号。计数器的位宽为 5 位,因为 31 的二进制表示为 11111,需要 5 位二进制数来表示。计数器的实现采用 Verilog HDL 的时序逻辑实现,使用一个寄存器记录当前计数值,并在时钟上升沿时更新计数器的值。同时,根据输入信号的不同,可以实现异步复位、同步使能、同步加载、计数等功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值