数字设计小思 - 谈谈复位那些事

写在前面

本系列整理数字系统设计的相关知识体系架构,为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中,对于复位这个问题可以算是老生常谈了,但是也是最容易忽略的点。本文结合FPGA的相关示例,再谈一谈复位。
(本文长度约六千字,请耐心阅读,本人水平有限,如有纰漏与错误,欢迎留言讨论)

复位的用途

复位信号几乎是除了时钟信号外最常用的信号了,几乎所有数字系统在上电的时候都会进行复位,这样才能保持设计者确定该系统的系统模式的状态,以便于更好的进行电子设计,并且在任意时刻,确保使用者总能对电路系统进行复位,使电路从初始的状态开始工作。

总结下来用途如下:

  1. 使电路在仿真时具有可知的初始值 :通常在仿真时未给入初试状态又未经复位,那么这段代码的初始值是不定态,会经常会出现X或者Z,也就未知态。
  2. 使实际电路在复位后从确定的初始状态开始运行 :在数字系统中,很多电路都要求从给定的初始状态上开始运行,避免电路工作于不可预知的状态,并因此导致异常或者致命的故障。
  3. 使电路在陷入异常状态时能通过复位回到可控的初始状态 :通常一个设计者无法保证所设计的数字逻辑电路在任何情况下都不会发生异常或者出现故障,假如电路无法自己返回正常状态,可以使用复位电路,强制使电路从初始状态开始工作。

尽管复位极为重要,但是复位电路在设计中是最常忽视的方面。一个不正确设计的复位本身可以表现为一个不可重复的逻辑错误。

复位电平的选择

有关复位电平,实际上是与FPGA芯片内部的触发器结构有关,在之前的博文有提到过。作为xilinx 7系列触发器,其 R 端口既可用作同步置位/复位端口,也可用作异步预设/清除端口,但无论哪种方式,都是高电平有效。Altera的是低电平有效

不同公司的触发器结构

如果RTL代码采用了低电平有效的复位模式,综合器将在复位信号驱动寄存器SR控制端之前的插入一个反相器(interver)。你必须使用一个查找表(look up table)来实现反向器,以利用LUT的输入端口。低电平有效的控制信号带来的额外的逻辑可能拉长了执行时间(runtime),将导致更低的FPGA资源利用率,也将影响时序和功耗。

同步复位

同步低复位

同步低复位的代码如下:

