ভিএইচডিএল সাক্ষাত্কারের প্রশ্ন - বাকীটি ছাড়াই কোনও সংখ্যাকে 5 দিয়ে ভাগ করা যায় কিনা তা নির্ধারণ করে


24

আমি ভিএইচডিএলের জন্য একটি দুর্দান্ত সাক্ষাত্কারের প্রশ্ন দেখেছি - এমন একটি সিস্টেম তৈরি করুন যা একটি নম্বর পায় এবং সনাক্ত করে যদি এটি বাকী ছাড়াই 5 দিয়ে ভাগ করা যায়। আমি এটি একটি রাষ্ট্রীয় মেশিন দিয়ে সমাধান করার চেষ্টা করেছি (আমি মনে করি তারা আপনাকে মোড বা রিম ব্যবহার করতে চায় না ) এবং আমার প্রাথমিক সাফল্য থাকলে (5, 10, 15 এর মতো সংখ্যা এবং 20, 40, 80 এর মতো সংখ্যাগুলি কাজ করেছে) ), অন্যান্য সংখ্যা যেমন 130, 75 এবং আমার জন্য ব্যর্থ।

আমি আমার রাজ্য মেশিনটি দেখাব তবে এটি একটি সম্পূর্ণ জগাখিচুড়ি (এটি কোনও কোড নয়, এটি একটি অঙ্কন), এবং আমি যেমন বলেছি, এমনকি কাজ করছে না।

মূলত আমি যা করার চেষ্টা করেছি তা হ'ল বাইনারি সংখ্যায় লিখুন যা 5 দ্বারা বিভাজ্য, এবং একটি স্টেট মেশিন তৈরি করা যা তাদের জন্য কাজ করবে।

আপনি কীভাবে এই সমস্যাটি সমাধান করবেন এবং এইরকম কোনও কিছুর মুখোমুখি হওয়ার সময় কীভাবে ভাববেন তা যদি আপনি আমাকে দেখিয়ে দিতে পারেন তবে আমি খুশি হব।

ধন্যবাদ!


আপনার অর্থ একটি (সংশ্লেষযোগ্য) হার্ডওয়্যার বাস্তবায়ন, কেবলমাত্র টেস্টের কোড নয় যদি একটি পূর্ণসংখ্যা শাব্দিক 5 দ্বারা বিভাজ্য হয় (যেমন টেস্টবেঞ্চের জন্য)।
স্মি

@ এসএমসিআই আমি আসলে একটি রাষ্ট্রীয় মেশিনের স্কিম্যাটিক / অঙ্কন চেয়েছিলাম, তবে সেই রাষ্ট্রের মেশিনের একটি কোড ক্ষতিগ্রস্থ হবে না। ডেভ টোয়েড যদিও প্রশ্নের সঠিক উত্তর দিয়েছেন।
ইরান

তারপরে আমি এটি পুনঃবিবেচনা করব * "ভিএইচডিএল সাক্ষাত্কারের প্রশ্ন
সিসিটি

Egreg math.stackexchange.com/a/2569882/213607 এর মাধ্যমে এখানে উত্তর আরও সমান্তরাল পদ্ধতির জন্য কিছুটা অনুপ্রেরণা দিতে পারে।
ম্যাথ্রেডলার

উত্তর:


37

সিরিয়াল ফ্যাশনে বাকী অপারেশন করা আসলে বেশ সহজ। মূল অনুমানটি হ'ল ডেটা সিরিয়াল হলে এমএসবি-প্রথম আসে। আপনার কেবলমাত্র একটি বাকী মডুলো এন গণনা করার জন্য এন স্টেটস দরকার "" 0 "রাজ্যে শুরু করুন এবং আপনি যদি শেষ বিটের পরে" 0 "রাজ্যে পৌঁছে যান (এটি কত বিট আছে তা বিবেচনা করে না), বাকিটি রয়েছে শূন্য।

পরিকল্পিত

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

আপনি লম্বা বিভাগ কীভাবে করবেন সে সম্পর্কে ভাবুন যদি আপনার কেবলমাত্র ট্র্যাক রাখা দরকার ছিল তবে বাকিগুলি:

process (clk)
begin
  if rising_edge(clk) then
    if reset = 1 then
      state <= 0;
    else
      if (state & din) >= N then
        state <= (state & din) - N;
      else
        state <= state & din;
      end if;
    end if;
  end if;
end process;

6
বাহ, আমি দেখতে পাচ্ছি যে এটি কাজ করে তবে আপনি কীভাবে রাষ্ট্রের মেশিন নিয়ে এসেছেন তা আপনি ব্যাখ্যা করতে পারেন? সূচনা পয়েন্টটি কী ছিল? আমি এর আগে কখনও এটি করতে দেখিনি আমি কি কৌতূহলটি কীভাবে এটির সামনে আসার সাথে যুক্ত তা কী আগ্রহী?
জোডার

