ভিএইচডিএল: সংশ্লেষণের জন্য পূর্ণসংখ্যা?


17

আমি যদি সংশ্লেষণ সংকেত এবং বন্দর ইত্যাদির জন্য ভিএইচডিএলে পূর্ণসংখ্যার ব্যবহার করা উচিত তখন আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি

আমি শীর্ষ স্তরের বন্দরে std_logic ব্যবহার করেন, কিন্তু অভ্যন্তরীণভাবে আমি ছিল সব জায়গায় বেশি সীমাকৃত পূর্ণসংখ্যার ব্যবহার করে। যাইহোক, আমি লোকদের কয়েকটি রেফারেন্সে হোঁচট খেয়েছি যে, আপনার কেবল সংশ্লেষ-লক্ষ্যযুক্ত কোডের জন্য স্বাক্ষরযুক্ত / স্বাক্ষরযুক্ত ব্যবহার করা উচিত।

স্বাক্ষরবিহীন ব্যবহার করার জন্য আমি গিয়েছিলাম এবং আমার বর্তমান প্রকল্পটি পুনরায় কাজ করেছি ... এবং, ভাল, এটি লক্ষণীয়ভাবে খারাপ।

পূর্ণসংখ্যা ব্যবহার করা কি খারাপ অভ্যাস? সমস্যা কি? সরঞ্জামটি কত প্রস্থের সাথে পূর্ণসংখ্যার মানচিত্র করবে সে সম্পর্কে কিছু অনিশ্চয়তা রয়েছে?


ভাল প্রশ্ন. আমি নিজেই ভাবছিলাম। আমি পুরো জায়গা জুড়ে পূর্ণসংখ্যার, ধনাত্মক এবং অন্যান্য ধরণের ব্যবহার দিয়ে শুরু করেছিলাম তবে এটি সঠিকভাবে সংশ্লেষিত হওয়ার জন্য খুব লোমশ হয়েছে। আমি আশা করছি যে কেউ কেন একটি উচ্চ টাইপ করা ভাষায় std_logic ব্যবহার করে শেষ করতে পারে তা ব্যাখ্যা করতে পারে।
ট্রিগভে লগস্টেল

1
হ্যাঁ। পাগল কি তাই না? সর্বাধিক বর্তমান অনুশীলনে টাইপ করার ফলে প্রচুর ডেটা_আই <= TO_UNSIGNED (32010, ডেটা_আই'এলএনজিটি) হয়ে থাকে; টাইপ স্টাফ ... যে কাউকে বিরক্ত করে না? :) এটি নিশ্চিতভাবে অনেকগুলি অপ্রয়োজনীয় লাগেজ লাগবে। (বিশেষত এতে STD_LOGIC_VECTOR () যুক্ত করার সময়) আমি আমার ধরণ এবং আকারটি ঘোষণা করেছি, এটি হওয়া উচিত ডেটা_আই <= 32010; এটি অন্তর্ভুক্ত করা উচিত। স্বাক্ষরিত / স্বাক্ষরযুক্ত, ইত্যাদির মধ্যে যাওয়াই স্পষ্ট হতে পারে এবং ... তবে পূর্ণসংখ্যার উপর একটি সরল দ্ব্যর্থহীন কার্যভার বা অপারেশন অন্তর্ভুক্ত হওয়া উচিত।
দারন

উত্তর:


15

সংশ্লেষণে পূর্ণসংখ্যাগুলি ভাল থাকে, আমি সেগুলি সর্বদা ব্যবহার করি।

আমি শীর্ষ স্তরের বন্দরগুলিতে std_logic ব্যবহার করি তবে অভ্যন্তরীণভাবে আমি পুরো জায়গা জুড়ে রেঞ্জযুক্ত পূর্ণসংখ্যার ব্যবহার করছি

সেটা ঠিক আছে!

সচেতন থাকা:

  • আপনি প্রথমে সিমুলেট করছেন আপনি নন :) - পূর্ণসংখ্যার ধরণগুলি স্বয়ংক্রিয়ভাবে সিমুলেশনে "রোল-ওভার" করে না - আপনি তাদের জন্য নির্দিষ্ট রেঞ্জের বাইরে চলে যাওয়াই ত্রুটি। আপনি যদি রোল-ওভার আচরণ চান, আপনাকে এটি স্পষ্টভাবে কোড করতে হবে।
  • -(231-1)+ +231-1-231 এবং বহনযোগ্যযোগ্য), যা একটি মাঝে মাঝে কিছুটা ব্যথা। আপনি "বড়" সংখ্যা ব্যবহার করতে হবে, তাহলে আপনি ব্যবহার করতে হবে unsignedএবং signed
  • আপনি যদি তাদের সীমাবদ্ধ না করেন, আপনি পারেন কখনও কখনও 32-বিট কাউন্টার দিয়ে শেষ যেখানে কম হবে (সিন্থ এবং পরবর্তী সরঞ্জামগুলি যদি "দেখতে না পারে" তবে তারা বিটগুলি অপ্টিমাইজ করতে পারে)।

