कोडन शैली verilog>: यदि, और वी.एस. मामला?

X

xiongdh

Guest
कैसे के बारे में इस दो कोडन शैली:
1 पहनाव:
= (dmem_sfr_cs == 1 int_sfr_data_in निर्दिष्ट)?dmem_sfr_dout:
(cmem_sfr_cs 1 ==)?cmem_sfr_dout:
(dma_sfr_cs 1 ==)?dma_sfr_dout:
(sec_sfr_cs 1 ==)?sec_sfr_dout:
(expi_sfr_cs 1 ==)?expi_sfr_dout:
evti_sfr_dout;
////////////////////////////////////////////////// ///////////////
2 पहनाव:
मामले sec_sfr_cs ((, expi_sfr_cs, dma_sfr_cs, cmem_sfr_cs, dmem_sfr_cs))
5'b00001: int_sfr_data_in dmem_sfr_dout =;
5'b00010: int_sfr_data_in cmem_sfr_dout =;
5'b00100: int_sfr_data_in dma_sfr_dout =;
5'b01000: int_sfr_data_in sec_sfr_dout =;
5'b10000: int_sfr_data_in expi_sfr_dout =;
डिफ़ॉल्ट: int_sfr_data_in else_out =;
endcase
////////////////////////////////////////////////// ////////
स्थिति की अनुमति नहीं है कि एक से अधिक expi_sfr_cs, sec_sfr_cs, dma_sfr_cs, cmem_sfr_cs के नियंत्रण के संकेत, dmem_sfr_cs '1 है 'एक ही समय में.
////////////////////////////////////////////
कृपया मुझे कुछ समय और क्षेत्र पर इस दो कोडन शैली पर टिप्पणी.
धन्यवाद.

 
दो पहनाव तेज गति, और अधिक पढ़ने के लिए एक बेहतर तरीका है.

 
पहली प्राथमिकता एनकोडर और दूसरी MUX के लिए कोड को synthesised होगा ...समय के लिए बेहतर है तुम दूसरी कोडन शैली को छड़ी.

 
इन दोनों शैलियों अगर तुम (/ की तरह / अतिरिक्त संश्लेषण निर्देश देना नहीं के बराबर हैं synopsys parallel_case).ध्यान रखें, "मामला" बयान प्राथमिकता है!और पहली शैली नहीं है हमेशा तर्क करना प्राथमिकता एनकोडर.उपकरण काफी चतुर को विशेष परिस्थितियों पहचान है और स्वतः ही एक MUX अनुमान करना.उदाहरण के लिए,

(sel == 2'b00) = बाहर आवंटित?एक: (sel == 2'b01)?ख: (sel == 2'b10)?ग: (sel == 2'b11)?घ x: ';

'X डिफ़ॉल्ट शाखा में नोट प्रचार एक्स, जो कि एक अच्छा कोडन शैली है मदद कर सकता है.

यह अनुशंसा की जाती है कि यदि बयान प्राथमिकता एनकोडर अनुमान के लिए उपयोग करें.

इसके बाद के संस्करण synopsys आधार पर डीसी, उपकरण अलग अलग परिणाम हो सकता है.

 
शैली-1 लेकिन वायर पहनाव-2 रजिस्टर के लिए प्रयोग किया जाता है के लिए प्रयोग किया जाता है.सामान्य शैली में-2 समय पर विचार के लिए और अधिक विश्वसनीय है.हालांकि, वहाँ डिजाइन के कुछ मामलों कि इस तरह के कोड व्याख्याता के रूप में सीधे तार उत्पादन की जरूरत है.कुछ महत्वपूर्ण डिजाइन में, पहनाव 1-पहनाव अधिक से अधिक समय-2 जवाब मिल गया.उदाहरण के एक शैली के कुशल-1 एनआईओएस द्वितीय डिजाइन है दिखाने के लिए.Cpu.v के पिछले भाग में स्पष्ट रूप से देखा जा सकता है शैली का उपयोग कर प्रदर्शन सुधारने के उद्देश्य के लिए 1 से कोड दुभाषिए की हो चुकी है.इसके बजाय, एनआईओएस की ऐसी 3.1 एनआईओएस के रूप में पुराने संस्करण का उपयोग कर रहा है पहनाव-कोड व्याख्याता के रूप में 2.

 
पहनाव 2 लागत अधिक क्षेत्र और अगर मैं इस्तेमाल / timing.even / parallel_case full_case directive.But synopsys अगर मैं ऐसा लिखने के बाद और directive.it लागत क्षेत्र संश्लेषण के साथ ही 1 शैली के रूप में, शैली 1.Why से भी कम समय? ?
मामला ((, expi_sfr_cs sec_sfr_cs, dma_sfr_cs, cmem_sfr_cs, dmem_sfr_cs)) / / parallel_case full_case synopsys
5'b00001: int_sfr_data_in dmem_sfr_dout =;
5'b00010: int_sfr_data_in cmem_sfr_dout =;
5'b00100: int_sfr_data_in dma_sfr_dout =;
5'b01000: int_sfr_data_in sec_sfr_dout =;
5'b10000: int_sfr_data_in expi_sfr_dout =;
5'b00000: int_sfr_data_in else_out =;
endcase

 
इस sytle का प्रयास करें:
casex ((expi_sfr_cs, sec_sfr_cs, dma_sfr_cs, cmem_sfr_cs, dmem_sfr_cs))
5'bxxxx1: int_sfr_data_in dmem_sfr_dout =;
5'bxxx1x: int_sfr_data_in cmem_sfr_dout =;
5'bxx1xx: int_sfr_data_in dma_sfr_dout =;
5'bx1xxx: int_sfr_data_in sec_sfr_dout =;
5'b1xxxx: int_sfr_data_in expi_sfr_dout =;
डिफ़ॉल्ट: int_sfr_data_in else_out =;
endcase

 
दो शैली वे क्या तर्क में बराबर नहीं
xiongdh ने लिखा है:

