基于FPGA的数字电路实验:时序电路之触发器

可编程逻辑

1363人已加入

描述

时间的重要性不言而喻,加上时间这个维度就如同X-Y的平面加上了一个Z轴,如同打开了一个新的世界。所以今天我们就要来聊聊时序电路。

在时序电路中,电路任何时刻的稳定状态输出不仅取决于当前的输入,还与前一时刻输入形成的状态有关。是不是有点绕?这样,下次当你和对象吵架时,她把以前各种旧账翻出来一起算的时候,你别急着还嘴,赶紧趁机温习一下时序电路的概念,也许你想着想着就笑了。

总之……时序电路是有记忆功能的,因此可以设计成储存电路用来保存信息。常用的存储电路有两类:一类采用电平触发,我们称为锁存器(Latch);另一类通过边沿信号触发,也就是触发器(Flip-flop)。中文译法经常有一种不明觉厉的感觉有木有。

事实上,触发器的工作原理并不复杂。首先我们来看图1。

FPGA开发板

图1 D触发器框图和内部门电路结构

图1所示的是一个D类触发器的框图和内部门电路结构。框图中输入端的三角形代表着时钟信号边沿触发方式。同学们可以通过门电路结构研究D类触发器的工作原理,在这里我们直接给出它的状态特性表:

FPGA开发板

其中,向上的箭头表示时钟信号从低升至高电平时触发有效;反之,从高电平降至低电平的边沿触发方式则由向下的箭头表示。现在我们给出D类触发器的Verilog代码:

module dff2
  (                                             
     input clk,d,                 
     output reg q,
     output wire qbar
  );

    assign qbar = ~q;
    always @(posedge clk)   // 只有clk上升沿时刻触发
       q <= d;             // 只有当触发生效时,才将d的值赋予给q
  endmodule

上述代码的意思差不多等效于:你不起床就别想让我起床。就算你起床了,如果没把早餐做好,我还是不起床。

现在,我们已经有了代码,如何在小脚丫上进行实验呢?其他的好说,问题是我们要处理一下时钟信号的问题,也就是代码中的clk变量。

通常,输入变量clk直接会被指定到小脚丫的板载时钟信号上。不过,小脚丫的固定时钟信号频率为12兆赫兹,比人眼能分辨出的频率快近几十万倍,所以我们根本不可能观察到任何变化。

在我们学习时钟分频之前,观察本次实验的最好办法,就是通过手动时钟信号。因此,我们将变量分配至小脚丫的以下管脚:

FPGA开发板

理论上说,将上述程序及管脚分配导入至小脚丫后,可以通过调节开关SW1和SW4来观察q和qbar的状态(L1和L2)。

我知道很多人手里没有小脚丫,并且也懒得去www.stepfpga.com上购买,所以我就抛一个问题让大家隔空思考一下(才知道微信把公众号留言功能给关闭了):假如说,这个程序在仿真上的结果是正确的,但是导入小脚丫之后就不正常工作了,你觉得会是什么原因?

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分