7
রাষ্ট্রের ডায়াগ্রামটি হ'ল এন = 5 এর নির্দিষ্ট ক্ষেত্রে ভিএইচডিএল কোড থেকে পাবেন। অন্য কথায়, যদি রাজ্যটি বর্তমানের বাকী অংশের প্রতিনিধিত্ব করে, আপনি যখন রাজ্যটিকে কিছুটা বামে স্থানান্তরিত করেন, পরবর্তী ইনটেলটি যা আপনি পাবেন তা এতে ইনপুট বিট যুক্ত করুন এবং প্রয়োজনে ৫ টি বিয়োগ করুন।
ডেভ টুইট করেছেন

3
এটি যদি সুন্দর হয় তবে কোনও সাক্ষাত্কারে কেউ যদি নিজেরাই এটি নিয়ে আসে তবে আমি সত্যিই মুগ্ধ হব। এবং তারপরে আমি তাদের আনন্দের সাথে মন্তব্য করতে বলি যে প্রতি ঘড়ির চক্রটিতে একটি সম্পূর্ণ ভেক্টরকে প্রক্রিয়াজাত করতে কোনও রিম অপারেটর ব্যবহারের তুলনায় সংশ্লেষণের ফলাফলগুলি কীভাবে পৃথক হবে।
ক্যাস্পার্ন

8
@ জোডার রাজ্যগুলি হল 5 অবধি অবধি; 0 তীরটি নির্দেশ করে 2n mod 5এবং 1 তীরটি নির্দেশ করে (2n + 1) mod 5
hobbs

2
তোমাদের মধ্যে ঘোষণা যোগ করা যায়নি state, dinএবং Nআপনার কোড কিভাবে?
mkrieger1

15

যদি ডেটা এলএসবি-প্রথম আসে তবে আপনি একটি রাষ্ট্রীয় মেশিনও ডিজাইন করতে পারেন:

পরিশিষ্টে এই উত্তরের শেষে বর্ণিত ডিএফএর একটি গ্রাফিক উপস্থাপনা।

এই জাতীয় নির্বাহী সসীম অটোমেটনের (ডিএফএ) অস্তিত্ব সরাসরি অন্য উত্তর থেকে অনুসরণ করে , যা এমএসবি-প্রথমের জন্য ডিএফএ বর্ণনা করে। যেহেতু ডিএফএ দ্বারা গৃহীত ভাষাগুলি নিয়মিত এবং নিয়মিত ভাষাগুলি বিপরীতমুখী অধীনে বন্ধ ছিল বলে জানা যায় (উদাহরণস্বরূপ এখানে দেখুন ), অবশ্যই একটি ডিএফএ থাকতে হবে যা নিম্নলিখিত ভাষাটি গ্রহণ করে:

এল={W{0,1}*| বিপরীত(W)10 দ্বারা বিভাজ্য 5}

নির্মাণ

  1. ডেভ টোয়েডের উত্তর থেকে এমএসবি-প্রথম ডিএফএ অনুলিপি করুন । আমি তার জন্য অটোম্যাটন সরঞ্জাম JFLAP ব্যবহার করেছি।

  2. ডিএফএ বিপরীতের জন্য সুস্পষ্ট রূপান্তর অ্যালগরিদম প্রয়োগ করুন, যেমন সিএসএসইতে বর্ণিত: একটি ডিএফএ নকশা করা এবং এটির বিপরীতে । এই উত্তরের পুরাতন সংশোধনীতে
    আপনি এই পদক্ষেপের (অবিস্মরণিত) ফলাফল দেখতে পাচ্ছেন ।

  3. ফলাফলের ডিএফএ হ্রাস করুন। দুর্ভাগ্যক্রমে, এই বৈশিষ্ট্যটি সাম্প্রতিক জেএফএলএপ সংস্করণে কিছুটা বগি, তাই আমি হাত দিয়ে এটি হ্রাস করতে নিজেকে পদত্যাগ করেছি।
    আবার, তাদের জন্য এখানে অনেক অ্যালগরিদম এবং উত্স রয়েছে, আমি টিউটোরিয়ালস্পয়েন্ট.কম"ডিএফএ মিনিমাইজেশন" এ বর্ণিত একটি ব্যবহার করেছি ।

    (আসলে, যদি আপনার চোখগুলি ডিএফএগুলি দেখার জন্য যথেষ্ট ভাল প্রশিক্ষণ দেওয়া হয় তবে আপনি সরাসরি দেখতে পেতেন যে পয়েন্ট ২ তে প্রাপ্ত ডিএফএ-তে এবং q 1 সমতুল্য রাজ্য) খনি নয়, এটি সুপারক্যাটের মন্তব্যে দেখার জন্য ধন্যবাদ !)কুই0কুই1

প্রকৃতপক্ষে, ফলাফল অটোমেটন সঠিক উত্তর দেয়:

দুটি কলাম "ইনপুট" এবং "ফলাফল" তালিকা সহ বিভিন্ন সারণী, "সংযুক্তি" বা "প্রত্যাখ্যান" এর বিভিন্ন সংখ্যার ফলাফল কিনা তা তালিকাভুক্ত করে।


একজনRবনাম5=(প্রশ্নঃ,Σ,δ,কুই0,এফ)প্রশ্নঃ={কুই0,কুই1,কুই2,কুই3,কুই4}Σ={0,1}এফ={কুই0}δ

δ(কুই0,0)=কুই0,δ(কুই0,1)=কুই1δ(কুই1,0)=কুই4,δ(কুই1,1)=কুই3δ(কুই2,0)=কুই1,δ(কুই2,1)=কুই2δ(কুই3,0)=কুই2,δ(কুই3,1)=কুই4δ(কুই4,0)=কুই3,δ(কুই4,1)=কুই0


আপনার যদি ডিএফএকে উল্টাতে অসুবিধা হয়, আপনি কেবল সমীকরণটিও বিপরীত করতে পারেন: new_state = state * 2 + ইনপুট পরিবর্তে, আপনি (new_state - ইনপুট) / 2 = রাজ্যটি ব্যবহার করতে পারেন, তারপরে স্থিতি এবং new_state ব্যবহার করতে পারেন। নতুন সমীকরণের জন্য ডিএফএর উচিত এলএসবি-প্রথম সমস্যাটি সমাধান করা।
ইয়াল

কেন 3 এবং কিউ 4 লেবেলযুক্ত এবং বিপরীত নয়? কিউ 3 এবং কি 4 লেবেলগুলি অদলবদল করুন, এবং মেশিনটি আলগো "অর্ধ (Mod 5) প্রয়োগ করে এবং ইনপুট বিট যুক্ত করুন"।
রোজি এফ

2
@ রোসিএফ: "অর্ধ (Mod 5)" বাক্যাংশটি সম্ভবত বিচ্ছিন্ন গণিতের সাথে পরিচিত না তাদের জন্য আরও কিছু ব্যাখ্যা ব্যবহার করতে পারে। এই প্রসঙ্গে বিভাগটি সংখ্যাকে সমানভাবে বিভক্ত করার জন্য বেসের একাধিক সংখ্যক যা প্রয়োজন তা যুক্ত করে, তাই 3/2 (Mod 5) হবে (3 + 5) / 2, অর্থাৎ 4
সুপারক্যাট

7

(এমএসবি প্রথম) রাষ্ট্রীয় মেশিনটি নিয়ে আসার একটি উপায় নিম্নরূপ:

  1. এখনও পর্যন্ত প্রাপ্ত নম্বরটি N। ধরুন আপনি বাকীটি জানেন M = N mod 5

  2. একটি নতুন বিট আসছে এবং নতুন মান এখন N' = N*2 + b

  3. নতুন অবশিষ্টটি হয় M' = (N*2 + b) mod 5 = (M*2 + b) mod 5

এটি হাতে ট্যাবলেট করার পক্ষে যথেষ্ট সহজ:

    এম খ | এম '
------------------
    0 0 | 0
    1 0 | 2
    2 0 | 4
    3 0 | 1
    4 0 | 3
    0 1 | 1
    1 1 | 3
    2 1 | 0
    3 1 | 2
    4 1 | 4

যা ডেভ টোয়েডের উত্তরে রাজ্য মেশিনের সাথে মেলে।


5

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

এস=0এস(2এস+ +) গেলিক ভাষার 5 এসএস,এস=0,,4

এস=0,=0এস(এস+ +2) গেলিক ভাষার 5,+ +124=1 গেলিক ভাষার 5, আমরা উপরেরটি সহজ করতে পারি এস(এস+ +2) গেলিক ভাষার 5,(+ +1) গেলিক ভাষার 4। আবার, যেহেতুএস,, সীমাবদ্ধ, আপডেট সমীকরণ রাজ্যগুলির সাথে একটি সরল রাজ্য মেশিন হিসাবে লেখা যেতে পারে (এস,) কোথায় এস=0,,4, =0,,3


3

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

আপনি উদাহরণস্বরূপ, প্রতিটি বিট প্রতিটি প্রতিনিধিত্ব করে এমন মানের 5 নং নোটটি নোট করে রাখতে পারেন, এগুলি একসাথে যুক্ত করতে পারেন এবং তারপরে প্রক্রিয়াটি পুনরাবৃত্তি করতে পারবেন যতক্ষণ না আপনার 5 এর চেয়ে কম কিছু না ফেলে রাখা হয়, হয় হয় সমস্ত হ্রাস পদক্ষেপের জন্য এই সংযুক্তিকরূপে প্রয়োগ করুন, বা কিছু সংখ্যক চক্রের জন্য আবার যুক্তি ব্যবহার করুন।

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

সত্যি কথা বলতে কি, তারা এই জাতীয় প্রশ্নের সাথে তারা যে উত্তর খুঁজছেন সম্ভবত এটি নয় - তবে এটি কোনও বাস্তব ডিজাইনের অভিজ্ঞতা প্রদর্শন করারও সুযোগ।


