時鐘使能電路是同步設計的重要基本電路,在很多設計中,雖然內部不同模塊的處理速度不同,但是由于這些時鐘是同源的,可以將它們轉化為單一的時鐘電路處理。在FPGA的設計中,分頻時鐘和源時鐘的skew不容易控制,難以保證分頻時鐘和源時鐘同相。故此推薦采用使用時鐘使能的方法,通過使用時鐘使能可以避免時鐘“滿天飛”的情況,進而避免了不必要的亞穩(wěn)態(tài)發(fā)生,在降低設計復雜度的同時也提高了設計的可靠性。
我們可以利用帶有使能端的D觸發(fā)器來實現時鐘使能的功能。

在上圖中clk1x是CLK的四分頻后產生的時鐘,clk1x_en是與clk1x同頻的時鐘使能信號,用clk1x_en作為DFF的使能端,D端的數據只有在clk1x_en有效地時候才能打入D觸發(fā)器,從而在不引入新時鐘的前提,完成了下圖電路一致的邏輯功能。

在某系統(tǒng)中,前級數據輸入位寬為8,而后級的數據輸出位寬32,我們需要將8bit的數據轉換成32bit的數據,因此后級處理的時鐘頻率為前級的1/4,若不使用時鐘時能,則就要將前級時鐘進行4分頻來作為后級處理的時鐘,這種設計方法會引入新的時鐘域,為了避免這種情況,我們采用了時鐘時能的方法來減少設計的復雜度。
module gray
(
input clk,
input rst_n,
input [7:0] data_in,
output reg [31:0] data_out,
output reg clk1x_en
);
reg [1:0] cnt;
reg [31:0] shift_reg;
always @ (posedge clk,negedge rst_n)
begin
if(!rst_n)
cnt <= 2'b0;
else
cnt <= cnt +1'b1;
end
always @ (posedge clk,negedge rst_n)
begin
if(!rst_n)
clk1x_en <= 1'b0;
else if(cnt ==2'b01)
clk1x_en <= 1'b1;
else
clk1x_en <= 1'b0;
end
always @ (posedge clk,negedge rst_n)
begin
if(!rst_n)
shift_reg <= 32'b0;
else
shift_reg <= {shift_reg[23:0],data_in};
end
always @ (posedge clk,negedge rst_n)
begin
if(!rst_n)
data_out<= 32'b0;
else if(clk1x_en==1'b1)//僅在clk1x_en為1時才將shift_reg的值賦給data_out
data_out<=shift_reg;
end
endmodule

編輯:hfy
-
FPGA
+關注
關注
1655文章
22286瀏覽量
630296 -
D觸發(fā)器
+關注
關注
3文章
181瀏覽量
49532 -
時鐘電路
+關注
關注
10文章
246瀏覽量
52243
發(fā)布評論請先 登錄
NVIC中斷使能與禁止使能
時鐘移項電路加速模塊的設計
瑞薩RA系列FSP庫開發(fā)實戰(zhàn)指南(29)CGC(時鐘生成電路)時鐘控制
PLL技術在FPGA中的動態(tài)調頻與展頻功能應用
Leadway電源模塊的使能信號是如何作用的
電容在時鐘電路中的應用有哪些
時鐘電路的組成與設計要點介紹
FPGA時序約束之設置時鐘組

FPGA的設計中的時鐘使能電路
評論