खोज…


वाक्य - विन्यास

  • हमेशा @ (posedge clk) शुरू / * कथन * / अंत
  • हमेशा @ (बदला हुआ clk) शुरू होता है / * कथन * / अंत
  • हमेशा @ (posedge clk या posedge reset) // सिंक्रोनस रीसेट की तुलना में कम कुशलता से संश्लेषित कर सकता है

सरल काउंटर

एक FPGA शैली फ्लिप-फ्लॉप आरंभीकरण का उपयोग कर एक काउंटर:

module counter(
    input clk,
    output reg[7:0] count
)
initial count = 0;
always @ (posedge clk) begin
    count <= count + 1'b1;
end

ASIC संश्लेषण के लिए उपयुक्त अतुल्यकालिक रीसेट का उपयोग करके लागू किया गया एक काउंटर:

module counter(
  input            clk,  
  input            rst_n, // Active-low reset
  output reg [7:0] count
)
always @ (posedge clk or negedge rst_n) begin
  if (~rst_n) begin
    count <= 'b0;
  end
  else begin
    count <= count + 1'b1;
  end
end

इन उदाहरणों में प्रक्रियात्मक अवरोध हर बढ़ते घड़ी के किनारे पर count जाते हैं।

गैर-अवरुद्ध कार्य

एक गैर-ब्लॉकिंग असाइनमेंट ( <= ) का उपयोग एज-सेंसिटिव always ब्लॉक के अंदर असाइनमेंट के लिए किया जाता है। एक ब्लॉक के भीतर, पूरे ब्लॉक को संसाधित किए जाने तक नए मान दिखाई नहीं देते हैं। उदाहरण के लिए:

module flip(
    input clk,
    input reset
)
reg f1;
reg f2;

always @ (posedge clk) begin
  if (reset) begin // synchronous reset
    f1 <= 0;
    f2 <= 1;
  end
  else begin
    f1 <= f2;
    f2 <= f1;
  end
end
endmodule

यहां गैर-अवरोधक ( <= ) असाइनमेंट के उपयोग पर ध्यान दें। चूंकि पहला असाइनमेंट वास्तव में प्रक्रियात्मक ब्लॉक के बाद तक प्रभावी नहीं होता है, दूसरा असाइनमेंट वह करता है जो वास्तव में इरादा है और वास्तव में दो चर को स्वैप करता है - एक अवरुद्ध असाइनमेंट ( = ) या अन्य भाषाओं में असाइनमेंट के विपरीत; ब्लॉक में दूसरे असाइनमेंट के दाईं ओर f1 अभी भी मूल मूल्य है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow