সুচিপত্র:

4 ধাপ ডিজিটাল সিকোয়েন্সার: 19 ধাপ (ছবি সহ)
4 ধাপ ডিজিটাল সিকোয়েন্সার: 19 ধাপ (ছবি সহ)

ভিডিও: 4 ধাপ ডিজিটাল সিকোয়েন্সার: 19 ধাপ (ছবি সহ)

ভিডিও: 4 ধাপ ডিজিটাল সিকোয়েন্সার: 19 ধাপ (ছবি সহ)
ভিডিও: অধ্যায় ১১: জীবপ্রযুক্তি- জিন ক্লোনিং, রিকম্বিনেন্ট ডিএনএ এর প্রয়োগ, জিনোম সিকোয়েন্সিং 2024, জুলাই
Anonim
4 ধাপ ডিজিটাল সিকোয়েন্সার
4 ধাপ ডিজিটাল সিকোয়েন্সার
4 ধাপ ডিজিটাল সিকোয়েন্সার
4 ধাপ ডিজিটাল সিকোয়েন্সার

CPE 133, Cal Poly San Luis Obispo

প্রকল্পের নির্মাতা: জেসন জনস্টন এবং বিজর্ন নেলসন

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

সিনথেসাইজার প্রতি মিনিটে ধ্রুব সংখ্যক ধাক্কায় চারটি নির্বাচিত কোয়ার্টার নোট বাজাতে সক্ষম হবে। ব্যবহারকারীরা সুইচ ব্যবহার করে প্রতিটি কোয়ার্টার নোট একটি মিউজিক্যাল পিচে বরাদ্দ করবে। এই প্রকল্পের জন্য আমরা 4-বিট ডিজিটাল টু এনালগ কনভার্টার (DAC) ব্যবহার করছি যা বোর্ড থেকে আউটপুট নিতে এবং এটিকে একটি এনালগ সিগন্যালে রূপান্তর করতে। DAC থেকে আউটপুট তখন একটি স্ট্যান্ডার্ড কম্পিউটার স্পিকারকে খাওয়ানো হবে, যা আমাদের সঙ্গীত তৈরি করবে। ষোলটি বিচ্ছিন্ন পিচ সম্ভব। আমরা আমাদের সিনথেসাইজারকে 12 টি নোটের একক অষ্টভের মধ্যে সীমাবদ্ধ রাখব, যা মধ্য C (261.6 Hz) এবং B4 (493.9 Hz) এর মধ্যে পড়ে। ব্যবহারকারীর একই সময়ে একাধিক নোট বরাদ্দ করার বিকল্প থাকবে, সেইসাথে অ্যাসাইন্ট হিট করে বিশ্রাম দেওয়ার সময় যখন কোন পিচ সুইচ উপরের দিকে স্থানান্তরিত হবে না। যেহেতু প্রতিটি নোট নির্বাচন করা হয়েছে এবং বাজানো হচ্ছে, লেটার নোট 7-সেগমেন্ট ডিসপ্লেতে দেখানো হয়েছে। আমরা বোর্ডে তিনটি বোতাম ব্যবহার করব, একটি সঙ্গীত বাজানো এবং বিরতি দেওয়ার জন্য, একটি সিন্থেসাইজার পুনরায় সেট করার জন্য এবং এটিকে "নির্বাচন" মোডে রাখার জন্য এবং তৃতীয়টি নির্বাচন মোডে থাকাকালীন প্রতিটি নোটকে একটি পিচ বরাদ্দ করার জন্য।

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

এখানে প্রয়োজনীয় সরঞ্জামগুলির একটি তালিকা রয়েছে:

  • ভিভাদো (অথবা যে কোন ভিএইচডিএল কর্মক্ষেত্র)
  • Basys 3 বা অনুরূপ FPGA বোর্ড
  • ডিজিটাল থেকে এনালগ রূপান্তরকারী (কমপক্ষে 4-বিট)
  • হেডফোন জ্যাক সহ স্পিকার
  • তারের বাড়ে

ধাপ 1: ডিজিটাল সিকোয়েন্সারের ব্যবহারকারী অপারেশন

ডিজিটাল সিকোয়েন্সারের ব্যবহারকারী অপারেশন
ডিজিটাল সিকোয়েন্সারের ব্যবহারকারী অপারেশন