कैसे के बारे में इस दो कोडन शैली:

1 पहनाव:

= (dmem_sfr_cs == 1 int_sfr_data_in निर्दिष्ट)?
dmem_sfr_dout:

(cmem_sfr_cs 1 ==)?
cmem_sfr_dout:

(dma_sfr_cs 1 ==)?
dma_sfr_dout:

(sec_sfr_cs 1 ==)?
sec_sfr_dout:

(expi_sfr_cs 1 ==)?
expi_sfr_dout:

evti_sfr_dout;

////////////////////////////////////////////////// ///////////////

2 पहनाव:

मामले sec_sfr_cs ((, expi_sfr_cs, dma_sfr_cs, cmem_sfr_cs, dmem_sfr_cs))

5'b00001: int_sfr_data_in dmem_sfr_dout =;

5'b00010: int_sfr_data_in cmem_sfr_dout =;

5'b00100: int_sfr_data_in dma_sfr_dout =;

5'b01000: int_sfr_data_in sec_sfr_dout =;

5'b10000: int_sfr_data_in expi_sfr_dout =;

डिफ़ॉल्ट: int_sfr_data_in else_out =;

endcase

////////////////////////////////////////////////// ////////

स्थिति की अनुमति नहीं है कि एक से अधिक expi_sfr_cs, sec_sfr_cs, dma_sfr_cs, cmem_sfr_cs के नियंत्रण के संकेत, dmem_sfr_cs '1 है 'एक ही समय में.

////////////////////////////////////////////

कृपया मुझे कुछ समय और क्षेत्र पर इस दो कोडन शैली पर टिप्पणी.

धन्यवाद.
 
गुमराह करने के लिए क्षमा करें.मैं नहीं ध्यान से आपके कोड देख रही थी.2 पहनाव अधिक लागत के कारण उपकरण एक 32to1 mux अनुमान करना होगा.है Heartfree समाधान 1 शैली को equalivent जाएगा, लेकिन एक अच्छा कोडन अभ्यास नहीं है (यदि संभव हो तो casex से बचने).अपने 2 शैली के संशोधित संस्करण एक mux अनुमान नहीं (full_case actully निर्देश कहते हैं डिफ़ॉल्ट शाखा के रूप में ध्यान outputs नहीं करेंगे), यह बेहतर अनुकूलन परिणाम होता है.एक गर्म mux कोडिंग के लिए सबसे अच्छा तरीका है और या संयोजन तर्क.

dout = (width = (एक)) & a_out |
( `चौड़ाई (बी)) & b_out |
...

यह प्राथमिकता तर्क तर्क करना नहीं है, यदि आप प्राथमिकता चाहते हैं, का उपयोग करें यदि / और.

 
casex ((expi_sfr_cs, sec_sfr_cs, dma_sfr_cs, cmem_sfr_cs, dmem_sfr_cs))
5'bxxxx1: int_sfr_data_in dmem_sfr_dout =;
5'bxxx1x: int_sfr_data_in cmem_sfr_dout =;
5'bxx1xx: int_sfr_data_in dma_sfr_dout =;
5'bx1xxx: int_sfr_data_in sec_sfr_dout =;
5'b1xxxx: int_sfr_data_in expi_sfr_dout =;
डिफ़ॉल्ट: int_sfr_data_in else_out =;
endcase

इस तरह की जाएगी
= (dmem_sfr_cs == 1 int_sfr_data_in निर्दिष्ट)?dmem_sfr_dout:
(cmem_sfr_cs 1 ==)?cmem_sfr_dout:
(dma_sfr_cs 1 ==)?dma_sfr_dout:
(sec_sfr_cs 1 ==)?sec_sfr_dout:
(expi_sfr_cs 1 ==)?expi_sfr_dout:
evti_sfr_dout;

 

Welcome to EDABoard.com

Sponsor

Back
Top