2012-09-09 15 views
5

मैं एक Verilog प्रोग्राम vhdl में अनुवाद करने की कोशिश कर रहा हूं और एक बयान में ठोकर खाई है जहां verilog प्रोग्राम में एक प्रश्न चिह्न (?) ऑपरेटर का उपयोग किया जाता है।Verilog प्रश्न चिह्न (?) ऑपरेटर

निम्नलिखित Verilog कोड है;

1 module music(clk, speaker); 
2 input clk; 
3 output speaker; 
4 parameter clkdivider = 25000000/440/2; 

5 reg [23:0] tone; 
6 always @(posedge clk) tone <= tone+1; 

7 reg [14:0] counter; 
8 always @(posedge clk) if(counter==0) counter <= (tone[23] ? clkdivider-1 : clkdivider/2-1); else counter <= counter-1; 

9 reg speaker; 
10 always @(posedge clk) if(counter==0) speaker <= ~speaker; 
11 endmodule 

मुझे 8 वीं लाइन नहीं समझती है, क्या कोई इस पर कुछ प्रकाश डाल सकता है? मैंने एसिड-वर्ल्ड वेबसाइट पर पढ़ा है कि प्रश्न चिह्न जेड चरित्र के लिए वेरिलोग वैकल्पिक है। लेकिन मुझे समझ में नहीं आता कि इसका संदर्भ इस संदर्भ में क्यों किया जा रहा है।

तरह

उत्तर

12

यह एक ternary operator है संबंध है। यह के लिए आशुलिपि है एक अगर बयान

स्वरूप:

condition ? if true : if false 

उदाहरण:

tone[23] ? clkdivider-1 : clkdivider/2-1 

की तरह कुछ करने के लिए अनुवाद करता है (सही नहीं वाक्यविन्यास लेकिन मुझे लगता है कि आप इसे मिल जाएगा):

if tone[23] is 1, counter = clkdivider-1 
else counter = clkdivider/2-1 

यहां 2 to 1 MUX using if statement and ternary operator के दो उदाहरण दिए गए हैं।

ASIC दुनिया वेबसाइट पर, यह Conditional Operators

4

तहत कवर किया जाता लेखन, उदा का एक अन्य तरीका निम्नलिखित Verilog:

q <= tone[23] ? clkdivider-1 : clkdivider/2-1; 

VHDL में होगा:

q <= clkdivider-1 when tone[23] else clkdivider/2-1; 
+0

यही कारण है कि घोषणाओं सवालों में इतना जरूरी है। एक शर्त को एक बुलियन मूल्य का मूल्यांकन करना चाहिए। एकमात्र तरीका स्वर [23] उस मानदंड को पूरा करेगा यदि स्वर एक BOOLEAN_VECTOR है। – user1155120

संबंधित मुद्दे