নিম্নলিখিত ধাপগুলি হল ডিজিটাল সিকোয়েন্সার পরিচালনা করা। ডিজিটাল সিকোয়েন্সার 12 টি স্বতন্ত্র পিচ (C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B) এর প্লেব্যাক সমর্থন করে, যা 261.6 Hz থেকে 493.9 Hz পর্যন্ত।

1. বোর্ডকে নির্বাচন মোডে রাখতে বাম বোতাম টিপুন। যখন এই মোডে, বাম দিকের 4 টি সুইচ (13 থেকে 16 সুইচ) প্রতিটি একটি পৃথক পিচ মান সংরক্ষণ করতে ব্যবহৃত হবে।

2. একটি নির্বাচন করতে, বাম সুইচগুলির একটিকে উল্টে দিন, এবং তারপর একটি পছন্দসই পিচ নির্বাচন করতে ডানদিকের 4 টি সুইচ (1 থেকে 4 সুইচ) ব্যবহার করুন। ডান সুইচগুলির একটি নির্দিষ্ট সংমিশ্রণের সাথে যুক্ত পিচ সাতটি সেগমেন্ট ডিসপ্লেতে প্রদর্শিত হবে এবং যখনই ডান সুইচগুলি একটি নতুন সংমিশ্রণে স্থানান্তরিত হবে তখন ডিসপ্লেটি নতুন সংযুক্ত পিচে আপডেট হবে। বাম সুইচগুলির একটিতে কখনও পিচ বরাদ্দ না করে, বা নোটের ডিসপ্লেতে 0 হিসাবে দেখানো পিচ বরাদ্দ করে বিশ্রাম দেওয়া যেতে পারে। একবার পছন্দসই পিচ পাওয়া গেলে এবং ডিসপ্লেতে দেখানো হলে, সেই নির্দিষ্ট পিচটি নোটের জন্য বরাদ্দ করতে নিচের অ্যাসাইন বোতামটি টিপুন।

3. অবশিষ্ট তিনটি নোটের জন্য ধাপ 2 পুনরাবৃত্তি করুন, অবশিষ্ট বাম সুইচগুলির প্রতিটিকে পৃথকভাবে উল্টে দিয়ে, ডান সুইচগুলির সাথে সংশ্লিষ্ট পিচ নির্বাচন করুন এবং নোটের পিচ বরাদ্দ করার জন্য নীচের বোতাম টিপুন। একাধিক নোট একই বাম সুইচগুলির একাধিককে একই সময়ে উপরের দিকে সরিয়ে দিয়ে একই পিচ বরাদ্দ করা যেতে পারে।

4. এখন যেহেতু সমস্ত নোট পিচ বরাদ্দ করা হয়েছে, ডিজিটাল সিকোয়েন্সার খেলার জন্য প্রস্তুত। স্পিকারে নোট চালানোর জন্য, কেবল সঙ্গীত বাজানো শুরু করতে ডান প্লে/বিরতি বোতাম টিপুন। প্লেব্যাক ক্রমের ক্রম বাম সুইচগুলির সাথে যুক্ত পিচগুলি বাম থেকে ডানে প্রতিফলিত করে। নোটগুলি 1, 2, 3, 4, 1, 2 ক্রমে প্রতি মিনিটে একটি নির্দিষ্ট সংখ্যক বিট এ বাজানো হবে। ডিসপ্লেটি নোট দেখাবে যা বর্তমানে চলছে স্পিকার সঙ্গীত বাজানোর সময়। সঙ্গীত প্লেব্যাক থামাতে, কেবল ডান বোতাম টিপুন, এবং তারপরে সঙ্গীত বাজানো বন্ধ হবে এবং ডিসপ্লেতে একটি বিরতি চিহ্ন দেখানো হবে। আবার ডান বোতাম টিপে আবার প্লেব্যাক শুরু হবে।

ধাপ 2: প্রযুক্তিগত বিবরণ

প্রযুক্তিগত বিবরণ
প্রযুক্তিগত বিবরণ

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

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

ইনপুট

  • Clk (স্থানীয় ঘড়ি সংকেত)
  • পিপি (খেলা/বিরতি)
  • সেল (সিলেকশন মোডে সিনথেসাইজার রাখুন)
  • বরাদ্দ করুন (একটি পিচে একটি পদক্ষেপ বরাদ্দ করুন)
  • ধাপ (অবস্থানগত নোট)
  • ফ্রিক (পছন্দসই পিচ তৈরির সুইচ)