3

যদি সংখ্যাটি একটি বিটের চেয়ে বড় অংশগুলিতে উপস্থাপিত হয়, তবে অবশিষ্টাংশের শূন্য হয়, যদি অনুমান 15টি গণনা করতে পারে এমন একটি প্রভিস সহ, অবশিষ্টাংশ Mod 15 গণনা করার জন্য কিছু সমান্তরাল গণনা ব্যবহার করা সহায়ক হতে পারে। Mod-15 টির অবশিষ্টাংশ গণনা করার একটি সহজ উপায়টি পর্যবেক্ষণ করা হয় যে N> = 1 এর যে কোনও মানের জন্য, এর বাইরে একটি সংখ্যার অংশে বামে 4N বিট যুক্ত করে এমন মান পাওয়া যাবে যা মূল Mod 15 এর সাথে একত্রে মিলবে This উপলব্ধ সংস্থানগুলির উপর নির্ভর করে সমস্যাটি বিভিন্ন উপায়ে বিভক্ত করতে দেয়।

উদাহরণস্বরূপ, যদি কেউ একটি 32-বিট মান দিয়ে শুরু হয় তবে এটিকে আটটি 4-বিট মান হিসাবে বিবেচনা করা যেতে পারে। এগুলি চারটি 5-বিট মান অর্জনের জন্য একত্রে যুক্ত হতে পারে, যা দুটি 6-বিট মান বা একটি 7-বিট মানগুলিতে একত্রিত হতে পারে। 4-বিট মানের উপরের তিনটি বিটকে নিম্ন 4-বিটগুলিতে যুক্ত করার ফলে 5-বিট মান পাওয়া যাবে যা সর্বাধিক 21 টির মতো। 0, 5, 10, 15 বা 20 এর মধ্যে একটি।


... বা আপনি জুড়ে 4-বিট সংযোজক ব্যবহার করতে পারেন, এবং কেবলমাত্র নিশ্চিত হয়ে নিন যে প্রতিটি বাহ্যিক বাহিনী পরবর্তীতে সার্কিটের একজন অ্যাডারের জন্য একটি ক্যারি-ইন হয়ে যায়। তিনটি স্তর যুক্ত করার পরে আপনার একক 4-বিট ফলাফল এবং চারটি এখনও অব্যবহৃত car শেষের 4-বিট সংযোজনের সমান্তরালভাবে তিনটি বহন করে যুক্ত করুন এবং শেষের বাহন হিসাবে বহন করে ফলাফলটিতে তাদের যোগ যোগ করুন। এটি সর্বাধিক 19 টির ফলন দেয়, সুতরাং আপনার 20 এর পরে আর মিলবে না।
হেনিং মাখোলম

@ হেনিংমখোলম: পছন্দসই ফলাফল পেতে অ্যাড্রেয়ারদের ব্যবস্থা করার বিভিন্ন উপায় রয়েছে। প্রদত্ত পরিস্থিতিতে কোন পদ্ধতির উন্নতি সম্ভবত প্রকল্প-নির্দিষ্ট রাউটিং বা সংস্থান ব্যবহারের বিষয়গুলির উপর নির্ভর করবে। আর একটি কৌশলটি হ'ল একটি ক্যারি-সেভ অ্যাডার্স ব্যবহার করা হবে তবে এই স্থানটি ব্যবহার করে যে স্থানান্তরিত আউটপুটটির শীর্ষ বিটটি নীচে চলে যেতে পারে explo সুতরাং, একটি স্তর 8 ইনপুটগুলি 6 এ পরিণত হতে পারে, তারপরে 6 এ 4, পরে 4 এবং 3 এবং 3 তে 2 হয়ে যাবে each এর জন্য 4-বিট মানগুলির জুড়ি ...
সুপারক্যাট

... এক এবং কেবল বহনকারী চেইনটি হবে চারটি জোর গেট। যতটা 19 এর নিচে আউটপুট পাওয়া ভাল, বা 20 এর জন্য সম্ভাব্য অবশিষ্টাংশ হিসাবে পরীক্ষা করা ভাল কিনা তা সম্ভবত সম্পদের উপলব্ধতা এবং ব্যবহারের উপর নির্ভর করে। এমন একটি সংখ্যা দেওয়া হয়েছে যা ৩০ এর বেশি নয়, উপরের এবং নীচের নীব্বলগুলি যুক্ত করা সর্বাধিক 15 (16 + 14-> 1 + 14, বা 0 + 15-> 0 + 15) এর মান প্রদান করবে তবে স্পষ্ট যোগ করবে কিছু বা সমস্ত (20, 25, 30) এর চেকগুলি সস্তা হতে পারে।
সুপারক্যাট

2

আমি আমার ভিএইচডিএলটি মনে করতে পারি না, তবে এখানে প্রথমে যে ধারণাটি এসেছে সে সম্পর্কে একটি স্কেচ এখানে দেওয়া হয়েছে:

দুইটির প্রথম শক্তির শেষ সংখ্যা (বেস 10 এ) হ'ল 1, 2, 4, 8, 6, 2, ... এবং চক্রটি পুনরাবৃত্তি করে। অতএব, দু'জনের ক্ষমতার বাকী 5 টি মডেল হ'ল 1, 2, 4, 3, ....

এটি ব্যবহার করে, আমরা এলএসবি থেকে বিটগুলিতে স্থানান্তরিত করতে পারি এবং যখনই 1কিছুটা দেখা যায় তখন অবস্থানের সাথে সংগৃহীত বাকী 5 টি মডেল জমা করতে পারি । সংগ্রহের মোড 5ও করুন, এবং যোগফল শেষে শূন্য কিনা তা পরীক্ষা করা যথেষ্ট।


1

আমরা এখানে উত্তর থেকে ধারণাটি ব্যবহার করতে পারি , বেস 4 এ আমরা অনুমান করতে পারি যে সংখ্যার যোগফলটি যদি সংখ্যার যোগফল হয় তবে 5 দ্বারা বিভাজ্য। আমরা তাই

  1. 2 দ্বারা 2 সংখ্যাগুলিকে গ্রুপ করুন,
  2. বিজোড় যোগফল এবং 2 বিট ব্লকগুলি বিয়োগ করে।
  3. যদি ফলাফলটি কয়েকটি বিটের দুটি পরিপূরক অঞ্চলে হয় উদাহরণস্বরূপ [-4,3] (আমরা দুটি পরিপূরক ব্যবহার করি তা অনুমান করা সহজ) তবে আমরা সমাপ্ত হয়েছি এবং ফলাফলের ফলাফলটিই কেবলমাত্র মূল সংখ্যাটি 5 দিয়ে বিভক্ত করতে পারি সংমিশ্রণটি 0 যা যাচাই করা খুব সাধারণ যৌক্তিক অভিব্যক্তি (মূলত কেবল একটি বড় বা ফলাফলের সমস্ত বিটের উপর, না?)
  4. অন্যথায় আমরা নতুন (অনেক সংক্ষিপ্ত নম্বর) এর উপর পুনরাবৃত্তি করি।

আসুন আমরা 166 = (10) (10) (01) (10): 2,2,1,2 নম্বরে চেষ্টা করি

2-2 + 1-2 = -1

যা পরম মানতে <= 3 হয় এবং 0 নয় কেন আমরা কেবল একটি পুনরাবৃত্তিতে এই সিদ্ধান্তে পৌঁছাতে পারি যে 166 সমানভাবে 5 দ্বারা বিভক্ত নয়।

একটি ছোট মেমরি গেট / এনআরটি পুনরাবৃত্তির তুলনায় সস্তা / সস্তা হতে পারে be একজন অবশ্যই অবশ্যই সবচেয়ে খারাপকে প্রাক্কলিত করতে পারবেন (অনুমোদিত ইনপুটগুলি দিয়ে দেওয়া সবচেয়ে বড় ফলাফল) এবং সেই অনুযায়ী নকশার পরিকল্পনা করতে পারেন।


1

এমএসবি পদ্ধতির স্পষ্টভাবে সহজ, তবে আমি এমএসবি সমাধান উত্পন্ন করার প্রয়োজন ছাড়াই এলএসবি স্টেট ডায়াগ্রামটি পরিচালনা করেছিলাম ... এতে আমার কয়েক ঘন্টা সময় লেগেছে। এটি @ কমফ্রিচের দেখানো একটির সমতুল্য হয়ে দাঁড়িয়েছে, অন্যরকমভাবে বর্ণনা করা হয়েছে।

আমরা দুটি সংখ্যা ট্র্যাক করতে যাচ্ছি। প্রথমত, আমরা চলমান যোগফল, মডুলো 5 ("সুম") ট্র্যাক করতে যাচ্ছি। দ্বিতীয়ত, আমরা স্থানান্তরিত হওয়ার জন্য পরবর্তী 2 পাওয়ারের মানটি ট্র্যাক করব, মডিউল 5 ("নেক্সট")। আমি শীর্ষে "এসইউএম" এর সম্ভাব্য মান এবং তাদের নীচে সম্পর্কিত "নেক্সট" মান সহ প্রতিটি রাজ্যকে উপস্থাপন করব।

"এসইউএম" মডিউল 5 হ'ল যেখানে আমরা 0 দিয়ে শুরু করব:

প্রাথমিক

মনে রাখবেন যে এমন একটি রাজ্য যা দেখায়:
3,2,4,1
1,4,3,2

সমান:
1,3,4,2
2,1,3,4

কারণ উভয় রাজ্যই এটি উপস্থাপন করে:
সুম = 1 এবং নেক্সট = 4 বা
স্যাম = 2 এবং নেক্সট = 3 বা
স্যাম = 3 এবং নেক্সট = 2 বা
স্যাম = 4 এবং নেক্সট = 1।

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

যখনই আপনি একটি নতুন রাজ্যে স্থানান্তরিত হন, "নেক্সট" এর প্রতিটি সংখ্যা দ্বিগুণ হয়ে যায়, তারপরে মোডুলোড হয় ৫. "এসইউএম" এর জন্য এই নিয়মগুলি অনুসরণ করুন:

  • আপনি যদি 0 এর সাথে স্থানান্তরিত হন তবে উপরের সারিটি এর মান রাখে।
  • আপনি যদি 1 এর সাথে রূপান্তরিত হন তবে প্রতিটি কলামটি হ'ল পুরানো রাষ্ট্রের "এসইউএম" + "নেক্সট" মডিউল 5।

সুতরাং, আসুন যখন বিটটি 1 হয় তখন ট্রানজিশনগুলি পূরণ করে শুরু করি।

সব 1

ঠিক আছে, এখন আমরা শূন্যগুলি পূরণ করি। এখানে কেবলমাত্র একটি রাষ্ট্র যুক্ত হয়েছে, তাই আমরা এগিয়ে যাব এবং এর রূপান্তরগুলিও পূরণ করব।

সম্পূর্ণ

ও ভয়েলা! আমরা একটি রাষ্ট্রীয় মেশিন পেয়েছি যা এমএসবি সমাধান তৈরি না করেই প্রথমে এলএসবি গ্রহণ করে।


1

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

একটি অনুরূপ প্রক্রিয়া রয়েছে, "এগারটি আদান প্রদান", যেখানে বিকল্প অঙ্কগুলির চিহ্নগুলি নেতিবাচক সেট করা আছে। এটি কাজ করে কারণ এগারটি সংখ্যা বেসের চেয়ে বড়।

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

উদাহরণ 70: 01 00 01 10 -> 01 00 -1 -> 01 01 -> 00, 5 দ্বারা বিভাজ্য উদাহরণ 49: 11 00 01 -> 11 -1 -> 1 00 -> 1, নয় 5 দ্বারা বিভাজ্য

মনে রাখবেন যে জমে থাকা পার্থক্যের চিহ্নের জন্য এবং যখন বহন করছে তখন ক্ষেত্রে আপনার অতিরিক্ত বিট বহন করতে হবে।

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

উদাহরণ 70: 4 6 -> এ, সুতরাং 70 টি 5 দ্বারা বিভাজ্য (তবে 15 দ্বারা নয়) উদাহরণ 49: 3 1 -> 4, সুতরাং 70 5 দ্বারা বিভাজ্য নয়।

নোট করুন যে আপনি প্রচুর বিভাজন পরীক্ষা পরীক্ষা করতে বিভিন্ন নম্বর ঘাঁটি ব্যবহার করতে পারেন, যদিও কম্পিউটার যুক্তিতে 2 +/- 1 এর পাওয়ারগুলির জন্য প্রয়োগ করা সবচেয়ে সহজ।

দশমিক গাণিতিক ক্ষেত্রে, আমার প্রিয় পছন্দের মধ্যে একটি হল অবশিষ্টাংশের 7. মডের জন্য আমার পরীক্ষা that দ্রষ্টব্য যে 100টি একটি 7 এর একাধিকের চেয়ে দুটি বেশি, সুতরাং সংখ্যাগুলিগুলিকে জোড়ায় ভাগ করুন (100 নম্বর বেসে কাজ করুন) এবং ইউনিটগুলি থেকে কয়েক'শ TWICE যুক্ত করুন। এখানে আমরা বাম থেকে ডানে কাজ করি ...

উদাহরণ: 98 76 -> 2 72 -> 76, সুতরাং 9876 দ্বারা 7 ভাগ করা যায় না It এটি 6 টি মডেল Example উদাহরণ: 03 45 67 -> 51 67 -> 1 69 -> 71 তাই এটি 1 মোড 7।

অবশ্যই, বাইনারিগুলিতে কেবল অষ্টাল সংখ্যার (3 বিটের গ্রুপ) যোগফল নিন।

দুঃখিত, আমি আশা করি আমি ভেরিলোগ গুরু ছিলাম, তবে জীবনের এই পর্যায়ে আমি পাটিগণিত কেবল অফার করতে পারি। রোন ডোফিলারের "ডেড রিকোনিং" এর মতো অনেক কৌশল দেখুন।


আমাদের কানাডিয়ান কাজিনদের যদি কিছু বিশেষ অ্যালগরিদম থাকতে পারে তা আমি অবাক হই। যেহেতু তারা কানাডিয়ান পয়সা অবৈধ করেছে, সমস্ত দাম নিকটতম $ 0.05 এ গোল হয়।
রিচার্ড 1941

1

একটি ভিএইচডিএল সাক্ষাত্কার প্রশ্নের ফলে কিছু ভিএইচডিএল কোডের ফলাফল হওয়া উচিত।