উল্টো দিকে:

  • স্বাক্ষরযুক্ত / স্বাক্ষরযুক্ত ভেক্টরগুলির তুলনায় এগুলি সিমুলেট করতে আরও দ্রুত
  • তারা সিমুলেশনটিতে স্বয়ংক্রিয়ভাবে রোল ওভার করে না (হ্যাঁ, এটি উভয় তালিকায় রয়েছে :) :) এটি সুবিধাজনক - উদাহরণস্বরূপ আপনি তাড়াতাড়ি সতর্কতা পান যে আপনার কাউন্টারটি খুব ছোট।

আপনি যখন ভেক্টর প্রকারগুলি ব্যবহার করেন, আপনি ব্যবহার করেন ieee.numeric_std, নাieee.std_logic_arith তাই না?

আমি integerযেখানে পারি সেগুলি ব্যবহার করি তবে আমি যদি স্পষ্টভাবে "রোল-ওভার এন-বিট কাউন্টারগুলি" চাই তবে আমার ব্যবহারের প্রবণতা রয়েছে unsigned


হ্যাঁ, আমি সংখ্যার_এসটিডি ব্যবহার করি। আমি অনুমান করি আমি বেশিরভাগ শিলিনেক্স সরঞ্জাম সম্পর্কে চিন্তিত ... তারা এখনও সব কিছুর জন্য std_logic_vector উত্পন্ন করে এবং "UNSIGNED" এমনকি বাক্যবিন্যাসের হাইলাইটেও নেই।
দারন

1
@ সেনারন সিনট্যাক্স হাইলাইট করার বিষয়ে চিন্তা করবেন না। সম্পাদক এবং এর সিনট্যাক্স হাইলাইটার সংশ্লেষ সরঞ্জাম থেকে সম্পূর্ণ আলাদা সফ্টওয়্যার। এছাড়াও, স্বাক্ষরবিহীন একটি ডেটাটাইপ "ঠিক"। এটি কোনও ভাষা নয়, একটি মানক গ্রন্থাগারের অংশ part
ফিলিপ

পরিবর্তে নিম্ন-গণ্ডি -2 ^ 32 + 1 নয়? যদি এটি -2 ^ 31 - 1 হত তবে কেবলমাত্র একটি একক সংখ্যার প্রতিনিধিত্ব করতে আপনার আরও একটি বিট প্রয়োজন - খুব অদ্ভুত।
ব্রেগাল্যাড

@ ব্রেগাল্যাড - ভাল ক্যাচ - এটি বেশ কিছুদিন ধরে ভুল হয়েছে!
মার্টিন থম্পসন

@ মার্টিনথম্পসন বা আপনি যদি এটি বিয়োগ চিহ্নটি রাখতে চান তবে এটি হিসাবে লিখতে পারেন (2 ^ 32-1)।
ব্রেগাল্যাড

7

জ্যান ডেকালুয়ে পূর্ণসংখ্যা বনাম বিট ভেক্টরগুলির সমস্যার উপর একটি সম্পূর্ণ সাদা কাগজ লিখেছিলেন। আমি আশা করি তার উত্তরগুলি যখনই সম্ভব পূর্ণসংখ্যার ব্যবহার করবে । http://www.jandecaluwe.com/hdldesign/counting.html


6

আর সেটের জন্য আরটিএল এর জন্য পূর্ণসংখ্যার ব্যবহার সম্পর্কে কোনও ভুল নেই সেটার , তবে এমন কিছু কারণ রয়েছে যেগুলি কেউ এড়িয়ে চলে। এটি সত্যিকারের সাবজেক্টিভ "সেরা অনুশীলন" সম্পর্কে একটি প্রশ্ন এবং শেষ পর্যন্ত আপনার নিজের পছন্দটি নিজেকে খুঁজে বের করতে হবে। তার সহায়তার জন্য, আমি এ সম্পর্কে আমার অভিজ্ঞতা এবং চিন্তাভাবনাগুলি ভাগ করব।

মূলত , সংশ্লেষণের জন্য লেখার সময়ও আমি (সংবিধানযুক্ত) পূর্ণসংখ্যা ব্যবহারের পক্ষে। আমি মাঝে মাঝে করি, কিন্তু বাস্তবে , সাধারণত আমি বিদ্ধ signedএবংunsigned । আমি কেন বিস্তারিত জানাব।