আউটপুট

  • অ্যানোড (7-সেগমেন্ট অ্যানোড)
  • ক্যাথোড (7-সেগমেন্ট ক্যাথোড)
  • DAC (DAC ড্রাইভিং 4-বিট)

ধাপ 3: প্রযুক্তিগত বিবরণ

প্রযুক্তিগত বিবরণ
প্রযুক্তিগত বিবরণ

ধাপ 4: 7-সেগমেন্ট ক্লক ডিভাইডার

7-সেগমেন্ট ক্লক ডিভাইডার
7-সেগমেন্ট ক্লক ডিভাইডার

আমাদের সিনথেসাইজার তিনটি ক্লক ডিভাইডার ব্যবহার করে, সমস্ত উৎপাদক সংকেত যা আমাদের প্রকল্পে ভিন্ন উদ্দেশ্য পূরণ করে। একটি ক্লক ডিভাইডার একটি নেটিভ ক্লক সিগন্যাল নেয় এবং একটি পরিবর্তিত সিগন্যাল তৈরি করে যার ফ্রিকোয়েন্সি থাকে যা আসল ক্লক সিগন্যালের চেয়ে কম। বেসিস 3 এর নেটিভ ঘড়ি 100 মেগাহার্টজ। এই ফ্রিকোয়েন্সি যা আমাদের ঘড়ি বিভাজক ব্যবহার করে। আপনি যদি একটি ভিন্ন FPGA বোর্ড ব্যবহার করেন যা একটি ভিন্ন নেটিভ ক্লক ফ্রিকোয়েন্সি সহ, আপনাকে কোড পরিবর্তন করতে হতে পারে।

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

এটি অর্জনের জন্য, ডিভাইডার নেটিভ 100 মেগাহার্টজ সিগন্যাল নেয় এবং প্রতিটি ক্রমবর্ধমান প্রান্তে গণনা করে। যখন কাউন্টার 416667 পৌঁছায়, আউটপুট নিম্ন থেকে উচ্চ, বা তদ্বিপরীত হবে।

ইনপুট

Clk (স্থানীয় ঘড়ি সংকেত)

আউটপুট

Clk_7seg (seg_display)

উপাদান

  • D রেজিস্টার
  • MUX
  • বৈদ্যুতিন সংকেতের মেরু বদল
  • অ্যাডার

ধাপ 5: প্রতি মিনিট ক্লক ডিভাইডারে বিট

বিট পার মিনিট ক্লক ডিভাইডার
বিট পার মিনিট ক্লক ডিভাইডার

BPM ক্লক ডিভাইডার একইভাবে কাজ করে। এই বিভাজক ঘড়ির ফ্রিকোয়েন্সি তৈরি করে যা প্লে স্টেটে টোন আউটপুট করার সময় চারটি ধাপের মধ্যে স্যুইচিং চালায়। আমরা 100 BPM এ নোটের মধ্যে স্যুইচ করার সিদ্ধান্ত নিয়েছি। 100 BPM এ, প্রতিটি নোট সেকেন্ডের 3/5 এর জন্য বাজানো হবে। ফলে সিগন্যালের ফ্রিকোয়েন্সি 1.67 Hz হবে।

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

ইনপুট

Clk (নেটিভ ক্লক ফ্রিকোয়েন্সি)

আউটপুট

Clk_BPM (আউটপুট_এফএসএম)

উপাদান

  • D রেজিস্টার
  • MUX
  • বৈদ্যুতিন সংকেতের মেরু বদল
  • অ্যাডার

ধাপ 6: পিচ ক্লক ডিভাইডার

পিচস ক্লক ডিভাইডার
পিচস ক্লক ডিভাইডার

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

একই গণনা পদ্ধতি এখানে ব্যবহার করা হয়। আমরা যে নির্দিষ্ট মানগুলি গণনা করেছি তার জন্য, Clk_div_pitches লেবেলযুক্ত ফাইলটি দেখুন।

ইনপুট

Clk (নেটিভ ক্লক ফ্রিকোয়েন্সি)

আউটপুট

C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (to output_select)

উপাদান

  • D রেজিস্টার
  • MUX
  • বৈদ্যুতিন সংকেতের মেরু বদল
  • অ্যাডার

ধাপ 7: স্টেট মেশিন চালান/বিরতি দিন/নির্বাচন করুন

