একটি নতুন কনফিগারেশন সিস্টেমের মাধ্যমে দ্রুত UVM তৈরি করা হচ্ছে - Semiwiki

একটি নতুন কনফিগারেশন সিস্টেম - সেমিউইকির মাধ্যমে দ্রুত UVM তৈরি করা

উত্স নোড: 3036575

ইউনিভার্সাল ভেরিফিকেশন মেথডলজি (UVM) হল সিস্টেম ভেরিলগ ডিজাইন যাচাই করতে সাহায্য করার একটি জনপ্রিয় উপায় এবং এতে একটি কনফিগারেশন সিস্টেম যে দুর্ভাগ্যবশত কিছু গতি এবং ব্যবহার সমস্যা আছে. সিমেন্স ইডিএর রিচ এডেলম্যান কীভাবে এই সমস্যাগুলি এড়াতে হয় সেই বিষয়ে একটি বিশদ 20-পৃষ্ঠার পেপার লিখেছেন এবং আমি আপনার জন্য হাইলাইটগুলি সংক্ষিপ্ত করার জন্য এটির মধ্য দিয়ে চলেছি। যাচাইকরণ ইঞ্জিনিয়াররা মান সেট করতে একটি UVM কনফিগারেশন ডাটাবেস ব্যবহার করে, তারপরে তাদের UVM পরীক্ষায় পরে মানগুলি পেতে। মান 'T' সেট করা এবং পাওয়ার একটি উদাহরণ হল:

uvm_config#(T)::set(স্কোপ, instance_path_name, field_name, value); uvm_config#(T)::get(scope, instance_path_name, field_name, value);

পরীক্ষার অধীনে ডিভাইসের সাথে UVM testbench সংযোগ করা ভার্চুয়াল ইন্টারফেস পাস করতে কনফিগারেশন ডাটাবেস ব্যবহার করে। UVM কনফিগারেশন ব্যবহার করার সাথে তিনটি সমস্যা আছে:

  • বড় কোড, কোডের কিছু 2,600 লাইন
  • সঠিক ধরনের মিল প্রয়োজন, তাই 'int' এবং 'bit' একই নয়
  • ধীর কোড

ধীর কোডের ক্ষেত্রে বিবেচনা করুন, কারণ ওয়াইল্ডকার্ডের সাহায্যে নাম ব্যবহার করে সেট() হাজার হাজার কলের সাথে 'সেট' এবং 'গেট' পর্বটি সম্পূর্ণ করতে 30 মিনিট পর্যন্ত সময় লাগতে পারে।

অতিবাহিত সময় মিনিট

রিচ UVM কনফিগারেশনের একটি নতুন সমাধান প্রস্তাব করেছেন যেটির গতি অনেক দ্রুত, তুলনামূলকভাবে মাত্র কয়েক সেকেন্ড সময় নেয়।

নতুন সমাধান মিন

যদি আপনার UVM কোড ওয়াইল্ডকার্ড ব্যবহার এড়িয়ে যায় এবং কয়েকটি 'সেট' কমান্ড থাকে, তাহলে আপনার কোড দ্রুত চলবে।

UVM কনফিগারেশন সমস্যাগুলির সম্ভাব্য সমাধানগুলি হল:

  • পরিবর্তে একটি গ্লোবাল ভেরিয়েবল ব্যবহার করুন
  • একটি সেট () দিয়ে UVM কনফিগারেশন ব্যবহার করুন
  • কয়েকটি সেটের সাথে UVM কনফিগারেশন ব্যবহার করুন()
  • একটি কনফিগারেশন গাছ ব্যবহার করুন
  • ভিন্ন কিছু চেষ্টা করুন

ভিন্ন কিছু চেষ্টা করার সেই শেষ পদ্ধতিটি হল নতুন সমাধান, এবং এটি সেট() এবং get() API ব্যবহার করতে থাকে, তারপরে কনফিগারেশনের প্যারামিটারাইজেশন অপসারণ করে সরলীকরণ করে, অগ্রাধিকার সরিয়ে দেয় এবং লুকআপ অ্যালগরিদম পরিবর্তনকে সরিয়ে দেয়। এই নতুন পদ্ধতির ফলাফল হল দ্রুত গতি।

আপনার নতুন কনফিগারেশন আইটেমটি 'config_item' থেকে প্রাপ্ত শ্রেণীতে সংজ্ঞায়িত করা হয়েছে, এবং নীচের উদাহরণটি 'int value" দেখায় যে প্রপার্টি সেট করা হচ্ছে। ডিবাগ উদ্দেশ্যে আপনি সুন্দর-মুদ্রণ ফাংশন যোগ করুন।

ক্লাস my_special_config_item config_item প্রসারিত করে; নতুন ফাংশন (স্ট্রিং নাম = "my_special_config_item"); super.new(নাম); শেষ ফাংশন int মান; ভার্চুয়াল ফাংশন স্ট্রিং convert2string(); ফেরত $sformatf("%s - value=%0d <%s>", get_name(), value, super.convert2string()); শেষ ফাংশন এন্ডক্লাস

'config_item'-এর একটি নাম বৈশিষ্ট্য রয়েছে, এবং এই নামটি দেখা হয়, সাথে উদাহরণের নাম। নাম ফেরত দেওয়ার জন্য কনফিগারেশন অবজেক্টের একটি get_name() ফাংশনও রয়েছে। যেকোনো “instance_name.field_name” খুঁজে পেতে কনফিগারেশন ডাটাবেস দ্রুত লুকআপ এবং তৈরির গতির জন্য একটি সহযোগী অ্যারে ব্যবহার করে।
ট্রেসেবিলিটির জন্য আপনি খুঁজে পেতে পারেন কে সেট করেছে বা কে গেট কল করেছে, কারণ একটি ফাইলের নাম এবং লাইন নম্বর সেট() এবং get() ফাংশন কলের ক্ষেত্র।

সেট(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

কে সেট() এবং get() ডাকে তা দেখতে ডিবাগের সময় অ্যাক্সেসর সারি প্রিন্ট করা যেতে পারে।

ওয়াইল্ডকার্ড সমর্থন করার জন্য কন্টেইনার ব্যবহার করে একটি লুকআপ মেকানিজম যোগ করা প্রয়োজন। উদাহরণের নাম 'top.abcd*_0' বিবেচনা করুন।

ধারক গাছ মিন
ধারক গাছ

ইনস্ট্যান্স নামের ওয়াইল্ডকার্ড অংশটি সহযোগী অ্যারের পরিবর্তে ধারক গাছ ব্যবহার করে পরিচালনা করা হয়।

সারাংশ

UVM টেস্টবেঞ্চে মডিউল/ইনস্ট্যান্স এবং ক্লাস-ভিত্তিক বিশ্বের মধ্যে ডেটা শেয়ার করা UVM কনফিগারেশন ডাটাবেস ব্যবহার করে করা যেতে পারে, স্পিড স্লোডাউন সম্পর্কে সচেতন থাকুন। যদি আপনার পদ্ধতিতে প্রচুর কনফিগারেশন ব্যবহার করা হয়, তাহলে প্রবর্তিত নতুন পদ্ধতি ব্যবহার করার কথা বিবেচনা করুন যেটিতে UVM কনফিগারেশন ডাটাবেস ফাইলের কোডের 300 লাইনের পরিবর্তে প্রায় 2,600 লাইন কোড ব্যবহার করে একটি প্যাকেজ রয়েছে।

পুরো 20 পৃষ্ঠার কাগজ পড়ুন, কনফিগারেশন পাগলামি এড়িয়ে চলা সহজ উপায় সিমেন্স ইডিএ-তে।

সম্পর্কিত ব্লগ

এর মাধ্যমে এই পোস্টটি ভাগ করুন:

সময় স্ট্যাম্প:

থেকে আরো সেমিউইকি