ডেভ টোয়েডের রাষ্ট্রীয় রূপান্তর সারণীর বাস্তবায়নের সাথে একটি গডল এলএলভিএম ব্যাকএন্ড বাগটি সন্ধান করার সুযোগ পেয়েছিলাম যেখানে ডিএইচডিএল এর লেখক একটি ফাংশনটিতে 17 টি লাইনে প্রয়োগটি নিঃশেষ করেছিলেন:

type remains is (r0, r1, r2, r3, r4); -- remainder values

    function mod5 (dividend: bit_vector) return boolean is
        type remain_array is array (NBITS downto 0) of remains;
        type branch is array (remains, bit) of remains;
        constant br_table:  branch := ( r0 => ('0' => r0, '1' => r1),
                                        r1 => ('0' => r2, '1' => r3),
                                        r2 => ('0' => r4, '1' => r0),
                                        r3 => ('0' => r1, '1' => r2),
                                        r4 => ('0' => r3, '1' => r4)
                                      );
        variable  remaind:    remains := r0;
        variable tbit:        bit_vector (NBITS - 1 downto 0) := dividend;
    begin
        for i in dividend'length - 1 downto 0 loop
            remaind := br_table(remaind,tbit(i));
        end loop;
        return remaind = r0;
end function;

সম্পর্কিত পরীক্ষার কেসটি খুব সহজেই সহজ ডিবাগিংয়ের অনুমতি দেয় এবং এনুম্যারেটেড প্রকারের মধ্যে VHDL এর সাথে সামঞ্জস্যপূর্ণ রাষ্ট্রের নাম ব্যবহার করে:

dave_tweed.png (দিয়া দিয়ে তৈরি)

এখানে ধারণাটি হ'ল ফাংশনটি (বা 27 লাইনের একটি উদাহরণ ভিএইচডিএল প্রোগ্রাম) একটি সাক্ষাত্কারের সময় কোনও ভিএইচডিএল উত্তর লেখার পক্ষে যথেষ্ট কম। জ্ঞান এবং দক্ষতা উভয়ই প্রদর্শনের জন্য একটি সাক্ষাত্কারের প্রশ্নটি নষ্ট করার বিষয়ে চিন্তা করার দরকার নেই, একজন ইন্টারভিউয়ের কাছে জিজ্ঞাসা করা হলে একটি বাস্তবায়ন রক্ষার জন্য আশা করা হবে।

( Llvm ব্যাকএন্ড বাগটি কমিট 1f5df6e এ স্থির করা হয়েছে আজ আগে ))

নোটের জিনিসগুলির মধ্যে একটি হ'ল রাষ্ট্রের রূপান্তর টেবিলটি আমাদের জানিয়েছে যে লভ্যাংশ থেকে ৫ টি বিয়োগের সময় একটি নিম্ন বিস্মরণকৃত মান (বা আর 4-র জন্য উভয় ট্রানজিশন) দ্বারা একটি রাজ্যে স্থানান্তর দ্বারা দেখানো হবে যেখানে 'বিট' বিট হবে '1'। এটি একটি পৃথক সারণিতে এনকোড করা যেতে পারে (বা রেকর্ড টাইপের একটি টেবিল যা অসুবিধাজনক মনে হয়)। আমরা historতিহাসিকভাবে গ্রাফিক্স হার্ডওয়্যারে অনুভূমিক স্ক্রিন রেজোলিউশনগুলির সাথে ডিল করি যা 5 পিক্সেলের গুণিত হয়।

এটি করা আমাদের একটি ডিভ / মোড 5 দেয় যা একটি ভাগফল এবং বাকী অংশ উত্পাদন করে:

library ieee;
use ieee.std_logic_1164.all;

entity divmod5 is
    generic (
        NBITS:  natural := 13 
    );
    port (
        clk:        in  std_logic;
        dividend:   in  std_logic_vector (NBITS - 1 downto 0);
        load:       in  std_logic;
        quotient:   out std_logic_vector (NBITS - 3 downto 0);
        remainder:  out std_logic_vector (2 downto 0);
        remzero:    out std_logic
    );
end entity;

architecture foo of divmod5 is
    type remains is (r0, r1, r2, r3, r4); -- remainder values
    type remain_array is array (NBITS downto 0) of remains;
    signal remaindr:    remain_array := (others => r0);
    signal dividendreg: std_logic_vector (NBITS - 1 downto 0);
    signal quot:        std_logic_vector (NBITS - 3 downto 0);
begin

parallel:
    for i in NBITS - 1 downto 0 generate
        type branch is array (remains, bit) of remains;
        -- Dave Tweeds state transition table:
        constant br_table:  branch := ( r0 => ('0' => r0, '1' => r1),
                                        r1 => ('0' => r2, '1' => r3),
                                        r2 => ('0' => r4, '1' => r0),
                                        r3 => ('0' => r1, '1' => r2),
                                        r4 => ('0' => r3, '1' => r4)
                                      );

        type qt is array (remains, bit) of std_ulogic;
    -- Generate quotient bits from Dave Tweeds state machine using q_table.
    -- A '1' when a remainder goes to a lower remainder or for both branches
    -- of r4. A '0' for all other branches.

        constant q_table:   qt :=     ( r0 => (others => '0'),
                                        r1 => (others => '0'),
                                        r2 => ('0' => '0', '1' => '1'),
                                        r3 => (others => '1'),
                                        r4 => (others => '1')
                                      );
        signal tbit:    bit;
    begin
        tbit <= to_bit(dividendreg(i));
        remaindr(i) <= br_table(remaindr(i + 1),tbit);
do_quotient:
        if i < quot'length generate   
            quot(i) <= q_table(remaindr(i + 1),tbit);
        end generate;
    end generate;

dividend_reg:
    process (clk)
    begin
        if rising_edge(clk) then
            if load = '1' then
                dividendreg <= dividend;
            end if;
        end if;
    end process;

quotient_reg:
    process (clk)
    begin
        if rising_edge (clk) then
            quotient <=  quot;
        end if;
    end process;

remainders:
    process (clk)
    begin
        if rising_edge(clk) then 
            remzero <= '0';
            case remaindr(0) is
                when r0 =>
                    remainder <= "000";
                    remzero <= '1';
                when r1 =>
                    remainder <= "001";
                when r2 =>
                    remainder <= "010";
                when r3 =>
                    remainder <= "011";
                when r4 =>
                    remainder <= "100";
            end case;
        end if;
    end process;

end architecture;

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity divmod5_tb is
end entity;

architecture foo of divmod5_tb is
    constant NBITS:    integer range 0 to 13 := 8;
    signal clk:        std_logic := '0';
    signal dividend:   std_logic_vector (NBITS - 1 downto 0);
    signal load:       std_logic := '0';

    signal quotient:   std_logic_vector (NBITS - 3 downto 0);
    signal remainder:  std_logic_vector (2 downto 0);
    signal remzero:    std_logic;
    signal psample:    std_ulogic;
    signal sample:     std_ulogic;
    signal done:       boolean;
begin
DUT:
    entity work.divmod5
        generic map  (NBITS)
        port map (
            clk => clk,
            dividend => dividend,
            load => load,
            quotient => quotient,
            remainder => remainder,
            remzero => remzero
        );
CLOCK:
    process
    begin
        wait for 5 ns;
        clk <= not clk;
        if done'delayed(30 ns) then
            wait;
        end if;
    end process;
STIMULI:
    process
    begin
        for i in 0 to 2 ** NBITS - 1 loop
            wait for 10 ns;
            dividend <= std_logic_vector(to_unsigned(i,NBITS));
            wait for 10 ns;
            load <= '1';
            wait for 10 ns;
            load <= '0';
        end loop;
        wait for 15 ns;
        done <= true;
        wait;
    end process;

SAMPLER:
    process (clk)
    begin
        if rising_edge(clk) then
            psample <= load;
            sample <= psample after 4 ns;
        end if;
    end process;

MONITOR:
    process (sample)
        variable i:     integer;
        variable div5:  integer;
        variable rem5:  integer;
    begin
        if rising_edge (sample) then
            i := to_integer(unsigned(dividend));
            div5 := i / 5;
            assert div5 = unsigned(quotient)
                report LF & HT &
                    "i = " & integer'image(i) &
                    " div 5 expected " & integer'image(div5) & 
                    " got " & integer'image(to_integer(unsigned(quotient)))
                SEVERITY ERROR;
            rem5 := i mod 5;
            assert rem5 = unsigned(remainder)
                report LF & HT &
                    "i = " & integer'image(i) &
                    " rem 5 expected " & integer'image(rem5) & 
                    " got " & integer'image(to_integer(unsigned(remainder)))
                SEVERITY ERROR;
        end if;
    end process;

end architecture;

জেনারেট স্টেটমেন্ট দিয়ে এখানে প্রয়োগ করা হয়েছে, কোটেন্ট বিট উত্পাদনকারী একটি অভ্যন্তরীণ জেনারেট স্টেটমেন্ট। বাকী রেকর্ডার অ্যারে একটি রাষ্ট্রের স্থানান্তর ট্রেস সরবরাহ করে:

divmod5_tb.png

একটি গাণিতিক অপারেশন ছাড়া সব।

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

একটি ক্লকড ক্রমিক ক্রিয়াকলাপের জন্য কিছুটা পাল্টা এবং প্রবাহ নিয়ন্ত্রণের প্রয়োজন হবে (জে জে ফ্লিপ ফ্লপ এবং কয়েকটি গেট)।

লভ্যাংশের আকারের উপর নির্ভর করে একটি সময় / জটিলতা বাণিজ্য বন্ধ রয়েছে যা আপনাকে সম্ভবত কোনও সাক্ষাত্কারে রক্ষা করতে হবে।

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