খেলুন/বিরতি দিন/স্টেট মেশিন নির্বাচন করুন
খেলুন/বিরতি দিন/স্টেট মেশিন নির্বাচন করুন

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

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

ইনপুট

  • Clk (নেটিভ ক্লক ফ্রিকোয়েন্সি)
  • সেল (বাম বোতাম)
  • পিপি (ডান বোতাম)

আউটপুট

P_state (বর্তমান অবস্থা, output_FSM, note_assign, seg_dsiplay, final_select)

উপাদান

  • MUX
  • D রেজিস্টার

ধাপ 8: স্টেট মেশিন চালান/বিরতি দিন/নির্বাচন করুন

খেলুন/বিরতি দিন/স্টেট মেশিন নির্বাচন করুন
খেলুন/বিরতি দিন/স্টেট মেশিন নির্বাচন করুন

ধাপ 9: FSM আউটপুট

FSM আউটপুট
FSM আউটপুট

এটি পূর্ববর্তী বিভাগে উল্লিখিত দ্বিতীয় FSM। এই FSM অন্যের চেয়ে ভিন্ন ফাংশন প্রদান করে, কিন্তু এর ভিত্তি মূলত একই।

আউটপুট FSM শুধুমাত্র তখনই কাজ করে যদি প্রথম FSM থেকে বর্তমান অবস্থা "01" (খেলার অবস্থা) হয়। মূলত, এটি মডিউলের জন্য সক্ষম। যদি রাজ্যটি "01" হয়, তাহলে FSM BPM ঘড়ি সংকেতের ক্রমবর্ধমান প্রান্তে রাজ্যের মধ্যে স্যুইচ করতে চলেছে। আমরা এটি করি কারণ আউটপুট_এফএসএম নিয়ন্ত্রণ করছে কোন নির্বাচিত পিচের জন্য কোন বাইনারি সংখ্যা আউটপুট_সलेक्ट এবং সেগ_ডিসপ্লে মডিউলে পাঠানো হয়। FSM- এর একটি 16-বিট ইনপুট নোট অ্যাসাইন মডিউল থেকে আসছে, যা পরবর্তী কভার করা হবে। আউটপুট_এফএসএমের জন্য "00" অবস্থায়, মডিউল নির্ধারিত প্রথম নোটের জন্য "xxxx" আউটপুট করবে। তারপর "01" তে, এটি দ্বিতীয় নোটের জন্য "yyyy" আউটপুট করবে এবং তাই প্রতিটি নোটের জন্য প্রথম নোটের দিকে ফিরে যাওয়ার আগে। উপরের স্টেট ডায়াগ্রাম দেখুন।

এই FSM প্রথম থেকে আলাদা কারণ রাজ্যের মধ্যে স্যুইচিং নিয়ন্ত্রণ করার জন্য কোন ইনপুট যুক্তি নেই। পরিবর্তে, FSM শুধুমাত্র তখনই কাজ করবে যখন প্রথম FSM থেকে রাজ্য "01" হবে, এবং তারপর এই FSM শুধুমাত্র ঘড়ির সংকেতের ক্রমবর্ধমান প্রান্তে রাজ্যের মধ্যে স্থানান্তরিত হবে। আরেকটি পার্থক্য হল যে এই মডিউলটির আউটপুট লজিক আছে, যার অর্থ এটি বর্তমান অবস্থাকে আউটপুট করে না, এটি সেই অবস্থায় পিচের জন্য বাইনারি সংখ্যা আউটপুট করে।

ইনপুট

  • Clk_BPM (ঘড়ি বিভাজক থেকে BPM ঘড়ি সংকেত)
  • FSM1_state (PPS FSM থেকে PS)
  • পিচ_ইন (নোট_সাইন থেকে পিচ)

আউটপুট

Pitch_out (একটি সময়ে একটি পিচ, output_select এবং seg_display)

উপাদান

  • MUX
  • D রেজিস্টার

ধাপ 10: FSM আউটপুট

FSM আউটপুট
FSM আউটপুট

ধাপ 11: নোট বরাদ্দ করুন

নোট অ্যাসাইন
নোট অ্যাসাইন

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

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

ইনপুট

  • P_state (PPS FSM থেকে বর্তমান অবস্থা)
  • সেল (বাম বোতাম)
  • সুইচ (এক ধাপ সুইচ)
  • ফ্রিক (পিচের জন্য ডানদিকে সুইচ)
  • বরাদ্দ করুন (নীচের বোতাম, একটি নোট বরাদ্দ করুন)