আপনাকে যাইহোক আপনার ডিজাইনের অংশে ভেক্টরাইজড ডেটাটাইপগুলি ব্যবহার করতে বাধ্য করা হবে:

  • খুব সহজেই কোনও বিক্রেতা-আইপি বা তৃতীয় পক্ষ-আইপি ব্যবহার করবে integer পোর্টগুলির জন্য টাইপ

  • উদাহরণস্বরূপ ব্লকআরমের মাধ্যমে ডেটা প্রেরণ করার সময়, আপনি যদি এটি অনুমান করেন এবং অতএব কোনও আইপি / ম্যাক্রো / আদিমকে কখনও ইন্টারফেসের প্রয়োজন হয় না, আপনাকে সম্ভবত সম্ভবত ভেক্টরাইজড ধরণের রূপান্তর করতে হবে

  • এমনকি উপরের দুটি প্রয়োগ না হলেও, আপনাকে বেশিরভাগ সময় কোনও কোনও সময়ে ইন্টারফেস করতে হবে (একটি শীর্ষ স্তরের বন্দর, অন্য কিছু না হলে)

যেহেতু আপনি integerসম্পূর্ণ ডিজাইনের জন্য ব্যবহার করতে পারবেন না , আপনি এগুলি একসাথে এড়িয়ে যেতে চাইতে পারেন, কারণ:

  • কিছু পয়েন্টে, আপনাকে যে কোনও উপায়ে রূপান্তর করতে হবে integerএবং এটি প্রথম স্থানে ব্যবহারের বিন্দুটির কিছু অংশ কেড়ে নেবে

  • এছাড়াও, সিমুলেশনের জন্য, এই রূপান্তরগুলি সাধারণত পুনরায় সেট করার আগে, বা অন্য সময়ে ভেক্টরগুলির সাথে 'U'বা 'X'ডেকে আনা হবে এবং এই জাতীয় প্রতিটি ফাংশন কল আপনার সিমুলেশন সতর্কতা / প্রম্পটকে বিশৃঙ্খলা করে প্যাকেজ ফাংশন থেকে একটি সতর্কতা বার্তা উত্পন্ন করবে such

ব্যবহারের ত্রুটিগুলিinteger :

  • ভেক্টরাইজড ধরণের বিপরীতে, পূর্ণসংখ্যাগুলি থাকে না 'U'এবং থাকে'X' ; আমি তাদের সিমুলেশনগুলিতে খুব সহায়ক বলে মনে করি। আপনি দেখতে পাচ্ছেন কীভাবে অবিচ্ছিন্ন সংকেতগুলি ডিজাইনের মাধ্যমে প্রচার করে এবং আপনি যদি রিসেটের পরে প্রচুর অবিস্মরণীয় সংকেত দেখতে পান তবে আপনি সম্ভবত প্রতিক্রিয়া দেখবেন। পূর্ণসংখ্যা ব্যবহার করা হলে এটি হবে না।

  • পূর্ণসংখ্যার সাথে, নিম্ন-ওভারফ্লোতে যুক্ত বা বিয়োগ করার সময় সিমুলেশন / সংশ্লেষণের ভুল-মিলের ঝুঁকি বেশি থাকে। (যেমন ইতিমধ্যে অন্য কারও দ্বারা চিহ্নিত করা হয়েছে))

যেসব সাধারণ ক্ষেত্রে আমি integerসত্যিই একটি ভাল বিকল্প বলে মনে করি:

  • আপনি চিপস্কোপ / সিগন্যালটিপ ইত্যাদির মাধ্যমে নিরীক্ষণ করেন এমন ডিবাগ সংকেত / কাউন্টারগুলির জন্য

  • কাউন্টারগুলির সামগ্রিকভাবে অভ্যন্তরীণ উপস্থাপনা, যা আপনার নিজের কোডের মধ্যে বা বাইরে কখনও যায় না। / সংকেত গঠনের সার্চ হ্যাঁ, এই ক্ষেত্রে যেমন হয়, যদি আপনি একটি হিসাবে FIFO লেখার এবং আপনি মৃত বিয়োগ লিখেছেন হয় full, empty, almostFullইত্যাদি (তবে পয়েন্টার উপর arithmetics এই ক্ষেত্রে মৃত বিয়োগ চেয়ে ভাল উপায়। ..)

আমার নিজের সিদ্ধান্তে: আমি কখনও কখনও পূর্ণসংখ্যার ব্যবহার করি তবে খুব কম, এবং বেশিরভাগ উপরে বর্ণিত ক্ষেত্রে। আমি ব্যবহার অনেক ওভারহেড দেখতে না unsignedএবং signedপূর্ণসংখ্যা পরিবর্তে, সেইজন্য এবং, সাধারণত তাদের বিদ্ধ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.