首页 > 其他分享 >09-寄存器

09-寄存器

时间:2023-05-24 21:00:52浏览次数:61  
标签:异步 同步 复位 09 sys 信号 寄存器 时钟

1.寄存器

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

2.FPGA设计

  • KEY1控制LED6,按键按下,LED灯点亮;按键松开,LED灯熄灭

2.1 框图和波形图

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

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

同步复位

  • 同步是工作时钟同步复位的意思,当时钟的上升沿或者下降沿到来时,检测到按键的复位操作才是有效的

    同步复位理解:复位信号与时钟上升沿不同步,此时,输出不会随复位信号的变化立即变化,直到时钟上升沿采样到复位信号,才发生变化

异步复位

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

时序逻辑过滤毛刺

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

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

时序逻辑延迟打拍

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

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项目,添加文件,进行全编译
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


推荐使用异步复位

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,sys,信号,寄存器,时钟
From: https://www.cnblogs.com/Icer-newer/p/17426358.html

相关文章

  • svn: E200009: Commit failed (details follow)/both sides of the move must be comm
    今天在提交SVN的时候发生了如下错误,分析了一下原因,试了好几次才找到解决方法,失败原因如下:svn:E200009:Commitfailed(detailsfollow):svn:E200009:Cannotcommit'G:\jiaoyu\src\main\resources\templates\www\xgwy\company\company_content.html'becauseitwasmovedfr......
  • 力扣第409:最长回文串
    力扣第409:最长回文串回文串,正倒着读是一样的代码抄录自>我不想当菜鸟点击查看java代码```classSolution{publicintlongestPalindrome(Strings){int[]letter=newint[128];char[]cs=s.toCharArray();for(charc:cs){......
  • 09获取权限源码阅读记录
    类关系图属于Volo.Abp解决方案的类:PermissionDefinitionManager属于Volo.Abp.PermissionManagement解决方案的类:PermissionsControllerPermissionAppServicePermissionManagerPermissionManagementProviderEfCorePermissionGrantRepository属于Volo.Abp.Identity解......
  • 汇编-寄存器
    8086CPU有14个寄存器:AX  BX  CX   DX  SI  DI   SP   BP   IP   CS   SS   DS   ES   PSW8086CPU所有的寄存器都是16位的,可以存放两个字节       ......
  • python 基础day09 字符编码
    字符编码前提:字符编码只跟文本数据和字符串有关系,他跟视频文件、音频文件等无关为什么要有字符编码?计算机内部只认识01二进制数据,但是,我们现在在计算机上写的各种各样的字符,为什么都能正常显示?字符编码:它的内部记录着字符和数字之间的对应关系eg:0--->a1---->b00--->aa0......
  • 1109. 请求与响应
    一、HttpRequest对象服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpRequest对象的API。二、GET和POST请求在HTML中,form表单的作用是收集标签的内容,<form>...</form>中间可以由访问者添加类似......
  • 1099 Build A Binary Search Tree
    题目:ABinarySearchTree(BST)isrecursivelydefinedasabinarytreewhichhasthefollowingproperties:Theleftsubtreeofanodecontainsonlynodeswithkeyslessthanthenode'skey.Therightsubtreeofanodecontainsonlynodeswithkeysg......
  • day09 字符编码
    第六节字符编码【一】文本编辑器与Python解释器原理字符串类型、文本文件的内容都是由字符组成的,但凡涉及到字符的存取,都需要考虑字符编码的问题。【1】三大核心硬件所有软件都是运行硬件之上的与运行软件相关的三大核心硬件为cpu、内存、硬盘#1、软件运行前,软件的......
  • 【PHP兴趣部落-09】递归转义
    一、定义addslashes()函数返回在预定义字符之前添加反斜杠的字符串。预定义字符是:单引号(’)双引号(”)反斜杠(\)NULL注释:默认地,PHP对所有的GET、POST和COOKIE数据自动运行addslashes()。所以您不应对已转义过的字符串使用addslashes(),因为这样会导致双层转义。遇到这种情况时可......
  • Python 4-09 time
    time 在 Python 中与时间处理有关的模块包括 time,datetime 以及 calendar。在 Python 中,用三种方式来表示时间,分别是时间戳、格式化时间字符串和结构化时间。时间戳(timestamp):1970年1月1日之后的秒,可以通过 time.time() 获得。时间戳是一个浮点数,可以进行加减运算,但......