【時序邏輯】-多個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