写点什么

简单时序逻辑电路

作者:向阳逐梦
  • 2022-11-17
    四川
  • 本文字数:1193 字

    阅读完需:约 4 分钟

1. 时序逻辑电路概念

​ 在前述的组合逻辑中,任意时刻的输出只与该时刻的输入信号所决定;而在接下来要讲的时序电路中,任意时刻的输出信号不仅与当时刻的输入有关,而且与电路原来的状态有关。这需要电路要能记住历史输入,所以要引入时序概念。用时钟信号保障时序电路按照时序来运行。

2. 锁存器和触发器

​ 锁存器和触发器是时序电路中常用的存储器设备。

2-1. 锁存器

​ 锁存器是一种具有两种稳定状态的器件:高输出和低输出。 锁存器具有反馈路径,因此设备可以保留信息。 锁存器是易失性存储器设备,并且只要设备通电就可以存储一位数据。 顾名思义,锁存器用于“锁定”信息并保持信息。

2-1-1. SR 锁存器

SR 锁存器(置位/复位)是一个异步器件:它不依赖于控制信号工作,仅依赖于 S 和 R 输入的状态。它的符号表示、使用异或门级电路实现和真值表如下所示:


虽然 Xilinx FPGA 可以使用一个 LUT(查找表)电路实现这种锁存器,但以下 Verilog 代码显示了如何使用门级电路和数据流建模对这种电路进行建模。

门级:module SR_latch_gate (input R, input S, output Q, output Qbar);nor (Q, R, Qbar);nor (Qbar, S, Q); endmodule数据流:module SR_latch_dataflow (input R, input S, output Q, output Qbar); assign #2 Q = ~ (R | Qbar);assign #2 Qbar = ~ (S | Q); endmodule
复制代码

使用上面显示的代码设计 SR 锁存器。 合成设计并查看合成设计的原理图。 设计一个 Testbench 进行测试并验证设计。

​ 该实验中将 S 输入分配给 SW0,将 R 输入分配给 SW1。将 Q 分配给 LED0,将 Qbar 分配给 LED1。实现该设计并进行仿真验证以及下载。

实验步骤:

1. 打开 Vivado 并创建一个名为 lab5_1_1 的空白项目。

2. 使用 SR_latch_dataflow 代码创建和添加 Verilog 模块。

3. 设计一个 Testbench 进行测试(也可以使用参考代码中的 Testbench),执行 100ns 的行为仿真,并验证设计。

​ 若使用供参考的 Testbench,波形应该如下:


4. 将适当的板相关主 XDC 文件添加到项目中并编辑它以包括相关引脚,将 S 输入分配给 SW0,将 R 输入分配给 SW1,将 Q 分配给 LED0,将 Qbar 分配给 LED1。

5. 在“Bitstream Settings”中设置 tcl.pre 选项以指向提供的 lab5_prehook.tcl 文件。 此文件允许将组合循环上载到电路板。

6. 合成设计并在 Synthesized Design 过程组下查看原理图。验证它使用 2 个 LUT 和 4 个 IO(2 个 IBUF 和 2 个 OBUF)。

7. 实现设计并查看项目摘要。 它应该显示 2 个 LUT 和 4 个 IO。

8. 生成比特流,将其下载到 Nexys4 DDR 板,并验证功能。

参考代码:
module RS_latch_tb();    reg R,S;    wire Q,Qbar;    RS_latch TB (.R(R),.S(S),.Q(Q),.Qbar(Qbar));    initial begin        R = 0;        S = 0;        #10 S = 1;        #10 S = 0;        #10 R = 1;        #10 R = 0; S = 1;        #10 R = 1; S = 0;        #10 R = 0; S = 1;        #10 R = 1; S = 0;        #10 S = 1;     endendmodule
复制代码


发布于: 刚刚阅读数: 3
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022-06-01 加入

某公司芯片测试工程师,嵌入式开发工程师,InfoQ签约作者,阿里云星级博主,华为云·云享专家。座右铭:向着太阳,追逐梦想!

评论

发布
暂无评论
简单时序逻辑电路_Verilog_向阳逐梦_InfoQ写作社区