【时序逻辑】-多个D触发器串联


 

 

一、设计文件

第一种写法(我最开始写的)

 //======================================================================
 // --- 名称 : D4
 // --- 作者 : liuxiaoyan_fpga
 // --- 日期 : 2022-03-29
 // --- 描述 : 设计一个4bit串联触发器电路
 // --- 用途 : 需要4个D触发器
 //======================================================================
 
module D4 

//---------------------<端口声明>---------------------------------------

(

    input            D0                    , 

    input            Clk                    , 
    input            Rst_n                     ,    
    
    
    output        reg Q0                     ,
    output        reg Q1                     ,
    output        reg Q2                     ,
    output        reg Q3                     
    
);

always @(posedge Clk or negedge Rst_n) begin
    if (Rst_n == 1'b0) 
        Q0 <= 1'b0;
    else 
    Q0 <= D0;
end

always @(posedge Clk or negedge Rst_n) begin
    if (Rst_n == 1'b0) 
        Q1 <= 1'b0;
    else 
    Q1 <= Q0;
end

always @(posedge Clk or negedge Rst_n) begin
    if (Rst_n == 1'b0) 
        Q2 <= 1'b0;
    else 
    Q2 <= Q1;
end

always @(posedge Clk or negedge Rst_n) begin
    if (Rst_n == 1'b0) 
        Q3 <= 1'b0;
    else 
    Q3 <= Q2;
end
    
endmodule 

 

 

 

第二种写法(正点原子)

 //======================================================================
 // --- 名称 : D4
 // --- 作者 : liuxiaoyan_fpga
 // --- 日期 : 2022-03-29
 // --- 描述 : 设计一个4bit串联触发器电路
 // --- 用途 : 需要4个D触发器
 //======================================================================
 
module D4 

//---------------------<端口声明>---------------------------------------

(
input Clk,
input Rst_n,
input X,

output letout

);

reg Q0;
reg Q1;
reg Q2;
reg Q3;

always@(posedge Clk or negedge Rst_n)begin
if(Rst_n == 1'b0)begin
    Q0 <= 1'b0;
    Q1 <= 1'b0;
    Q2 <= 1'b0;
    Q3 <= 1'b0;
    end
    else begin
    Q0 <= X;
    Q1 <= Q0;
    Q2 <= Q1;
    Q3 <= Q2;
    end

    
    
end    
assign letout = Q3;

endmodule 

二、仿真文件

`timescale 1ns/1ns

module D4_tb;
reg Clk;
reg Rst_n;
reg X;
wire letout;

initial begin
Clk = 1'b0;
Rst_n = 1'b0;
# 20;
Rst_n = 1'b1;
X = 1'b0;

end

always #10 Clk = ~ Clk;
always #12 X = {$random}%2;



D4 a1
(
.Clk(Clk),
.Rst_n(Rst_n),
.X(X),

. letout(letout)

);



endmodule 

三、波形

4个D触发器

1. 第一个触发器的输出和输入:输出只需要等输入改变后,紧接着那个时钟上升沿就改变

2.由于第一个触发器是在时钟上升沿改变的,那第二个触发器就需要等到完整的下一个时钟上升沿,于是就形成了输出比输入慢一节拍(一个时钟周期)

 

四、RTL

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM