異步電路中,快時鍾域到慢時鍾域的信號同步--脈寬拓展


前文分析請看:https://www.cnblogs.com/shadow-fish/p/13451214.html

單bit信號下的快時鍾到慢時鍾域的信號同步

module test (
    input clka,//快時鍾域100MHZ
    input clkb,//慢時鍾域50MHZ
    input rst,
    input d_in,
    output wire d_out
);
    reg d_out_1;
    reg d_out_2;
    reg d_in_1;
    reg d_in_2;
    wire d_in_3;
    always @(posedge clka or negedge rst) begin//將原來的時序擴展一倍
        if(!rst) begin
            d_in_1 <= 'b0;
            d_in_2 <= 'b0;
            //d_in_3 <= 'b0;
        end
        else begin
            d_in_1 <= d_in;
            d_in_2 <= d_in_1;
            //d_in_3 <= d_in_1 | d_in_2;
        end
    end
assign d_in_3 <= d_in_1 | d_in_2;
always @(posedge clkb or negedge rst) begin if (!rst) begin d_out_1 <= 1'b0; d_out_2 <= 1'b0; end else begin d_out_1 <= d_in_3; d_out_2 <= d_out_1; end end assign d_out = d_out_2; endmodule

測試代碼:

`timescale 1ns/10ps
module test_tb;

reg clka;
reg clkb;
reg d_in;
reg rst;
wire d_out;

test u1(
    .clka(clka),
    .clkb(clkb),
    .rst(rst),
    .d_in(d_in),
    .d_out(d_out)
);

initial begin
    clka = 1'b1;
    clkb = 1'b0;
    rst = 1'b0;
    #6;
    rst = 1'b1;
end
always #5 clka = ~clka;
always #10 clkb = ~clkb;
initial begin
    repeat(5) begin
    #10;
    d_in = 1'b0;
    #10 d_in = 1'b0;
    #10 d_in = 1'b1;
    #10 d_in = 1'b0;
    #10 d_in = 1'b0;
    #20;
end
end
endmodule

仿真結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM