我是靠谱客的博主 爱笑芹菜,最近开发中收集的这篇文章主要介绍使用D触发器完成带有异步清零clrn和同步使能wen的8位寄存器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

要求:
在这里插入图片描述
看到这个题,首先我们应该先考虑D触发器的实现:

`timescale 1ns / 1ps

module dffe(
    input clk,
    input clrn,wen,
    input d,
    output reg q
);
    always@(posedge clk or negedge clrn)    //因为是异步清零,也需要加到always中
    begin
    if(clrn == 1'b0)                        //如果是异步清零,直接将q赋值位0
        q <= 1'b0;
	else if(wen == 1'b0)                   //同步使能,需要跟随时钟周期
		q <= d;
	else                                   //保持
		q <= q;
    end
endmodule
  1. 首先,这里开始涉及到时序电路,我们需要在always语句块中添加时钟信号的上升沿/下降沿
  2. 异步清零是不论时钟信号如何,只要是使能端有效(这里是低有效)就需要清零,所以我们必须将信号也加到always语句块中;并且因为always不能边缘触发和电平触发同时存在(也就是有的有posedge或negedge,有的没有),所以我们还需要为使能端加上一个边缘,因为是低有效,所以是下降沿触发。
  3. 同步使能就需要看时钟信号了,信号不到位,怎么都不行。

因为是八位寄存器,所以我们需要创建8个D触发器来构成一个寄存器,也就是需要调用我们写好的D触发器8次……

模块调用的细节

这样我们就只需要一个顶层模块将整体穿起来,就实现了我们的功能。

module reg8(
    input clk,
    input clrn,
    input[7:0] d,
    input wen,
    output[7:0] q
);

dffe  the_dffe0(clk,clrn,wen,d[0],q[0]);
dffe  the_dffe1(clk,clrn,wen,d[1],q[1]);
dffe  the_dffe2(clk,clrn,wen,d[2],q[2]);
dffe  the_dffe3(clk,clrn,wen,d[3],q[3]);
dffe  the_dffe4(clk,clrn,wen,d[4],q[4]);
dffe  the_dffe5(clk,clrn,wen,d[5],q[5]);
dffe  the_dffe6(clk,clrn,wen,d[6],q[6]);
dffe  the_dffe7(clk,clrn,wen,d[7],q[7]);

endmodule

这个例子就属于比较经典的模块调用了,我们也要有对模块的定义,其实每一个模块之间本身是等价且是同时运行的,是需要我们人为规定谁是主模块,谁需要调用其他模块来实现功能的。

最后

以上就是爱笑芹菜为你收集整理的使用D触发器完成带有异步清零clrn和同步使能wen的8位寄存器的全部内容,希望文章能够帮你解决使用D触发器完成带有异步清零clrn和同步使能wen的8位寄存器所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部