在設計的過程中,異步複位電路對硬體要求更低,更容易實作,但是使用同步複位電路卻有着諸多優點,使得在實際的工業設計中更多使用的是同步複位電路。使用同步電路一般有以下好處:第一個就是避免毛刺,使用邏輯電路就一定會有毛刺。使用同步電路就有效避免毛刺。第二個就是簡化了時序分析,不然有多個時鐘,那麼時序上就很難分析了。第三個就是減少環境對設計的影響。異步電路易受工作溫度,電壓的影響,器件延時變化很大。最終可能晶片無法使用。
說了同步電路的優點,那麼就說一下怎麼設計。設計的時候使用單時鐘政策(全局時鐘網絡)。這裡對于全局時鐘怎麼做,以後會說到PLL。盡量不要用混合時鐘。舉個栗子,比如你使用以下方法進行采樣,結果發現結果颠倒。
module hunhe_clock( clk,din,d_temp,dout );
input wire clk;
input wire [7:0]din;
output reg [7:0]d_temp;
output reg [7:0]dout;
[email protected](negedge clk)begin
d_temp <= din;
end
[email protected](posedge clk)begin
dout <= d_temp;
end
endmodule
仿真檔案:(這裡的仿真結果看出仿真還是對的,那是因為此時仿真沒有計算建立保持時間等等)
module hunhe_test;
// Inputs
reg clk;
reg [7:0] din;
// Outputs
wire [7:0] d_temp;
wire [7:0] dout;
// Instantiate the Unit Under Test (UUT)
hunhe_clock uut (
.clk(clk),
.din(din),
.d_temp(d_temp),
.dout(dout)
);
always #50 clk = !clk;
integer i;
initial begin
// Initialize Inputs
clk = 0;
din = 15;
// Wait 100 ns for global reset to finish
#100;
for( i = 0;i <= 10;i=i+1) begin
din = din + 1;
#100;
end
// Add stimulus here
end
endmodule
還有一個需要注意的是不要在子產品内部使用計數器分頻産生所需要的時鐘,這樣會導緻時鐘漂移,降低了設計的可靠性,可以使用對時鐘信号進行使能實作所需電路。