我是靠谱客的博主 搞怪导师,最近开发中收集的这篇文章主要介绍序列信号发生器,之D触发器异步复位和异步置位,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        本来只想做一下序列信号发生器的手撕代码,但是综合之后看了一下生成的原理图,觉得无法理解,就研究了一下。

        序列信号发生器很简单,我用移位实现的,代码如下

module xuliexinhao(
    input sys_clk,    //时钟
    input sys_rst_n,  //复位,低有效
    input [9:0] in,   //待输出序列
    output reg out    //输出
    );
reg [9:0] data;
always @(posedge sys_clk,negedge sys_rst_n) begin
    if (!sys_rst_n) begin
        out <= 0;
        data <= in;
    end
    else begin
        out <= data[9];
        data <= {data[8:0],data[9]};
    end
end
endmodule

        这个没有什么好说的很简单,再仿真例化一下就行了,就不贴代码了。

        但是这个生成的电路图是这样的

        难点在于我不理解异步置位,即data寄存器的PRE引脚,对D触发器的异步置位和异步复位讲解的文章不多,所以就写一下。在这里要知道D触发器特性,CLR是异步复位,PRE是异步置位,都是低电平有效优先级CLR>PRE>clk。

        若CLR=0,异步复位有效Q立即输出0,。

        若CLR=1,看PRE,如果PRE=0,则异步置位有效,Q=1;(有人说Q=D,我验证之后发现是不对的),如果PRE=1,Q=D。

        到这里上面就好理解了。当复位有效信号到达时(异步复位),控制两个二选一选择器。选择器S接的就是复位信号sys_rst_n,如果复位S=0,上面选择器输出是输入信号in,下面选择器输出输入信号的取反~in,输入信号是10位的,所以接10个D触发器。当复位有效时,如果in某一位等于0,那么CLR端 输入就为0,对应的输出Q就为0;如果n某一位等于1,CLR端输入就为1,对应的PRE端输入一定为0(有取反),PRE为0,输出立即置1。这样就实现了复位data=in;

        网上对D触发器异步复位和置位讲解的不多,还有讲错的,我也是参考别人的解释,自己得出的结论,若有错误,望批评指正!

最后

以上就是搞怪导师为你收集整理的序列信号发生器,之D触发器异步复位和异步置位的全部内容,希望文章能够帮你解决序列信号发生器,之D触发器异步复位和异步置位所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部