শেষবারের মত আমি একটি সাধারণ 16-বিট RISC প্রসেসরকে শিক্ষার্থীদের লক্ষ্যবস্তুতে দেখেছি। এটি ডকুমেন্টেশনের উপর একটু সাহায্যের প্রয়োজন ছিল এবং সেইসাথে একটি অনুপস্থিত ফাইল ছিল, তবে আমি এটি EDA খেলার মাঠের ইন্টারনেট টুলে একটি বিনামূল্যে ব্যবহার করার জন্য এটি অর্জন করতে পেরেছিলাম। এই সময়, আমি আপনাকে কোডের বিশদ এবং সিমুলেশন চালানোর সাথে সাথেই করব।
আপনি যদি এটি ইতিমধ্যে এটি পরীক্ষা না করে পূর্ববর্তী প্রকাশকে উল্লেখ করতে চান। ডায়াগ্রাম এবং টেবিলগুলি একটি উচ্চ স্তরের সংক্ষিপ্ত বিবরণ প্রদান করে যা আপনাকে এই পোস্টে আলোচনা করা ফাইলগুলি বোঝে।
আপনি যদি সত্যিই একটি জেনুইন FPGA এ এটি প্রোগ্রাম করতে চান তবে আপনাকে একটু কাজ করতে হবে। মেমরি এবং নিবন্ধন শুরু একটি পদ্ধতিতে সঞ্চালিত হয় যা সিমুলেশন জন্য জরিমানা কাজ করে, তবে একটি জেনুইন FPGA উপর কাজ করবে না। যাইহোক, শুরু করা যাক!
ফাইল-বাই-ফাইল
আপনি যদি পৃথকভাবে প্রতিটি ডেটা গ্রহণ করেন তবে তাদের কেউই বোঝা কঠিন নয়। এখানে একটি দ্রুত রুন্ডাউন রয়েছে (আমি ডেটা নামগুলি ব্যবহার করছি আমি ইন্টারনেট সিমুলেশনটিতে আমার মধ্যে ব্যবহার করব):
Parameter.v – এটি একটি অন্তর্ভুক্ত ডেটা যা প্রতিটি অন্যান্য ফাইলের জন্য কিছু মৌলিক সংজ্ঞা সেট করে।
PROG.V – এই দিক মেমরি। একটি সহজ মডিউল, এটি একটি ঠিকানা এবং সেইসাথে সেই ঠিকানার জন্য ডেটা উপস্থাপন করে। $ Readmemb নির্দেশিকা একটি তথ্য (test.prog) থেকে ডেটা পড়তে থাকে।
নিবন্ধন.ভি – নিবন্ধন ফাইল। এটি প্রায় দিকের মেমরির মতো, তবে এটিতে দুটি পোর্টের পাশাপাশি আপনি এটি রচনা করতে পারেন।
data.v – র্যাম মেমরি। এটি প্রায় নিবন্ধনের মতো, তবে একটি একক চেক আউট পোর্টের সাথেও বড়। এমন কিছু সিমুলেশন কোড রয়েছে যা একটি ডেটা খোলে এবং মেমরি মন্তব্যগুলি মুদ্রণ করে, তবে আমি মুছে ফেললাম যে এটি ডিবাগিংয়ের জন্য ছিল। প্রাথমিক বিষয়বস্তু test.data ফাইল থেকে আসে।
alu.v – আপনি বিশ্বাস করেন যে এটি জটিল হবে, তবে এটি নয়। এটি মাত্র দুটি ইনপুট লাগে এবং সেইসাথে আউটপুট তৈরি করতে কিছু করে। যোগ বা subtracts মত সহজ কিছু। সর্বদা @ (*) এর জন্য ঘড়িযুক্ত যুক্তি তৈরি না করার জন্য Verilog কে বলে। এটা শুধু কিছু সহজ দরজা পাশাপাশি muxes মধ্যে সক্রিয়।
Datapath_unit.v – এটি আরও জটিল ফাইলগুলির মধ্যে একটি, যদিও আপনি এটিতে খনন করেন তবে আপনি এটি দেখতে পাবেন এটি প্রধানত বাল্ক। এই ডেটা সমস্ত সংস্থানগুলি তৈরি করে (নিবন্ধকদের পাশাপাশি স্মৃতিগুলির মতো) পাশাপাশি তাদের সাথে একসঙ্গে তারের।
CONTROM_UNIT.V – আরো একটি মডিউল, এটি কেবল দিকের নির্দেশিকাটি প্রয়োগ করে, বর্তমান নির্দেশের উপর ভিত্তি করে নিয়ন্ত্রণ লাইনগুলি স্থাপন করে।
Alucontrol.v – এই তথ্য আলু জন্য নির্দেশাবলী decodes। এটা মূল পোস্টে অনুপস্থিত ছিল। অদ্ভুতভাবে, একই একই সাইটটিতে আরও একটি অনুরূপ CPU রয়েছে যার একটি Alucontrol ফাইল রয়েছে, তবে এটি একটি ভিন্ন দিক সেটের জন্য স্পষ্টভাবে। যাইহোক, সেই তথ্যটি পাশাপাশি স্টাইল টেবিলটি ব্যবহার করে শুরু করে আমি এটি পুনরূদ্ধার করতে সক্ষম হয়েছিলাম। যদি [fpga4students] এই সংশোধন করে, ফাইলগুলি অত্যন্ত ভিন্ন হতে পারে।
design.sv – এই তথ্যটি আমি ব্যবহার করছি Edaplay মাঠ সিমুলেটরের জন্য প্রয়োজন। এটি শীর্ষ স্তরের উপাদানগুলি (ডেটা পাথ এবং সেইসাথে নিয়ন্ত্রণ ইউনিট) রয়েছে। Edaplayground শুধুমাত্র এই ফাইলটি প্রক্রিয়া করে, এটি উপরে উল্লিখিত অন্যান্য ফাইলগুলি অন্তর্ভুক্ত করার জন্য এটি প্রয়োজনীয়। এগুলি কিছু সতর্কতা কারণ তাদের প্রত্যেকের একটি টাইমসেলের নির্দেশিকা রয়েছে, তবে এটি হ’ল এটি নির্মম।
Testbench.sv – Testbench জেনুইন নকশা অংশ নয়, তবে শুধু সিমুলেশন সেট আপ এবং পাশাপাশি ফলাফল সংগ্রহ করে। আমি Edaplay মাঠের সাথে কাজ করার জন্য এটি একটি বিট সংশোধন করতে হয়েছিল, তবে অপারেশনটি একই। এটি একটি সিপিইউ তৈরি করে, এটি একটি ঘড়ি ফিড করে, সেইসাথে এটি কিছুক্ষণের জন্য চালাতে দেয়। পরীক্ষা প্রোগ্রাম পাশাপাশি মেমরি বিষয়বস্তু test.prog পাশাপাশি test.data হয়।
সিমুলেশন
আপনি দুটি জিনিস এক করতে পারেন। আপনি শৈলীটির আমার অনুলিপিটি প্রস্তুত করতে পারেন, তবে এটি আপনার সেরা বিকল্প হতে পারে না। আমি আপনাকে শুধু edaplayground যেতে এবং একটি নতুন Verilog প্রকল্প উত্পাদন সুপারিশ চাই। তারপর মূল পোস্ট থেকে ফাইল চলন্ত শুরু। আপনি ত্রুটি এবং পাশাপাশি অনুপস্থিত ফাইল মধ্যে চালানো হবে। আপনি ঠিক কত ঠিক করতে পারেন দেখুন। আপনি stumped পেতে হলে, আপনি stumped পেতে হলে আপনি আমার কপি আপনাকে সাহায্য করতে পারেন। আপনি যে ভাবে আরো আবিষ্কার করব।
আপনি যদি এটি চেষ্টা করতে পছন্দ করেন তবে এখানে Edaplay মাঠ সম্পর্কে কয়েকটি টিপস রয়েছে। আপনি ইউভিএম / ওভিএমটি পছন্দ করেন না, আপনার কোনও প্রকারের অন্য কোন লাইব্রেরি প্রয়োজন হয় না। আমি আইকারাস Verilog 0.9.7 ব্যবহার করেছি, তবে আপনি সম্ভবত সম্ভবত ভেরিলগ সরঞ্জামগুলির কোনও ধরণের ব্যবহার করতে পারেন। আপনি Epwave চেকবাক্সটি পরিদর্শন করতে চান এবং সেইসাথে আপনি testbench এর অন্তর্নিহিত অংশে এটি যুক্ত করতে চান:
প্রাথমিক
শুরু করুন
$ dumpfile (“dump.vcd”);
$ dumpvars;
নতুন ফাইল তৈরি করতে ডেটা নাম ট্যাবগুলির পাশে + ইঙ্গিতটি ব্যবহার করুন। Edaplayground পেরেক প্রতি দশ ফাইলের একটি সীমা আছে। মনে রাখবেন, আপনি testbench.sv বা design.sv তে উত্পাদিত কোন ধরনের .V ফাইলগুলি অন্তর্ভুক্ত করতে হবে। অন্যান্য ফাইলগুলি পরোক্ষভাবে ব্যবহার করার কারণে আপনি ডেটা ফাইলগুলি অন্তর্ভুক্ত করার জন্য প্রয়োজনীয়তা নেই।
চল!
একবার আপনার সমস্ত ত্রুটিগুলি আউট হয়ে গেলে, আপনি চালানোর পাশাপাশি ওয়েভফর্ম ভিউয়ার, ইপওয়েভ পাবেন। আপনি হাভই আগ্রহের হার সংকেত যোগ করার জন্য যাতে আপনি CPU এ কাজ করতে পারেন। এটি মেমরি বা কিছু ডিবাগিং পোর্টে কিছু আই / ও ডিভাইস যুক্ত করতে মজা হবে যাতে আপনি কিছুটা ভাল দেখতে পারেন। আমি সাধারণত প্রোগ্রাম কাউন্টার এবং সেইসাথে রেজিস্টারটি পোর্টটি দেখতে পোর্টে যাচ্ছি যা ভিতরে যা হচ্ছে তা একটি ধারণা পেতে।
আসল কোড একটি প্রোগ্রাম ছিল যা নির্দেশাবলীর একটি বড় চুক্তি ব্যবহার করে। আমি এটির সাথে এটি প্রতিস্থাপিত হিসাবে এটি মন্তব্য করেছি:
0000_0100_0000_0000 // 0000: টন R0 <- MEM (R2 + 0) R2 = 0 থেকে এটি R0 এ 1 টি রাখে 0000_0100_0100_0000 ///0002: R1 তে সঠিক একই টন (R1 সর্বদা থাকবে 1) // স্থান 8 (বাইট), 4 (শব্দ): 0010_0000_0101_0000 ///0004: R2 = R0 + R1 0001_0010_1000_0000 // 0006: মেম [R1] = R2 (যে মেম [1] = R2 0000_0010_0000_0000 ///0008: R0 = MEM [R1] 10101_0000000000_0011 // 000A: # 4 স্থাপন করতে ঝাঁপ দাও (CPU 2 দ্বারা গুণমানের পাশাপাশি 2 যোগ করুন) // 0000C এ কোন দিক নেই, তবে এটি ঝাঁপ দাও যখন পিসি সেখানে থাকবে আপনি মেমরির ক্রমবর্ধমান ক্রমবর্ধমান মানটি মেনে চলতে সক্ষম হবেন এবং সেইসাথে প্রোগ্রাম কাউন্টার চক্রটি প্রতিটি লুপের সাথে 4 টি স্থাপন করতে পারবেন। এখানে একটি সাধারণ অধিবেশন: আমি অভ্যন্তরীণ সংকেতগুলির একটি দুর্দান্ত চুক্তিটি ছেড়ে দিয়েছি, তবে আপনি দেখতে পারেন যে মেমরি ঠিকানা 1 লুপের প্রথম দুটি পুনরাবৃত্তিগুলিতে ২ টি তে 2 তে সেট করা হয়। শেষ খেলা এটি একটি মহান একাডেমিক CPU হয়? আমি নিশ্চিত নই. কিছু সহজ CPUs বিদ্যমান, তবে তারা প্রায়শই ছোট হয় কারণ তারা চতুর, তারা অত্যন্ত অবাস্তব। এটির চেয়ে আরও বেশি চ্যালেঞ্জিংয়ের চেয়ে বেশি চ্যালেঞ্জিং একটি শিক্ষানবিসের জন্য খুব বেশি কামড়ানোর সম্ভাবনা বেশি। যদিও আমি বিশ্বাস করি আপনার মতো কিছু মোকাবেলা করার আগে আপনার মৌলিক ভেরিলগের কিছু উপলব্ধি থাকা উচিত, ডকুমেন্টেশন কিছু এলাকায় একটি সামান্য স্পারস (এবং বিভ্রান্তিকর) ছিল। স্পষ্টতই, আমি এটি কাজ করার পরে এটি যথেষ্ট ছিলাম, তবে আপনি যদি শুরু করেন তবে আপনি সম্ভবত আরো বেশি সহায়তার পাশাপাশি ব্যাখ্যাটি উপলব্ধি করবেন। আপনি একটি পছন্দের একাডেমিক Verilog CPU আছে? আমি এখনও এমন একজন ব্যক্তিকে খুঁজছি যা "ঠিক আছে।"