আউটপুট

পিচ (বাইনারি সংখ্যা, আউটপুট_এফএসএম)

উপাদান

  • MUX
  • ডি রেজিস্টার

ধাপ 12: আউটপুট নির্বাচন করুন

আউটপুট নির্বাচন
আউটপুট নির্বাচন

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

আমরা অদ্ভুত রাউটিংয়ের জন্য দু apologখিত, ভিভাদো clk_div_pitches ফাইলের জন্য বর্ণানুক্রমিকভাবে পিচ সিগন্যালগুলি সংগঠিত করেছিল, কিন্তু এই ফাইলের জন্য এটি বাইনারি সংখ্যার আরোহণের দ্বারা তাদের সংগঠিত করেছিল, যার ফলে পিচগুলি একটি ভিন্ন ক্রমে ছিল। এছাড়াও মনে রাখবেন যে আউটপুট_এফএসএম থেকে বাইনারি সংখ্যাটি "0000" বা "1100" এর চেয়ে বড় কিছু হলে MUX একটি সমতল '0' সংকেতের মাধ্যমে পাঠানো হয়।

ইনপুট

  • পিচ (আউটপুট_এফএসএম থেকে);
  • C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (পিচ ঘড়ির সংকেত)

আউটপুট

সুর

উপাদান

MUX

ধাপ 13: স্কয়ার ওয়েভ জেনারেল

স্কয়ার ওয়েভ জেনারেল
স্কয়ার ওয়েভ জেনারেল

মডিউল square_wave হল বর্গ তরঙ্গের জন্য জেনারেটর যা বোর্ড থেকে DAC তে আউটপুট করা হয়। পূর্ববর্তী ফাইল থেকে টোন সিগন্যাল ব্যবহার করে, এই স্কয়ার_ওয়েভ টনের ক্রমবর্ধমান প্রান্তে "0000" এবং "1111" এর মধ্যে 4 বিট সংখ্যা উল্টে দেয়। টোন একটি নির্দিষ্ট পিচ ফ্রিকোয়েন্সি, তাই স্কয়ার_ওয়েভ একটি ভিন্ন ফ্রিকোয়েন্সি সহ একটি তরঙ্গ উৎপন্ন করে যখন আউটপুট_এফএসএম অন্য রাজ্যে স্থানান্তর করে। এই মডিউল থেকে 4-বিট আউটপুট fin_sel মডিউলে যায়, যেখানে যুক্তি নির্দেশ করে যে এই বাসটি PPS FSM থেকে রাজ্যের উপর ভিত্তি করে আউটপুট করা হবে কিনা।

এই বর্গ তরঙ্গ জেনারেটরের একটি বিকল্প একটি সাইন ওয়েভ তৈরি করছে। যদিও এটি সম্ভবত একটি ভাল চূড়ান্ত স্বন উত্পাদন করবে, এটি বাস্তবায়ন করা অনেক বেশি কঠিন, তাই আমরা কেবল একটি বর্গাকার তরঙ্গ তৈরি করতে বেছে নিয়েছি।

ইনপুট

টোন (আউটপুট_সलेक्ट থেকে দোলনা বিট)

আউটপুট

DAC_input (4-বিট বাস দোলানো যা একই স্বরের ফ্রিকোয়েন্সি তে পরিবর্তিত হয়)

উপাদান

  • বৈদ্যুতিন সংকেতের মেরু বদল
  • D রেজিস্টার

ধাপ 14: 7-সেগমেন্ট প্রদর্শন

7-সেগমেন্ট ডিসপ্লে
7-সেগমেন্ট ডিসপ্লে

Seg_display মডিউল আমাদের বেসিস বোর্ডে 7-সেগমেন্ট ডিসপ্লে নিয়ন্ত্রণ করে। মডিউলের মধ্যে, দুটি প্রক্রিয়া ঘটে। প্রথম প্রক্রিয়া ফ্রেককে ডিকোড করে যখন "নির্বাচন" অবস্থায় বা পিচ যখন "প্লে" মোডে থাকে। "বিরতি" মোডে, মডিউল বিরতি চিহ্ন দেখানোর জন্য ডিকোড করে। ভিএইচডিএল কোডের দিকে তাকিয়ে, আপনি দেখতে পাচ্ছেন যে বাইনারি ডিকোডার আসলে ইনপুটটিকে দুটি ভিন্ন সংকেত, ক্যাথোড 1 এবং ক্যাথোড 2 এ ডিকোড করে। ক্যাথোড 1 প্রদর্শিত হওয়ার জন্য পিচের সাথে সম্পর্কিত চিঠির প্রতিনিধিত্ব করে, এবং ক্যাথোড 2 যদি সমতল প্রতীক (খ) থাকে তাহলে সেটিকে উপস্থাপন করে। এর কারণ seg_display মডিউল দ্বারা সম্পন্ন দ্বিতীয় প্রক্রিয়া সম্পর্কিত।

