Process Statement block:
Sequential Statement
VHDL में, process statement एक ब्लॉक होता है जहाँ कोड sequential तरीके से execute होता है, यानी एक लाइन के बाद दूसरी लाइन, बिल्कुल वैसे ही जैसे किसी सामान्य programming language में होता है।
इस ब्लॉक में एक sensitivity list होती है, जिसमें वो signals लिखे जाते हैं जिन पर output depend करता है। जब भी उन signals में बदलाव होता है, process दोबारा trigger हो जाता है। इसी कारण इसे sensitivity list कहते हैं, क्योंकि output उन inputs के प्रति "sensitive" होता है।
Verilog में, यही concept always block से represent होता है, जो उन signals में बदलाव होने पर चलता है जो उसकी sensitivity list में हों।
Example: Counter
VHDL
process(clk)
begin
if rising_edge(clk) then
if reset = '1' then
q <= 0;
else
q <= q + 1;
end if;
end if;
end process;
Verilog
always @(posedge clk) begin
if (reset)
q <= 0;
else
q <= q + 1;
Sequential Statements में Delta Delay क्या होता है?
VHDL में, delta delay sequential code (process के अंदर) के लिए भी बहुत important है।
जब आप process के अंदर कोड लिखते हैं, तो statements step by step execute होते हैं।

उदाहरण:
process(clk)
begin
b <= a; -- यह एक delta delay के बाद update होगा
c <= b; -- यह अगले delta delay के बाद update होगा
end process;
अगर a बदलता है, तो simulator पहले b को update करने के लिए schedule करता है (एक delta delay बाद), और फिर c को update करने के लिए schedule करता है (दूसरे delta delay बाद)।
इस ordering की वजह से c को गलती से b का “पुराना” value नहीं मिलता।
महत्वपूर्ण सुझाव: मिथक बनाम तथ्य
अक्सर students को यह गलतफहमी होती है कि process statement का मतलब हमेशा sequential logic होता है और इसमें clock जरूर होगा। यह सच नहीं है।
Process block में कोड sequential तरीके से चलता है, लेकिन यह block combinational logic बनाएगा या sequential logic, यह इस बात पर depend करता है कि sensitivity list में कौन से signals हैं और code कैसे लिखा गया है।
अगर process में केवल input signals sensitivity list में हों और clock न हो, तो यह combinational logic बनाता है।
जैसे कि एक multiplexer:
उदाहरण:
process(a, b, sel)
begin
if sel = '1' then
y <= a;
else
y <= b;
end if;
end process;
यहाँ कोई clock नहीं है। Output y तुरंत update हो जाता है जब भी a, b, या sel बदलते हैं। यह combinational logic है।
लेकिन अगर sensitivity list में clock हो और कोड rising edge पर लिखा हो, तो यह sequential logic बनाता है,
जैसे D flip-flop:
उदाहरण:
process(clk, reset)
begin
if reset = '1' then
q <= '0';
elsif rising_edge(clk) then
q <= d;
end if;
end process;
यहाँ output q सिर्फ clock की edge पर update होता है। यह sequential logic है।
इसलिए असली सच यह है कि process block से combinational logic (जैसे MUX) और sequential logic (जैसे D flip-flop) दोनों ही बनाए जा सकते हैं। Clock sensitivity list में होगा या नहीं, यह इस बात पर depend करता है कि हम किस तरह का logic design करना चाहते हैं।
-
Process statement = Sequential logic
-
और Sequential logic = Clock होना ज़रूरी
लेकिन सच्चाई यह है कि process सिर्फ code को sequentially execute करता है, और उससे दोनों तरह का logic बन सकता है:
-
Clock के बिना → Combinational logic (जैसे MUX)
-
Clock के साथ → Sequential logic (जैसे D Flip-Flop)
इसी वजह से ये doubt अक्सर होता है, खासकर जब कोई VHDL सीखना शुरू करता है।
प्रश्न:
क्या आप एक 4-bit synchronous Serial in Serial out shift register का code लिख सकते हैं, जो एक ही clock cycle में चारों bits को shift कर दे? यह real hardware में practical नहीं है, लेकिन आपकी understanding के लिए यह जरूरी है।