09-寄存器

这篇具有很好参考价值的文章主要介绍了09-寄存器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.寄存器

组合逻辑存在一个最大的缺点就是存在竞争与冒险,系统会产生不定态;使用时序逻辑电路就会极大的改善这种情况
寄存器具有存储功能,一般是由D触发器构成,由时钟脉冲控制,每个D触发器能够存储一位二进制码
D触发器工作原理:在一个脉冲信号(一般为晶振产生的时钟脉冲)上升沿或者是下降沿作用下,将信号从输入端D送到输出端Q,如果时钟脉冲的边沿信号未出现,即使输入信号改变,输出信号仍保持原来的值,且寄存器拥有复位清零功能,其复位又分为同步复位和异步复位.

2.FPGA设计

  • KEY1控制LED6,按键按下,LED灯点亮;按键松开,LED灯熄灭
    09-寄存器

2.1 框图和波形图

  • 时钟和复位信号
  • n-表示低电平有效
    09-寄存器
    09-寄存器

2.2 同步复位的D触发器和异步复位的D触发器

同步复位

  • 同步是工作时钟同步复位的意思,当时钟的上升沿或者下降沿到来时,检测到按键的复位操作才是有效的
    09-寄存器
    同步复位理解:复位信号与时钟上升沿不同步,此时,输出不会随复位信号的变化立即变化,直到时钟上升沿采样到复位信号,才发生变化

异步复位

  • 异步复位就是工作时钟不同步的意思,复位信号不关心时钟信号,当寄存器收到复位信号的时候,立即执行复位,不用管是不是时钟上升沿
    09-寄存器

时序逻辑过滤毛刺

使用按键控制LED灯,按键输入的信号输入给输出信号,假如在某个时钟周期内输入信号产生了毛刺:
*对于组合逻辑,输出也会有毛刺
09-寄存器

  • 对于时序逻辑电路,寄存器在时钟上升沿进行采样,采样之后,一个周期内都维持一样的值,两个上升沿之间的毛刺现象都可以被过滤掉,提高电路的可靠性
    09-寄存器

时序逻辑延迟打拍

  • 组合逻辑电路,时钟和数据对齐,时钟上升沿采集到的是时钟上升沿对应的值
  • 时序逻辑电路,时钟和数据对齐,默认采集到的是上升沿对应数据前一时刻的值
    09-寄存器

2.3 RTL

  • 时钟,晶振输入,50MHz
  • 复位信号,低电平有效,由板卡的复位按键输入