module reset(
    input clk,
    input rst,
    input [1:0] in,
    output reg [1:0] out
    );
    always @ (posedge clk) begin
        if (rst == 'b0)
            out <= 'd0 ;
        else 
            out <= in ;
    end
endmodule

在使用vivado RTL 分析对应的电路结构如下:

RTL电路结构

使用vivado综合后结构如下:

综合后的实际电路

由于xilinx的器件结构中的触发器为高复位,所以会引入LUT实现复位信号的功能,引入额外的逻辑资源。

同步高复位

同步高复位的代码如下:

module reset(
    input clk,
    input rst,
    input [1:0] in,
    output reg [1:0] out
    );
    always @ (posedge clk) begin
        if (rst == 'b1)
            out <= 'd0 ;
        else 
            out <= in ;
    end
endmodule

在使用vivado RTL 分析对应的电路结构如下:

RTL电路结构

使用vivado综合后结构如下:

综合后的实际电路

由于xilinx的器件结构中的触发器为高复位,所以在使用同步高复位时,直接会将复位信号连接到复位输入端。

同步复位的优缺点

同步复位的优点:

  1. 有利于仿真器仿真;

  2. 设计的系统全部是同步时序电路,有利于时序分析,可综合出更高性能的电路;

    由于同步复位信号是被时钟启动(Launch)和锁存(Latch),而启动和锁存的时钟彼此同步,所以复位信号的到达时间(Arrival Time)和所需时间(Required Time)就能很轻易地确定并进行正确的时序裕度(slack)分析。

  3. 可以滤除高于时钟频率的复位毛刺,保证系统更加稳定;

  4. 对于逻辑器件内部的资源存在同步复位的端口时,使用同步复位时会节省FPGA的逻辑资源。

同步复位的缺点:

  1. 对于逻辑器件的目标库内的 DFF 都只有异步复位端口的情况,如果采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会一方面额外增加 FPGA 内部的逻辑资源,另一 方面也增加了相应的组合逻辑门时延,因此较难综合出更高性能的电路。
  2. 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。同时还要考虑诸多其他因素(诸如时钟偏移、组合逻辑路径延时、复位延时等),所以复位信号有时需要脉冲展宽,用以保证时钟有效期间有足够的复位宽度(此处可当做单信号的跨时钟处理,类似单信号的跨时钟处理方式)。

复位丢失示例

上图为快时钟的同步信号传输给慢时钟后造成复位丢失,具体解决方法可参考单信号的快时钟域转慢时钟域的跨时钟处理方法。

某些情况不太适用同步复位

在一些情况中,在出于节省功耗的目的而使用门控时钟时,就可能出现问题。在复位信号发出时,时钟可能关闭。在这种情况下只能使用异步复位,并在时钟恢复前移除复位信号。

又如不同的芯片在复位的时候不能把自身的总线接口重置成三态或者输入状态,而是总线上有多个芯片同时通过接口将数据输出到总线,总线上将出现电平冲突,严重时可能导致接口损坏。因此,在这种时候,同步复位就不太适用。

门控时钟导致同步复位丢失

如果 ASIC/FPGA有内部三态总线,需要时钟来产生复位。为了阻止芯片上电时内部三态总线出现竞争,芯片应当有下图所示的异步上电复位。

输出使能的异步复位

当然也可以使用同步复位信号,但是也必须使用复位信号直接撤销三态使能。

用于输出使能的同步复位

这种同步技术的优点是能简化复位–高阻这一路径的时序分析。

异步复位(完全异步)

异步低复位

异步低复位的代码如下:

module reset_async(
    input clk,
    input rst_n,
    input [1:0] in,
    output reg [1:0] out
    );
    always @ (posedge clk or negedge rst_n) begin
        if (rst_n == 'b0)
            out <= 'd0 ;
        else 
            out <= in ;
    end
endmodule

在使用vivado RTL 分析对应的电路结构如下:

RTL电路结构

使用vivado综合后结构如下:

由于xilinx的器件结构中的触发器为高复位,所以会引入LUT实现复位信号的功能,引入额外的逻辑资源。

异步高复位

异步高复位的代码如下:

module reset_async(
    input clk,
    input rst,
    input [1:0] in,
    output reg [1:0] out
    );
    always @ (posedge clk or posedge rst) begin
        if (rst == 'b1)
            out <= 'd0 ;
        else 
            out <= in ;
    end
endmodule

在使用vivado RTL 分析对应的电路结构如下:

image-20230508141755409

使用vivado综合后结构如下:

这里综合后也没有引入新的组合逻辑资源,在该层次看并没有什么影响,但是Xilinx FPGA综合规则中:有和没有异步复位的寄存器不能被包装在一个Slice,不同异步复位的寄存器不能被包装在一个Slice,这就导致在Slice中的资源无法充分利用从而造成资源浪费。

异步复位的优缺点

异步复位电路的优点:

  1. 大多数目标器件库的DFF都有异步复位端口,因此采用异步复位可以节省资源。
  2. 设计相对简单,异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。

异步复位电路的缺点:

所有异步信号的缺点也同时等效是异步复位信号的问题,复位信号从本质讲就是一个频繁使用的控制信号,因此可以总结其缺点如下。

  1. 复位信号容易受到毛刺的影响;
  2. 因为是异步逻辑,无法避免地存在亚稳态问题。
  3. 静态定时分析比较困难,静态时序分析一般是针对同步设计的,都是基于时钟周期来分析时序的。
  4. 对于 DFT(可测性设计)设计,如果复位信号不是直接来自于 I/O 引脚,在 DFT 扫描 和测试时,复位信号必须被禁止,因此需要额外的同步电路。

复位信号的“建立时间”与“保持时间”

由于复位信号实现了对D触发器的控制(置位信号同理),所以但是本质上也是实现了控制相关物理电路进行开关实现置位或者复位,由于异步复位与系统时钟毫无关系,不考虑其余因素时,异步复位可以在任意时刻撤除。但复位信号恰好在时钟沿附近时,复位(置位)信号同样也要满足相应的“亚稳态窗口”的不能移除的需求,满足寄存器的“建立时间”与“保持时间”。

恢复时间: 如果复位信号在时钟有效沿之前撤消,并且离时钟有效沿非常接近,再加上时钟有效沿到达各个触发器有一定时间差(clock skew),那么极有可能一部份触发器仍处于复位状态中而对时钟沿没有响应,而一部份触发器对时钟有响应,那么从这一个时钟开始,电路的状态已经出错了。

移除时间: 如果复位信号在时钟有效沿之后撤消,并且离时钟有效沿非常接近,再加上时钟有效沿到达各个触发器有一定时间差(clock skew),那么极有可能一部份触发器从复位状态中恢复并响应了时钟,而一部份触发器没有响应,那么从这一个时钟开始,电路的状态已经出错了。

下图中异步复位信号有足够的恢复时间,异步复位能正常释放。

image-20230508223914270

当异步复位信号在时钟上升沿附近撤除时,导致触发器的输出为亚稳态,亚稳态前文已经讨论过了,亚稳态在电路中的危害是显而易见的。

恢复时间不足造成的亚稳态问题

如果你想让某个时钟沿起作用,那么你就应该在 “恢复时间” 之前是异步控制信号变无效;如果你想让某个时钟沿不起作用,那么你就应该在 “去除时间” 过后使控制信号变无效。

我觉得这里其实本质上就是要避开触发器的建立时间和保持时间,避免在亚稳态窗口附近寄存器的双锁存结构和复位结构同时作用,这将会引入亚稳态。

异步复位同步释放

异步确立和同步释放的复位电路通常会提供比完全异步或完全同步复位更可靠的复位。

电路结构如下图所示:

异步复位同步释放电路结构

根据结构可写出代码如下:

module reset_async_and_free_sync(
    input clk,
    input rst_n,
    input [1:0] in,
    output reg [1:0] out
    );
    reg rst_n_dly0,rst_n_dly1;
    
    always @ (posedge clk or negedge rst_n) begin
        if (rst_n == 'b0)begin
            rst_n_dly0 <= 'd0 ;
            rst_n_dly1 <= 'd0 ;
        end
        else begin
            rst_n_dly0 <= 'd1 ;
            rst_n_dly1 <= rst_n_dly0;
        end
    end
    wire rstn = rst_n_dly1;
    always @ (posedge clk or negedge rstn) begin
        if (rstn == 'b0)
            out <= 'd0 ;
        else 
            out <= in ;
    end
endmodule

在使用vivado对应的电路结构如下:

使用vivado综合后结构如下:

异步复位、同步释放优点

异步复位、同步释放具有异步复位和同步的优点,主要是:

  1. 快速复位。只要复位信号一有效,电路就处于复位状态。
  2. 有效捕捉复位。即使是短脉宽复位也不会丢失。
  3. 有明确的复位撤销行为。复位的撤离是同步信号,因此有良好的撤离时序和足够的恢复时间。

过滤复位毛刺

异步复位对毛刺很敏感,这就意味着任何满足触发器最小复位脉冲宽度的输入都能引起触发器复位。如果复位线受到毛刺的影响,这就真的成为问题了。在设计中,可能没有足够高频的采样时钟来检测复位上的小毛刺;下面将会介绍过滤掉毛刺的方法。该方法需要一个数字延时来过滤毛刺。复位输入引脚也必须是施密特触发器引脚才有助于毛刺过滤。下图显示了复位毛刺滤波器的电路和时序图。

复位毛刺过滤

为了加人延时,一些生产商提供了用于延迟且能够手动实例化的宏单元。如果没有这样的宏单元,设计人员就需要在优化后的已综合设计中手动加入延时。第二种方法需要创建一个包含较慢缓冲器的模块,再多次实例化该模块以达到所期望的延迟。基于这种思想,可以产生许多变种的解决办法。

由于该方法使用了延迟链,因此一个缺点是所产生的延迟会随着温度、电压和工艺而变化。必须注意确保延迟在所有PVT环境下都能满足设计要求。

不“复位” 可以吗?

如果针对Xilinx FPGA的设计应用,我觉得不进行 “复位” 是可以的,不必要的数据信号可以不进行“复位”,这样可以节省资源,在xilinx的白皮书中也是这样建议的:

当一个Xilinx的FPGA芯片被重新配置时,每一个单元都将被初始化。在某种意义上讲,这是一个上电之后的“终极的”全局复位操作,因为它不仅仅是对所有的触发器进行了复位操作,还初始化了所有的RAM单元。随着Xilinx FPGA芯片内部的嵌入式RAM资源越来越多,这种“终极的”全局复位操作越来越有意义。对所有的RAM单元进行预定义,在软件仿真和实际操作中都是非常有帮助的,因为这样避免了在上电时采用复杂的启动顺序来清除存储单元内容的操作。

通常可以将设计分为两部分,控制路径和数据路径

  • 部分数据路径的初始值并不重要,此时的重置是不必要的。
  • 只在设计中需要获得有效帧信号或设计回到已知良好状态的部分使用外部复位。

虽然在这里提到了不进行复位,但是不得不注意的是Xilinx的FPGA在上电后会对芯片内的资源进行复位,所以即使相关寄存器不进行复位,在芯片上电后也是能知道恢复到了芯片设置的默认状态的。在xilinx平台,部分复位设计实际是没有多大意义的。

无复位电路

编写代码使得输入做一级寄存处理,然后再将寄存输出的结果输出给out寄存器,此时对out这个寄存器不做复位处理。编写代码如下:

module noreset(
    input clk,
    input rst_n,
    input [1:0] in,
    output reg [1:0] out
    );
    
    reg [1:0] in_r;
    always @ (posedge clk) begin
        if (rst_n == 'b0)begin
            in_r <= 'd0 ;
            //out <= 'd0 ;
        end
        else begin
            in_r <= in;
            out <= in_r;
        end
    end

endmodule

在使用vivado RTL分析后对应的电路结构如下,从结构图中可以看到,第二级的输出寄存器没有添加相关复位信号控制逻辑资源。

使用vivado综合后结构如下,对输出寄存器没有设置复位,在综合分析时会自动设置复位信号为无效。

复位网络

在一个设计中,无论是同步复位还是异步复位,其扇出数量往往仅次于时钟网络。复位网络通常会被布线在全局网络上,在布线的时候需要控制各个路径的时钟偏移保持在大致相等的水平上,使复位能“同时”撤离。

下图为一个树状全局复位网络。

树状全局复位网络

当复位信号驱动的模块和信号过多时,会导致扇出过大,从而使得布局布线变得困难。下图为一个全局复位网络的例子,从图中可以看出,复位信号扇出很大,资源分布散乱,从而给布局、布线带来很大的困难,增加了EDA的编译负担。

复位网络扇出过大

考虑下图的复位方案也会存在,由于rst_ol和rst_o2在撤离时可能存在一个时钟周期的偏差,因此,在实际电路系统中,该方式有可能导致复位失败,与前文提到的亚稳态的多个同步器道理相同。

多个复位同步器网络

比较合理的设计如下图:

模块化复位同步网络

图中的复位电路首先用两级寄存器对复位进行同步,得到根复位信号后再对其用复位同步器进行分发。由于同步后的根复位信号不会带来亚稳态的问题,因此,在分发根复位信号时再次使用两级寄存器对根复位信号进行同步和分发是很安全的。

根复位信号经过复位同步器分发后,各个子复位网络是各自独立的,并且扇出的数量比根复位网络要小很多。在布局布线的时候,这些子复位网络需要一一进行约束和时序分析。一般情况下,在设计的顶层代码中划分专门的复位模块,由该模块统一处理电路所需要的所有复位信号,使复位的方案更加清晰安全。在设计中,将复位电路的处理分散到各个底层模块是不安全的,有可能导致不同模块间的复位行为不一致,使电路因复位失败而工作在异常的状态上。

模块化复位网络

上图为使用模块化的复位的布局布线的结果,可以看到,复位信号经过模块化的处理后,降低了扇出,更有利于提高电路的工作性能。

多时钟域的复位

在多时钟域电路中,合理的复位处理方式应如下图所示。各个时钟域的复位信号由各自的时钟进行同步。在每个时钟域内,电路总是能被正确地复位。

小结

本文分析了复位的用途,通过同步复位和异步复位两个示例表示了在Xilinx FPGA中的不同复位的编写方法综合出的实际电路,指导我们在实际应用中去合理的进行复位设计,同时引入了恢复时间和去除时间的概念,进一步解释了在复位时,复位信号和时钟信号应该遵守的相关约定,进而结合异步复位的优点和同步复位的优点,介绍了异步复位同步释放的复位设计方法,在最后介绍了合理的复位网络设计与多时钟域的复位设计。根据本文的分析,可以小结一下关于复位的相关操作的注意事项以及复位设计的小技巧:

  • 异步确立和同步释放的复位电路通常提供比完全异步或完全同步复位更可靠的复位。
  • 复位电平的选择跟芯片结构有关,根据具体使用的芯片属性选择合适的复位电平。
  • 建议采用异步复位同步化(异步复位同步释放处理)。
  • 全局复位并不是最佳方式,可使用模块化方式去处理复位信号。
  • 并不是所有时序电路都要加复位,但对于控制信号以及必须知道初始状态的情况,必要的复位是不可少的。
  • 对每个独立的时钟区域必须利用一个分开的复位同步器。

Reference

  1. FPGA-xilinx系列芯片的复位,你真的明白吗?
  2. FPGA同步复位、异步复位、异步复位同步释放 - 孤独的单刀
  3. 移除时间和恢复时间
  4. FPGA基础学习(9) – 复位设计 - 肉娃娃
  5. wp272: Get Smart About Reset: Think Local, Not Global
  6. 正点原子逻辑设计指南
  7. 高级FPGA设计:结构、实现和优化
  8. 硬件架构的艺术
  9. 《FPGA实战演练. 高级技巧篇》——王敏志编著
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数字逻辑与数字电路课程时的一些实验报告 《数字逻辑与数字电路》实验指导 实验1.Verilog HDL输入方式组合电路的设计 多路选择器和三人表决电路的设计 (1) 实验目的:进一步熟悉Quartus II的Verilog HDL文本设计流程,组合电路的设计仿真和硬件测试。 (2) 实验内容1、多路选择器的设计: 根据教材5.1节的流程,利用Quartus II完成2选1多路选择器的文本编辑输入(MUX21.v)和仿真测试等步骤,给出仿真波形。 在实验系统上硬件测试,验证此设计的功能。对于引脚锁定以及硬件下载测试,a和b分别接来自不同的时钟;输出信号接蜂鸣器。最后进行编译、下载和硬件测试实验(通过选择键1,控制s,可使蜂鸣器输出不同音调)。 (4) 实验内容2、三人表决电路的设计: 根据教材5.1节的流程,利用Quartus II完成三人表决电路的文本编辑输入(图5-36)和仿真测试等步骤,给出仿真波形。 在实验系统上硬件测试,验证此设计的功能。对于引脚锁定以及硬件下载测试,ABC[2..0]分别接自键3、键2、键1;CLK接自时钟CLOCK0(256Hz),输出信号X接D1,输出信号Y接蜂鸣器。最后进行编译、下载和硬件测试实验(通过按下键3、键2、键1,控制D1的亮灭)。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 实验2.原理图输入方式全加器设计 (1) 实验目的:熟悉利用Quartus II的原理图输入方法设计简单组合电路,掌握层次化设计的方法,并通过一个8位全加器的设计把握文本和原理图输入方式设计的详细流程。 (2) 实验原理:一个8位全加器可以由8个1位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的最低进位输入信号cin相接。 (3) 实验内容1:按照教材4.6节完成半加器和1位全加器的设计,包括用文本或原理图输入,编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设置成一个元件符号入库。 (4) 实验内容2:建立一个更高层次的原理图或文本设计,利用以上获得的1位全加器构成8位全加器,并完成编译、综合、适配、仿真和硬件测试。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 实验3.7段数码显示译码器设计 (1) 实验目的:进一步熟悉Quartus II的Verilog HDL文本设计流程,组合电路的设计仿真和硬件测试。熟悉利用Quartus II的原理图输入方法设计简单组合电路,掌握层次化设计的方法,把握文本和原理图输入方式设计的详细流程。 (2) 实验原理:7段数码显示译码器设计采用case语句对数码管的七个段分别进行赋值0或1,实现数字的显示;使用if-else语句设计模16计数器。 (3) 实验内容1:使用VerilogHDL语言设计一个7段数码显示译码器并进行仿真及下载。 (4) 实验内容2:使用VerilogHDL语言设计一个模16计数器,含计数使能端(en)与异步清零端(clr),当en为高电平时开始计数,为低电平时停止计数,将计数器与7段数码显示译码器使用原理图进行连接,并仿真及下载。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 原理工程图: 实验4.基于LPM宏模块的计数器设计 (1) 实验目的:初步掌握Quartus II基于LPM宏模块的设计流程与方法并由此引出基于LPM模块的许多其他实用数字系统的自动设计技术。 (2) 实验内容: 根据教材175页8.5节的流程,利用Quartus II完成基于LPM宏模块的计数器设计编辑和仿真测试等步骤,给出仿真波形。 在实验系统上硬件测试,验证此设计的功能并进行解说。对于引脚锁定以及硬件下载测试。 (3) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。 实验5.序列检测器状态机设计 (1) 实验目的:用状态机实现序列检测器的设计,了解一般状态机的设计与应用。 (2) 实验原理:序列检测器可用于检测一组或多组由二进制吗组成的脉冲序列信号,当序列检测器连接收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。 (3) 实验内容1:按照教材180页8.7节的流程,利用Quartus II完成序列检测器状态机的设计编辑和仿真测试等步骤,给出仿真波形,了解控制信号的时序,最后进行引脚锁定并完成硬件测试实验。 建议选择电路模式8,用键8(PIO8)控制复位信号CLR;键6(PIO9)控制状态机工作时钟CLK;将8位待检测预置数由键4/键3作为外部输入,待检测串行序列数输入DS接PIO10(左移,最高位在前);指示输出DC接PIO43~PIO40(显示于数码管7), 现态码输出C接PIO47~PIO44(显示于数码管8)。下载后:①按实验板“系统复位”键;②用键2和键1输入2位十六进制待测序列数“11100101”;③按键8复位(平时数码7指示显“0”);④按键6(CLK) 8次,这时若串行输入的8位二进制序列码(显示于数码2/1和发光管D8~D0)与预置码“11100101”相同,则数码7应从原来的0变成1,表示序列检测正确,否则仍为0。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 实验6.数字频率计 (1) 实验目的:设计6位10进制频率计,学习较复杂的数字系统设计方法。 (2) 实验原理:数字频率计由三大部分组成。3个CNT10模块分别是双十进制计数器模块,负责对被测频率信号进行计数;3个74374被用做输出数据的锁存器,锁存输出的数据,即所测频率值通过外接的数码管显示;TF_CTRL模块是此频率计的测频时序控制模块,由它发出ENB, LOCK, CLR三个控制信号,分别控制计数器的计数使能,锁存器的锁存控制,以及计数器的清零。 根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。测频控制信号可以由一个独立的发生器来产生,即TF_CTRL。 设计要求是:TF_CTRL的计数使能信号ENB能产生一个1秒脉宽的周期信号,并对频率计中的6位十进制计数器CNT10的ENA使能端进行同步控制。当ENB高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOCK的上跳沿将计数器在前1秒钟的计数值锁存进锁存器74374b中,并由外部的7段译码器译出,显示计数值。设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。锁存信号后,必须有一清0信号CLR对计数器进行清零,为下1秒的计数操作作准备。 (3) 实验内容:按照教材181页8.8节的流程,利用Quartus II完成数字频率计的设计编辑和仿真测试等步骤,给出仿真波形。建议选实验电路模式5;6个数码管以10进制形式显示测频输出;待测频率输入F_IN由clock5输入,频率可选32768Hz等;8HZ测频控制信号CLK1HZ可由clock2输入(用跳线选8Hz)。注意,这时6个数码管的测频显示值是10进制的。 (4) 实验内容2:将频率计改为8位10进制频率计,注意此设计电路的计数器必须是8个4位的10进制计数器。此外注意在测频速度上给予优化。 (5) 实验报告:根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。参考ppt实验指导课件。 GW48CP+主系统使用说明 第一节 GW48教学实验系统原理与使用介绍 一、GW48系统使用注意项 (用户必读!!!) a:闲置不用GW48系统时,必须关闭电源!!! b:在实验中,当选中某种模式后,要按一下右侧的复位键,以使系统进入该结构模式工作。注意此复位键仅对实验系统的监控模块复位,而对目标器件FPGA没有影响,FPGA本身没有复位的概念,上电后即工作,在没有配置前,FPGA的I/O口是随机的,故可以从数码管上看到随机闪动,配置后的I/O口才会有确定的输出电平。 c:换目标芯片时要特别注意,不要插反或插错,也不要带电插拔,确信插对后才能开电源。其它接口都可带电插拔。请特别注意,尽可能不要随意插拔适配板,及实验系统上的其他芯片。 二、GW48系统主板结构与使用方法 以下将详述GW48系列实验系统结构与使用方法,对于这2种型号的不同之处将给予单独指出。该系统的实验电路结构是可控的。即可通过控制接口键,使之改变连接方式以适应不同的实验需要。因而,从物理结构上看,实验板的电路结构是固定的,但其内部的信息流在主控器的控制下,电路结构将发生变化---重配置。这种“多任务重配置”设计方案的目的有3个:1、适应更多的实验与开发项目;2、适应更多的PLD公司的器件;3、适应更多的不同封装的FPGA和CPLD器件。系统板面主要部件及其使用方法说明如下。以下是对GW48系统主板功能块的注释。 (1) “模式选择键”:按动该键能使实验板产生12种不同的实验电路结构。这些结构如第二节的13 张实验电路结构图所示。例如选择了“NO.3”图,须按动系统板上此键,直至数码管“模式指示”数码管显示“3”,于是系统即进入了NO.3 图所示的实验电路结构。 (2) 适配板:这是一块插于主系统板上的目标芯片适配座。对于不同的目标芯片可配不同的适配座。可用的目标芯片包括目前世界上最大的六家FPGA/CPLD厂商几乎所有CPLD、FPGA和所有ispPAC等模拟EDA器件。第七节的表中已列出多种芯片对系统板引脚的对应关系,以利在实验时经常查用。 (3) ByteBlasterMV编程配置口:如果要进行独立电子系统开发、应用系统开发、电子设计竞赛等开发实践活动,首先应该将系统板上的目标芯片适配座拔下(对于Cyclone器件不用拔),用配置的10芯编程线将“ByteBlasterMV”口和独立系统上适配板上的10芯口相接,进行在系统编程(如GWDVP-B板),进行调试测试。“ByteBlasterMV”口能对不同公司,不同封装的CPLD/FPGA进行编程下载,也能对isp单片机89S51等进行编程。编程的目标芯片和引脚连线可参考附图1,从而进行二次开发。 (4)ByteBlasterII编程配置口:该口主要用于对Cyclone系列AS模式专用配置器件EPCS4和EPCS1等编程。 附图1 GW48系统电子设计二次开发信号图 (5) 混合工作电压源:系统不必通过切换即可为CPLD/FPGA目标器件提供5V、3.3V、2.5V、1.8V和1.5V工作电源,此电源位置可参考附图1。 (6)并行下载口:此接口通过下载线与微机的打印机口相连。来自PC机的下载控制信号和CPLD/FPGA的目标码将通过此口,完成对目标芯片的编程下载。计算机的并行口通信模式最好设置成“EPP”模式。 (7)键1~键8 :为实验信号控制键,此8个键受“多任务重配置”电路控制,它在每一张电路图中的功能及其与主系统的连接方式随模式选择键的选定的模式而变,使用中需参照第二节中的电路图。 (8)数码管1~8/发光管D1~D16 :受“多任务重配置”电路控制,它们的连线形式也需参照第二节的电路图。 (9)“时钟频率选择

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vuko-wxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值