• FPGA中时序和组合逻辑语法对应的时钟波形


    针对时序逻辑电路和组合逻辑电路,如果有信号发生变化,那么它们相对于整个电路的时钟clk是如何的呢?要不要考虑clk呢?
    主要仿真了一下几个语句
    //时序逻辑电路
    always@(posedge clk or negedge rst)
    这个是典型的时序逻辑电路,当括号的敏感信号变化时,always的语句块才会执行;这里的执行条件是复位信号有复位 或者 在时钟信号的上升沿到来。是严格和clk信号对齐的。
    同步时序电路设计中需要注意的是,当外部有一个异步输入信号发生改变时,如果我们在clk的上升沿去采这个信号,然后保存到寄存器中,那么这个信号至少要保存一个clk的时钟周期。
    在这里插入图片描述
    如上图所示,最上面的是clk信号,第3行是外部输入的异步信号,信号从1变成0,是在clk的一个随机时刻发生的,在下一个clk的上升沿,保存到寄存器中,也就是下面的波形。

    如果信号从1变成0,然后又很快的变成了1,那么再下一个clk的上升沿将不会采集到这个变为0的信号了,如下仿真波形。
    在这里插入图片描述
    如上图所示,clk的时钟周期是20ns,但是这个变化的低脉冲只持续了5ns,因此在下一个clk上升沿的时候,采集到的电平还是1,就丢失了这个低电平信号。这种就会导致同步信号失败。

    //组合逻辑电路
    assign
    举个例子:assign d = c;
    注意这里的赋值表达式,用的是阻塞赋值的“=” ,这个是组合逻辑专用的符号。这里当信号c变化时,d是立即跟着变化的,不会考虑当前的时钟clk在哪里,是不是在上升沿什么的。统统不考虑,只要c变化,d立马跟着变。

    //组合逻辑电路
    always@(*)
    当always后面的敏感信号,只是电平敏感信号时,及输入信号的值发生改变,那么就会执行下面语句块中的内容,同样是不考虑clk到哪里了,这个和assign是一样的

    附上测试仿真工程:可自行测试
    链接:https://pan.baidu.com/s/1wrGS3jjQ7TMuaqvS0NcgDA
    提取码:pa0b

  • 相关阅读:
    《算法系列》之排序
    如何在国庆抓住收益红利?这家酒店集团最佳实践值得一看
    VSCode快速设置heder和main函数
    Faster R-CNN详解
    变量名命名的艺术
    “深入理解Nginx的负载均衡与动静分离“
    基于java+SpringBoot+VUE+Mysql社区家庭医生服务系统
    技术分享 | TiUP工具 - TiDB集群滚动升级核心流程解析
    C# 并发编程
    Flask(Jinja2) 服务端模板注入漏洞(SSTI)
  • 原文地址:https://blog.csdn.net/Anitawen/article/details/125616906