verilog中clock不使用negedge的三個原因
Verilog中典型的counter邏輯是這樣的:
clk為什么要用posedge,而不用negedge呢?請教丹內先生,答案如下:
always@(posedge clk or negedge reset) begin
if(reset == 1'b0)
reg_inst1 <= 8'd0;
else if(clk == 1'b1)
reg_inst1 <= reg_inst1 + 1'd1;
else
reg_inst1 <= reg_inst1;
end
if(reset == 1'b0)
reg_inst1 <= 8'd0;
else if(clk == 1'b1)
reg_inst1 <= reg_inst1 + 1'd1;
else
reg_inst1 <= reg_inst1;
end
clk為什么要用posedge,而不用negedge呢?請教丹內先生,答案如下:
- 一般情況下,系統中統一用posedge,避免用negedge,降低設計的復雜度,可以減少出錯。
- 在ModelSim仿真中,時鐘是很嚴格的,但是在真實的晶振所產生的clock卻是不嚴格的,比如高電平和低電平的時間跨度不一樣,甚至非周期性的微小波動。如果只使用posedge,則整個系統的節拍都按照clock上升延對齊,如果用到了negedge,則系統的節拍沒有統一到一個點上。上升延到上升延肯定是一個時鐘周期,但是上升延到下降延卻很可能不是半個周期。這都會出現問題。
- FPGA特有的東西:Global CLK。FPGA內部有專門的CLK“線”,和一般的邏輯門的走法不一樣,目的是為了保證整個FPGA片內的時鐘一致,這個東西就叫Global CLK。(這個和negedge有什么關系?沒搞懂)
posted on 2007-04-23 17:40 肥蟲 閱讀(3248) 評論(0) 編輯 收藏 所屬分類: Verilog