একটি বেসিস 3 বোর্ডে, সেগমেন্ট ডিসপ্লেতে সাধারণ ক্যাথোড রয়েছে। অ্যানোডগুলি নিয়ন্ত্রণ করে কোন অঙ্কটি চালু আছে, ক্যাথোডগুলি নিয়ন্ত্রণ করে কোন বিভাগগুলি চালু আছে। যেহেতু ডিসপ্লেতে সাধারণ ক্যাথোড রয়েছে, তার মানে আপনি এক সময়ে শুধুমাত্র একটি সেগমেন্ট প্রদর্শন করতে পারেন। এটি এই প্রকল্পের জন্য একটি সমস্যা তৈরি করেছে কারণ আমরা একই সময়ে প্রথম অঙ্কে একটি চিঠি এবং সমতল প্রতীক প্রদর্শন করতে চাই। এখন 7seg ঘড়ি সংকেত মনে আছে? এই সমস্যাটি সমাধান করার জন্য, আমরা 7seg ঘড়ি সংকেত এন্ডোড এবং ক্যাথোডগুলি পিছনে পরিবর্তন করি। কারণ ঘড়ির সংকেত 240 Hz এবং আমরা দুটি সংখ্যা ব্যবহার করছি, প্রতিটি অঙ্ক 60 Hz এ দোলবে। মানুষের চোখের কাছে, মনে হবে যে অঙ্কগুলি মোটেও দোলনা নয়।

এছাড়াও মনে রাখবেন যে basys3 বোর্ড প্রদর্শন নেতিবাচক যুক্তি ব্যবহার করে। এর মানে হল যদি একটি অ্যানোড বা ক্যাথোড '0' তে সেট করা হয়, তাহলে সেই অঙ্ক বা সেগমেন্ট চালু থাকবে এবং উল্টো।

ইনপুট

  • পিচ (একটি নোটের জন্য বাইনারি সংখ্যা, প্লে স্টেটে ব্যবহৃত)
  • ফ্রিকোয়েন্সি (ফ্রিকোয়েন্সি সুইচ, নির্বাচনের অবস্থায় ব্যবহৃত হয়)
  • P_state (PPS FSM থেকে বর্তমান অবস্থা)
  • Clk_240Hz (Clk_div_7seg থেকে ঘড়ির সংকেত, 120 ডবল কারণ আমরা শুধু উঠতি প্রান্ত ব্যবহার করছি)

আউটপুট

  • ক্যাথোড (বাস যা ডিসপ্লেতে সেগমেন্ট নিয়ন্ত্রণ করে, চূড়ান্ত আউটপুট)
  • অ্যানোড (ডিসপ্লেতে সংখ্যা নিয়ন্ত্রণকারী বাস, চূড়ান্ত আউটপুট)

উপাদান

  • ল্যাচ
  • MUX
  • D রেজিস্টার

ধাপ 15: চূড়ান্ত নির্বাচন

চূড়ান্ত নির্বাচন
চূড়ান্ত নির্বাচন

চূড়ান্ত নির্বাচন এই প্রকল্পে ব্যবহৃত শেষ মডিউল। আরেকটি সহজ মডিউল, এই মডিউলটি চূড়ান্ত আউটপুট নিয়ন্ত্রণ করে যা DAC- এ যাবে। যখন "নির্বাচন" বা "বিরতি" অবস্থায়, মডিউলটি একটি স্ট্যাটিক "0000" আউটপুট করতে যাচ্ছে যাতে স্পিকার থেকে কোন সঙ্গীত বাজানো হবে না। "প্লে" অবস্থায়, মডিউল স্কয়ার_ওয়েভ দ্বারা নির্ধারিত oscillating 4-বিট আউটপুট করবে।

ইনপুট

  • P_state (PPS FSM থেকে বর্তমান অবস্থা)
  • DAC_input (square_wave থেকে 4-বিট দোলানো)