module filp_flop(
  input wire sys_clk,
  input wire sys_rst_n,
  input wire key_in,
  
  output reg led_out
);
    
  // 同步复位
  always@(posedge sys_clk)
    if(sys_rst_n == 1'b0)
      let_out <= 1'b0;
    else 
      let_out <= key_in;

endmodule
  • 创建quartus项目,添加文件,进行全编译
    09-寄存器
module filp_flop(
  input wire sys_clk,
  input wire sys_rst_n,
  input wire key_in,
  
  output reg led_out
);
    
  // 异步复位
  always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
      let_out <= 1'b0;
    else 
      let_out <= key_in;

endmodule

09-寄存器
推荐使用异步复位文章来源地址https://www.toymoban.com/news/detail-457693.html

2.4 Testbench

// 同步复位
`timescale 1ns/1ns

module tb_flip_flop();
  reg sys_clk;
  reg sys_rst_n;
  reg key_in;

  initial begin
    sys_clk <= 1'b1;
    sys_rst_n <= 1'b0;
    key_in <= 1'b0;
    #20;
    sys_rst_n <=1'b1;
    #210;
    sys_rst_n <=1'b0;
    #40;
    sys_rst_n <=1'b1;
  end

  initial begin
    $timeformat(-9,0,"ns",6);
    $monitor("@time:%t:key_in=%b,led_out=%b",$time,key_in,led_out);
  end

  // 模拟系统时钟
  always begin
    #10;
    sys_clk = ~sys_clk;
  end

  // 时钟周期是20ns,保证每次数据变化小于时钟周期,避免差生毛刺
  always #20 key_in <= {$random} % 2;
  
  flip_flop flip_flop_inst(
    .sys_clk (sys_clk),
    .sys_rst_n (sys_rst_n),
    .key_in (key_in),
    .led_out (led_out)
  );
endmodule  
  • 加载仿真文件,进行仿真设置
    同步复位
    09-寄存器
    异步复位
    09-寄存器

到了这里,关于09-寄存器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • STM32F103ZET6 GPIO工作模式介绍+使用寄存器点亮第一个LED灯

    STM32F103ZET6 GPIO工作模式介绍+使用寄存器点亮第一个LED灯

    目录  GPIO的工作模式介绍 1.输入模式(模拟、上拉、下拉、浮空) 2.输出模式(推挽/开漏) 3.复用功能(推挽/开漏) 4.模拟输入输出(上下拉无影响) 如何使用寄存器点亮第一个LED灯         在输入模式时,施密特触发器打开,输出被禁止。可通过输入数据寄存器 GPIOx_

    2024年02月06日
    浏览(44)
  • stm32的BRR寄存器和BSRR寄存器

    stm32的BRR寄存器和BSRR寄存器

    1、BRR---   bit   RESET(置0)  register   //高16位无,低16位置1为0,不能写1 2 、BSRR---   bit   SET(设置1或0)       register   //低16位设置1为0 BSRR:用于低16位的作用是让指定的IO口置1;而高16位的作用是让指定的IO口置0。  

    2024年02月11日
    浏览(15)
  • 【汇编中的寄存器分类与不同寄存器的用途】

    寄存器分类 在计算机体系结构中,8086CPU,寄存器可以分为以下几类: 1. 通用寄存器: 通用寄存器是用于存储数据和执行算术运算的寄存器。在 x86 架构中,这些通用寄存器通常包括 AX、BX、CX、DX、SI、DI、BP 和 SP。其中,AX、BX、CX 和 DX 寄存器可以分别作为累加器(accumulat

    2024年02月09日
    浏览(11)
  • 寄存器内存读写指令(二) —— 多寄存器读写 LDM / STM

    寄存器内存读写指令(二) —— 多寄存器读写 LDM / STM

    有的时候,CPU可能会遇到 a++; b++; c++,这个时候为了提升效率,CPU可能会一次将多个寄存器里的变量保存到内存中。这个时候之前介绍的 LDR / STR 指令虽然也能实现,但只能操作一个寄存器的读写。 因此,考虑到这点,下面介绍多个寄存器的读写指令 将 多个寄存器 的数据写

    2024年02月07日
    浏览(7)
  • S7-1200中通过MODBUS TCP客户端在一次请求中实现从服务器读写一个或多个保持性寄存器的具体方法

    S7-1200中通过MODBUS TCP客户端在一次请求中实现从服务器读写一个或多个保持性寄存器的具体方法

    TIA博途V17中增加了MODBUS TCP客户端功能码 23,可以在一次请求作业下实现从服务器读取和写入一个或多个保持性寄存器,这样省去了轮询的编程工作量,提高了工作效率,如下图所示, 使用该指令的前提条件: • TIA Portal V17 及以上版本 • CPU 固件 V4.2 及以上版本 具体操作方

    2024年02月12日
    浏览(12)
  • FPGA之 寄存器、触发器、锁存器

    FPGA之 寄存器、触发器、锁存器

    每个slice有8个存储元素,每个存储元素如下图所示:  其中四个为DFF/LATCH,可以配置为边沿触发D型触发器或电平敏感锁存器输入上图。D输入可以通过AFFMUX, BFFMUX, CFFMUX或DFFMUX的LUT输出直接驱动,也可以通过AX, BX, CX或DX输入绕过函数发生器的 BYPASS slice输入直接驱动。当配置为锁存

    2024年01月18日
    浏览(14)
  • 锁存器、D触发器、寄存器理解

    锁存器、D触发器、寄存器理解

    1、锁存器        锁存器对脉冲的电平敏感,也就是电平触发,在有效的电平下,锁存器处于使能状态,输出随着输入发生变化,此时它不锁存信号,就像一个缓冲器一样;在锁存器没有使能时,则数据被锁住,输入信号不起作用,此时输出一直为锁存的状态信息(锁存最后

    2024年02月09日
    浏览(8)
  • Arm汇编---寄存器

    寄存器:r0~r15, sp, lr, sb, sl, fp, ip, pc 条件码:eq, ne, hs, lo, mi, pl, vs, vc, hi, ls, ge, lt, gt, le, al ------------------------------------------ 一、数据寄存器 --------------------------------------------- ------------------------------------------ 二、指针寄存器 --------------------------------------------- --------------------

    2024年02月02日
    浏览(12)
  • CPSR寄存器

    CPSR寄存器

    ​ 对于ARMv7架构的CPSR如下: N: 两个表示的有符号整数运算时,n=1表示运算结果为负数,n=0表示结果为正数或零。 Z: z=1表示运算的结果为零;z=0表示运算的结果不为零。对于CMP指令,Z=1表示进行比较的两个数大小相等。 C: 下面分四种情况: 在加法指令中(包括比较指令CMN),

    2023年04月08日
    浏览(26)
  • verilog——移位寄存器

    在Verilog中,你可以使用移位寄存器来实现数据的移位操作。移位寄存器是一种常用的数字电路,用于将数据向左或向右移动一个或多个位置。这在数字信号处理、通信系统和其他应用中非常有用。以下是一个使用Verilog实现的简单移位寄存器的示例: module ShiftRegister (   inpu

    2024年02月05日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包