ভিএইচডিএল-তে অন্যথায় এবং কেস স্টেটমেন্টের মধ্যে পার্থক্য


11

আমি বুঝতে চাই যে কীভাবে ভিএইচডিএল কোডে বিভিন্ন কনস্ট্রাকশনগুলি আরটিএলে সংশ্লেষিত হয়।

  • সংশ্লেষণকারী সরঞ্জাম দ্বারা কীভাবে কোডটি আরটিএল সার্কিটের মধ্যে অন্তর্ভুক্ত করা হয়েছে সেই ক্ষেত্রে ভিএইচডিএল-এর কোনও প্রক্রিয়া যদি ইফ -এলস কনস্ট্রাক্ট এবং কেস স্টেটমেন্ট কনস্ট্রাক্টসের মধ্যে পার্থক্য বলতে পারেন কেউ ?
  • একাধিক নেস্টেড কেস-এর কথা বিবেচনা করবেন না এবং যদি- প্রক্রিয়াটির ভিতরে বাছাই করে কেস-স্টেটমেন্টগুলি মিশ্রিত করেন
  • এছাড়াও কখন কোন কনস্ট্রাক্ট ব্যবহার করবেন?

পিএস: আমি একটি সম্পর্কিত প্রশ্ন দেখেছি "ভিএইচডিএল প্রক্রিয়ায় একাধিক যদি" ​​তবে যাইহোক এটি আমার প্রশ্নের উত্তর দেয় না।


শারীরিক গেটগুলি কীভাবে কনফিগার করা হবে সে সম্পর্কে আমি মন্তব্য করতে পারছি না, তবে বেশিরভাগ সংকলকগুলিতে যেগুলি x86 অ্যাসেমব্লিকে নির্গত করে যদি একটি শর্তযুক্ত শর্তের (যেমন, জেজি, জেএল, জেজেড, জেএনজেড, ইত্যাদি) একক চেক হিসাবে উপস্থিত থাকে তবে বেশিরভাগ সংকলকগুলিতে in যদিও স্যুইচ মামলাগুলি সংখ্যায়িত করে এবং পুনরুক্তি dec/ jzনির্দেশনা করে, যা আরও কার্যকর। সম্ভবত এখানে অনুরূপ অপ্টিমাইজেশন প্রয়োগ করা হয়েছে।
বহুপদী

@ পলিনোমিয়াল আপনার সাধারণ রৈখিক প্রোগ্রামিংয়ের তুলনায় হার্ডওয়্যার ভাষাগুলিতে যদি-অন্যরকমের এবং আচরণের আচরণটি উল্লেখযোগ্যভাবে পৃথক হয়। এইচডিএল বিবৃতি "তাত্ক্ষণিকভাবে" কার্যকর করার পরে অপ-কোড অপ্টিমাইজেশানগুলি খুব প্রাসঙ্গিক নয়।
W5VO

উত্তর:


10

সংশ্লেষণকারী সরঞ্জাম দ্বারা কীভাবে কোডটি আরটিএল সার্কিটের মধ্যে অন্তর্ভুক্ত করা হয়েছে সেই ক্ষেত্রে ভিএইচডিএল-তে কোনও প্রক্রিয়া যদি ইফ-এলস কনস্ট্রাক্ট এবং কেস স্টেটমেন্ট কনস্ট্রাক্টসের মধ্যে পার্থক্য বলতে পারেন কেউ?

if-elsif-elseকনস্ট্রাক্ট একটি অগ্রাধিকার নেটওয়ার্কের রাউটিং infers:

পরিকল্পিত

এই সার্কিটটি অনুকরণ করুন - সার্কিটল্যাব ব্যবহার করে স্কিম্যাটিক তৈরি করা হয়েছে

এটি অনুরূপ

if bool_expr_1 then
    sig <= val_expr_1;
elsif bool_expr_2 then
    sig <= val_expr_2;
elsif bool_expr_3 then
    sig <= val_expr_3;
else
    sig <= val_expr_4;
end if;

caseকনস্ট্রাক্ট অন্যদিকে একটি বড় infers ওল 'mux:

এখানে চিত্র বর্ণনা লিখুন

এটি অনুরূপ

case case_expr is
  when c0 =>
    sig <= val_expr_0;
  when c1 =>
    sig <= val_expr_1;
  when c2 =>
    sig <= val_expr_2;
      ...
  when others =>
    sig <= val_expr_N;
end case;

স্পষ্টতই এগুলি কেবলমাত্র একটি মান অভিব্যক্তি সহ খুব সরল নকশাগুলি, ফলস্বরূপ একটি আউটপুট।

একাধিক নেস্টেড কেস-এর সাথে বিবেচনা করবেন না এবং যদি-প্রক্রিয়াটির ভিতরে বাছাই করে কেস-স্টেটমেন্টগুলি মিশ্রিত করেন।

উপরের হিসাবে, আপনি দেখতে পাবেন যে তারা কীভাবে বাসা বেঁধে রাখবে / মিশ্রিত করবে।

এছাড়াও কখন কোন কনস্ট্রাক্ট ব্যবহার করবেন?

যেহেতু if-elseinfers অগ্রাধিকার, এটা যখন একটির বেশি ইনপুট অবস্থা ঘটতে পারে ব্যবহার করা উচিত। caseইনপুটগুলি পারস্পরিক একচেটিয়া হয়ে গেলে অন্যদিকে ব্যবহার করা উপযুক্ত।


আমি বুঝতে পারি যে কেস স্ট্যাটমেন্টটি কেবল একক ইনপুট শর্তের জন্য কাজ করে এবং যদি-অন্যথায় একাধিক ইনপুট শর্তগুলির জন্য কাজ করতে পারে। তবে উভয় কনস্ট্রাক্টই মূলত ম্যাক্স তৈরি করে (ক্লকের অনুপস্থিতিতে)। এটা কি সম্ভব নয় যে লজিক সংশ্লেষণটি একক ইনপুটটিকে অপ্টিমাইজ করতে পারে যদি-অন্যথায় মাক্সেসের শৃঙ্খলার পরিবর্তে একক বড় মাক্সকে? এছাড়াও, একটি অগ্রাধিকারের রাউটিং নেটওয়ার্ক কী ... এটি 1 টি বড় মাক্সের পরিবর্তে কেবল মাক্সের চেইন নয়?
নূরভা

অতিরিক্তভাবে, যখন আমাদের একটি ঘড়ির প্রতি সংবেদনশীল প্রক্রিয়া থাকে, অন্যথায় যদি রেজিস্ট্রার, ল্যাচস ইত্যাদির মতো ক্রমিক উপাদান তৈরি করতে পারে তবে কেস স্টেটমেন্টটিও অনুক্রমিক যুক্তি তৈরি করতে পারে?
নূরভা

হ্যাঁ, একটি অগ্রাধিকার রাউটিং নেটওয়ার্ক হুবহু এটি - শিকড়গুলির একটি শৃঙ্খল। if-elseনির্মাণের প্রকৃতি , তবে যেখানে সেই চেইনের উত্থান ঘটে। দ্বিতীয় শর্তটি পরীক্ষা করার জন্য প্রথম শর্তটি অবশ্যই ব্যর্থ হবে। এটি, এর, caseকনস্ট্রাক্টের ক্ষেত্রে নয় এবং এ কারণেই কোনও if-elseবিবৃতিকে একক বৃহত mux হিসাবে সংশ্লেষিত করা যায়নি।
অ্যাঞ্জেলো স্ট্যাভ্রো

1
এবং হ্যাঁ, একটি caseবিবৃতি ক্রমান্বয়ে যুক্তিও তৈরি করতে পারে। আমি "রিয়েল ওয়ার্ল্ড ভিএইচডিএল" পেয়েছি , গ্লাসগো বিশ্ববিদ্যালয় থেকে একটি ধারাবাহিক বক্তৃতা স্লাইড, যা আপনার পক্ষে সহায়ক হতে পারে।
অ্যাঞ্জেলো স্ট্যাভ্রো

এটি একটি ভাল রেফারেন্স।
নূরভা

4

ইন এই পুরোনো ব্লগ পোস্টে , লেখক লিখেছিলেন এবং VHDL কোডের দুই বৈশিষ্ট্যগুলি সমতুল্য সংস্করণ সংশ্লেষিত। একটি যদি অন্যথায় ব্যবহার করে, অন্যটি কেস ব্যবহার করে। ফলাফল:

আমি এই কোডটি সংশ্লেষিত করেছি এবং সঠিক ফলাফল পেয়েছি venআরটিটিএল স্কিম্যাটিকটি উভয়ই প্রোগ্রামের জন্য একেবারে একই ছিল।

এবং তার উপসংহার:

এটি দেখায় যে 'কেস' এবং 'যদি ... এলসিফ ... অন্য' বিবৃতিগুলি উভয়ই সমান দক্ষ। তবে আপনি যদি একটি পরিষ্কার কোড লিখতে চান তবে আপনার ক্ষেত্রে 'কেস' ব্যবহার করুন case আউটপুট বৃহত সংখ্যক শর্তের উপর নির্ভর করে ut তবে শর্তগুলির সংখ্যা খুব কম (2 বা 3) হলে আপনি 'if..elseif..else' ব্যবহার করতে পারেন।

এছাড়াও রয়েছে পোস্টের ডজন প্রতি অনুমেয় ভাষার জন্য স্ট্যাক ওভারফ্লো উপর এই বিষয় উপর। উপসংহারটি সাধারণত একই হয়, পারফরম্যান্স অনুযায়ী কোনও পার্থক্য নেই। কখনও কখনও, যদি প্রচুর পরিমাণে কেস থাকে তবে একটি সংকলক একটি লুক-টেবিল তৈরি করতে যথেষ্ট স্মার্ট হতে পারে যা কিছুটা আরও ভাল পারফরম্যান্স অর্জন করতে পারে।

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

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