আউটপুট

DAC (খেলার অবস্থায় DAC_input এর সমান, চূড়ান্ত আউটপুট)

উপাদান

MUX

ধাপ 16: বাহ্যিক ডিভাইস: DAC

বাহ্যিক ডিভাইস: DAC
বাহ্যিক ডিভাইস: DAC

একটি ডিজিটাল টু এনালগ কনভার্টার (DAC) একটি বিচ্ছিন্ন সংকেত নেয় এবং এটি একটি অবিচ্ছিন্ন সংকেতে রূপান্তরিত করে। আমাদের DAC এর চারটি বিট আছে এবং এটি একটি সংক্ষিপ্ত পরিবর্ধক থেকে তৈরি। সাপ্লাই এবং ফিডব্যাক লুপে রেসিস্টরের অনুপাত ব্যবহার করে, আমরা এমন একটি সিস্টেম তৈরি করতে সক্ষম হয়েছি যা প্রতিটি শাখার "সংক্ষিপ্তসার" তৈরি করে 16 টি ভিন্ন স্তরে আউটপুট করে। বিট 0, শীর্ষ শাখা, সর্বনিম্ন ওজন বহন করে এবং যখন শাখাগুলি উচ্চতর প্রতিরোধের কারণে উচ্চতর হয় তখন ক্ষুদ্রতম সম্ভাবনার অবদান রাখে। ডালের নিচে যাওয়ার সাথে সাথে ওজন বেড়ে যায়। যদি আপনি বাইনারি আপে গণনা করতেন এবং তারপর বিট ইনপুট ব্যবহার করে ফিরে যান, আউটপুট ভোল্টেজগুলি ধাপে সাইন ওয়েভের মতো দেখাবে। DAC- এর ইনপুট 4-বিট সিগন্যাল ট্রান্সফার করার জন্য বোর্ডের PMOD- এর একটির সাথে সংযুক্ত ছিল।

DAC মূলত একটি ইলেকট্রিক্যাল ইঞ্জিনিয়ারিং ক্লাসের জন্য একত্রিত হয়েছিল এবং এটি আমাদের দ্বারা ডিজাইন এবং বিক্রয় করা হয়েছিল, একটি দোকান থেকে কেনা হয়নি। উপরে মুদ্রিত সার্কিট বোর্ড তৈরির জন্য ডিজাইন ফাইলের একটি ছবি রয়েছে।

ধাপ 17: বাহ্যিক ডিভাইস: স্পিকার

বাহ্যিক ডিভাইস: স্পিকার
বাহ্যিক ডিভাইস: স্পিকার

এই প্রকল্পের জন্য, আপনি স্পিকারগুলির একটি দুর্দান্ত সুন্দর জোড়া কিনতে চান না। আপনি বলতে পারেন, শব্দটি বেশ মৌলিক। আমরা গিয়েছিলাম এবং Best Buy থেকে 8 ডলারের কম্পিউটার স্পিকার কিনেছিলাম। হেডফোন জ্যাক সহ যেকোন কিছু ঠিকঠাক কাজ করে। মনোটোন ভাল কাজ করে। আপনি এমনকি হেডফোন ব্যবহার করতে পারেন, কিন্তু আপনি তাদের উড়িয়ে দিতে পারেন!

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

আমাদের স্পিকারের জন্য, আমরা সেগুলিকে সর্বোচ্চ সেটিংয়ে পরিণত করেছি এবং শালীনভাবে উচ্চস্বরে শব্দ পেয়েছি।

এবং এটি একটি FPGA বোর্ড থেকে একটি ডিজিটাল সিকোয়েন্সার তৈরির শেষ ধাপ! আমাদের সমস্ত ভিএইচডিএল কোড ডাউনলোড করার জন্য পরবর্তী দুটি বিভাগে যান এবং সিকোয়েন্সারটি অ্যাকশনে দেখুন।

ধাপ 18: ভিডিও ডেমো

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

ধাপ 19: ভিএইচডিএল কোড

সিকোয়েন্সার তৈরির সময় ব্যবহৃত সীমাবদ্ধতা এবং সিম ফাইল সহ পুরো প্রকল্পের কোড এখানে। লক্ষ্য করুন যে অব্যবহৃত নকশা ফাইলগুলি স্থাপত্যে তাই বলে।

প্রস্তাবিত: