Სარჩევი:

4 საფეხურიანი ციფრული მიმდევარი: 19 ნაბიჯი (სურათებით)
4 საფეხურიანი ციფრული მიმდევარი: 19 ნაბიჯი (სურათებით)

ვიდეო: 4 საფეხურიანი ციფრული მიმდევარი: 19 ნაბიჯი (სურათებით)

ვიდეო: 4 საფეხურიანი ციფრული მიმდევარი: 19 ნაბიჯი (სურათებით)
ვიდეო: III და IV კატეგორიის საწარმოების ფინანსური ანგარიშგების წარდგენა 2024, ნოემბერი
Anonim
4 საფეხურიანი ციფრული მიმდევარი
4 საფეხურიანი ციფრული მიმდევარი
4 საფეხურიანი ციფრული მიმდევარი
4 საფეხურიანი ციფრული მიმდევარი

CPE 133, Cal Poly San Luis Obispo

პროექტის შემქმნელები: ჯეისონ ჯონსტონი და ბიორნ ნელსონი

დღევანდელ მუსიკალურ ინდუსტრიაში, ერთ -ერთი ყველაზე ხშირად გამოყენებული "ინსტრუმენტი" არის ციფრული სინთეზატორი. მუსიკის ყველა ჟანრი, ჰიპ-ჰოპიდან პოპამდე და თუნდაც ქვეყნამდე, იყენებს ციფრულ სინთეზაიერს სტუდიაში, რათა შექმნას იმ დარტყმები და ბგერები, რაც მათ სჭირდებათ თავიანთი მუსიკის გასაცოცხლებლად. ამ გაკვეთილში ჩვენ შევქმნით ძალიან მარტივ სინთეზატორს Basys 3 FPGA დაფით.

სინთეზატორს შეეძლება ოთხი შერჩეული მეოთხედი ნოტის დაკვრა წუთში მუდმივი რაოდენობის დარტყმით. მომხმარებლები გამოიყენებენ გადამრთველებს, რათა ყოველი მეოთხედი ნოტი მიანიჭონ მუსიკალურ მოედანს. ამ პროექტისთვის ჩვენ ვიყენებთ 4 ბიტიან ციფრულ ანალოგურ კონვერტორს (DAC), რომ გამოვიღოთ გამომავალი დაფადან და გადავიყვანოთ იგი ანალოგიურ სიგნალად. DAC– დან გამომავალი იქნება სტანდარტული კომპიუტერის სპიკერი, რომელიც ქმნის ჩვენს მუსიკას. თექვსმეტი დისკრეტული მოედანია შესაძლებელი. ჩვენ შემოვიფარგლებით ჩვენი სინთეზატორით 12 ნოტის ერთ ოქტავაზე, რომელიც მოდის შუა C (261.6 Hz) და B4 (493.9 Hz) შორის. მომხმარებელს ასევე ექნება შესაძლებლობა მიანიჭოს ერთდროულად რამოდენიმე შენიშვნა, ასევე დაისვას დანარჩენი დანიშნულების დარტყმისას, როდესაც არცერთი საფეხური გადამრთველი არ არის ზემოთ გადატანილი. თითოეული ნოტის არჩევისას და დაკვრისას, ასო შენიშვნა ნაჩვენებია 7 სეგმენტის ეკრანზე. ჩვენ ასევე გამოვიყენებთ დაფაზე არსებულ სამ ღილაკს, ერთი მუსიკის დაკვრისა და პაუზისთვის, ერთი სინთეზატორის გადატვირთვისა და "შერჩევის" რეჟიმში ჩასასმელად, ხოლო მესამეს შერჩევის რეჟიმში ყოფნისას თითოეული ნოტის მონიშნვისათვის.

მას შემდეგ, რაც მომხმარებელი დაკმაყოფილდება შენიშვნების არჩევით და დაკვრის ღილაკზე დაჭერის შემდეგ, სინთეზატორი თითოეულ ნოტს ზედიზედ დაუკრავს მანამ, სანამ მომხმარებელი არ დააჭერს პაუზას ან შეარჩევს.

აქ არის საჭირო აღჭურვილობის ჩამონათვალი:

  • Vivado (ან ნებისმიერი VHDL სამუშაო ადგილი)
  • 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. დააწკაპუნეთ მარცხენა ღილაკზე, რომ მოათავსოთ დაფა შერჩევის რეჟიმში. ამ რეჟიმში ყოფნისას, მარცხენა ოთხი კონცენტრატორი (კონცენტრატორები 13 -დან 16 -მდე) თითოეული გამოყენებული იქნება მკვეთრი სიმაღლის შესანახად.

2. არჩევანის გაკეთების მიზნით, გადააქციეთ ერთი მარცხენა გადამრთველი და შემდეგ გამოიყენეთ მარჯვენა 4 კონცენტრატორი (კონცენტრატორები 1 -დან 4 -მდე), რომ აირჩიოთ სასურველი მოედანი. მარჯვენა გადამრთველების კონკრეტულ კომბინაციასთან დაკავშირებული სიმაღლე ნაჩვენები იქნება შვიდი სეგმენტის ეკრანზე და ეკრანი განახლდება ახალ ასოცირებულ მოედანზე, როდესაც მარჯვენა გადამრთველები ახალ კომბინაციაზე გადადის. დასვენება შეიძლება დაინიშნოს არცერთ მარცხენა კონცენტრატორზე სიმაღლის მინიჭებით, ან შენიშვნისთვის ეკრანზე 0 -ით ნაჩვენები სიმაღლის მინიჭებით. მას შემდეგ, რაც სასურველი მოედანი მოიძებნება და გამოჩნდება ეკრანზე, დააჭირეთ ქვედა მინიჭების ღილაკს, რომ მიანიჭოთ შენიშვნა ამ კონკრეტულ მოედანს.

3. გაიმეორეთ ნაბიჯი 2 სამი დარჩენილი ჩანიშვნისათვის, თითოეული მარცხენა გადამრთველის ინდივიდუალურად ჩართვით, მარჯვენა ჩამრთველის შესაბამისი არხის არჩევით და ქვედა ღილაკზე დაჭერით, რათა შენიშვნისათვის მიანიჭოთ სიმაღლე. მრავალ შენიშვნას შეიძლება მიენიჭოს ერთი და იგივე სიმაღლე, ერთზე მეტი მარცხენა გადამრთველის ერთდროულად ზევით გადაწევით.

4. ახლა, როდესაც ყველა ნოტი დაინიშნა, ციფრული მიმდევარი მზად არის სათამაშოდ. სპიკერზე ნოტების დასაკრავად, უბრალოდ დააჭირეთ მარჯვენა დაკვრის/პაუზის ღილაკს, რომ დაიწყოთ მუსიკის დაკვრა. დაკვრის თანმიმდევრობის თანმიმდევრობა ასახავს მარცხენა გადამრთველებს, მარცხნიდან მარჯვნივ. ნოტები ითამაშება წუთში განსაზღვრული რაოდენობის დარტყმით, თანმიმდევრობით 1, 2, 3, 4, 1, 2…. ეკრანზე გამოჩნდება შენიშვნა, რომელიც ამჟამად უკრავს, რადგან დინამიკები უკრავენ მუსიკას. მუსიკის დაკვრის შესაჩერებლად, უბრალოდ დააჭირეთ მარჯვენა ღილაკს და შემდეგ მუსიკა შეწყვეტს დაკვრას და ეკრანზე გამოჩნდება პაუზის სიმბოლო. მარჯვენა ღილაკის კვლავ დაჭერით აღდგება დაკვრა.

ნაბიჯი 2: ტექნიკური დეტალები

Ტექნიკური დეტალები
Ტექნიკური დეტალები

ჩვენი სინთეზატორი იყენებს სხვადასხვა ციფრულ კომპონენტს. მოყვება სასრული მდგომარეობის მანქანები, რეგისტრები, მულტიპლექსერები, საათის გამყოფი და სხვა. ჩვენი სინთეზატორის შესაქმნელად, ჩვენ გამოვიყენეთ 10 უნიკალური მოდულური ფაილი. იმის ნაცვლად, რომ თითოეული მოდული იყოს კომპონენტი, ჩვენ დავშალეთ მოდულური ფაილები ფუნქციის მიხედვით. მოდულების უმეტესობა, შედეგად, ერთზე მეტი კომპონენტია. გაითვალისწინეთ, რომ ზემოთ მოყვანილი სურათი გვიჩვენებს ყველა ბლოკს, რომელიც ერთმანეთთან არის დაკავშირებული ჩვენს საუკეთესო დიზაინში.

ჩვენ განვიხილავთ თითოეულ მოდულს, შეყვანისა და შედეგების აღწერით, მისი კომპონენტების დაშლით და საერთო დიზაინის განმარტებით. ZIP ფაილი შედის ინსტრუქციის ბოლოში, რომელიც შეიცავს ყველა VHDL კოდის ფაილს, რომელიც გამოიყენება პროექტში.

შეყვანა

  • Clk (მშობლიური საათის სიგნალი)
  • PP (თამაში/პაუზა)
  • სელ (მოათავსეთ სინთეზატორი შერჩევის რეჟიმში)
  • მიანიჭეთ (მიანიჭეთ ნაბიჯი მოედანს)
  • ნაბიჯი (პოზიტიური შენიშვნები)
  • სიხშირე (კონცენტრატორები ქმნიან სასურველ სიმაღლეს)

გამომავალი

  • ანოდი (7 სეგმენტის ანოდი)
  • კათოდი (7 სეგმენტიანი კათოდები)
  • DAC (4 ბიტიანი მართვის DAC)

ნაბიჯი 3: ტექნიკური დეტალები

Ტექნიკური დეტალები
Ტექნიკური დეტალები

ნაბიჯი 4: 7 სეგმენტიანი საათის გამყოფი

7 სეგმენტიანი საათის გამყოფი
7 სეგმენტიანი საათის გამყოფი

ჩვენი სინთეზატორი იყენებს სამი საათის გამყოფს, ყველა აწარმოებს სიგნალებს, რომლებიც სხვადასხვა მიზანს ემსახურება ჩვენს პროექტში. საათის გამყოფი იღებს მშობლიურ საათის სიგნალს და აწარმოებს შეცვლილ სიგნალს, რომელსაც აქვს სიხშირე, რომელიც ნაკლებია ვიდრე ორიგინალური საათის სიგნალი. Basys 3 -ის მშობლიური საათი არის 100 MHz. ეს არის სიხშირე, რომელსაც ჩვენი საათის გამყოფი იყენებს. თუ თქვენ იყენებთ სხვა FPGA დაფას განსხვავებული მშობლიური საათის სიხშირით, შეიძლება დაგჭირდეთ კოდის შეცვლა.

7-სეგმენტიანი საათის გამყოფი აწარმოებს სიგნალს, რომელიც ამოძრავებს seg_display ფაილს. ჩვენ განვმარტავთ, თუ როგორ მუშაობს ეს ფაილი უფრო დეტალურად, როდესაც მის განყოფილებაში მოვხვდებით. არსებითად, ეს საათის გამყოფი აწარმოებს 240 Hz სიგნალს, რომელიც გამოყენებული იქნება ეკრანზე ანოდებსა და კათოდებს შორის გადასართავად. სიგნალი არის 240 ჰერცი, რადგან სიხშირე, რომლის დროსაც ადამიანის თვალი ვერ აღიარებს სინათლის არარსებობას, არის 60 ჰერცი. ჩვენ ვიყენებთ ორ ციფრს, ამიტომ ამ სიხშირის გაორმაგებით თითოეული ციფრი იცვლება 60 ჰერცზე. შემდეგ ჩვენ ვაორმაგებთ მას 240 ჰც -ის მისაღებად, რადგან სისტემა იცვლება მხოლოდ მაშინ, როდესაც სიგნალი მაღლა იწევს და არა როდესაც ის მცირდება.

ამის მისაღწევად გამყოფი იღებს მშობლიურ 100 MHz სიგნალს და ითვლის ყოველ ამომავალ ზღვარზე. როდესაც მრიცხველი მიაღწევს 416667 -ს, გამომავალი იქნება დაბალიდან მაღალამდე, ან პირიქით.

შეყვანა

Clk (მშობლიური საათის სიგნალი)

გამომავალი

Clk_7seg (seg_display- მდე)

კომპონენტები

  • D რეგისტრაცია
  • მუქსი
  • ინვერტორი
  • ადდერი

ნაბიჯი 5: დარტყმები წუთში საათის გამყოფი

სცემს წუთში საათის გამყოფი
სცემს წუთში საათის გამყოფი

BPM საათის გამყოფი მუშაობს ანალოგიურად. ეს გამყოფი აწარმოებს საათის სიხშირეს, რომელიც განაპირობებს ოთხ საფეხურს შორის გადართვას თამაშის დროს ტონების გამოყვანისას. ჩვენ გადავწყვიტეთ გადაერთოთ ჩანაწერებს შორის 100 BPM. 100 BPM– ზე, თითოეული ნოტი ითამაშება წამის 3/5. შედეგად მიღებულ სიგნალს ექნება სიხშირე 1.67 ჰერცი.

ამ სიხშირის სიგნალის წარმოსადგენად ჩვენ კვლავ გამოვიყენეთ თვლის სისტემა, მაგრამ ამჯერად რიცხვი იყო 60 მილიონი. ყოველ ჯერზე, როდესაც მრიცხველი 60 მილიონს დაარტყამს, გამომავალი სიგნალი იცვლება მაღალი ან დაბალი.

შეყვანა

Clk (მშობლიური საათის სიხშირე)

გამომავალი

Clk_BPM (output_FSM– მდე)

კომპონენტები

  • D რეგისტრაცია
  • მუქსი
  • ინვერტორი
  • ადდერი

ნაბიჯი 6: Pitches Clock Divider

ონლაინ თამაში Pitches Clock Divider
ონლაინ თამაში Pitches Clock Divider

Pitches Clock Divider არის ყველაზე დიდი ჩვენი საათის გამყოფი. ეს გამყოფი გამოაქვს 12 განსხვავებული სიგნალი, რომელიც შეესაბამება 12 განსხვავებულ ნოტს, რომელთა დაკვრაც ჩვენ სინთეზაიერს შეუძლია. მუსიკის თეორიის ძირითადი ცოდნის გამოყენებით, ჩვენ დავასკვნათ, რომ ბიტი ან ავტობუსი შეიძლება მერყეობდეს ისეთი სიჩქარით, რაც შეესაბამება მუსიკალური ნოტების სიხშირეს. ჩვენს მიერ გამოყენებული სიხშირეების სანახავად, გადახედეთ აქ. ჩვენ გამოვიყენეთ მოედნების მეოთხე ოქტავა.

აქ გამოიყენება იგივე დათვლის სისტემა. იმ კონკრეტული მნიშვნელობებისთვის, რომლებისთვისაც ჩვენ ვითვლით, იხილეთ ფაილი წარწერით Clk_div_pitches.

შეყვანა

Clk (მშობლიური საათის სიხშირე)

გამომავალი

C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (გამომავალი_ შერჩევა)

კომპონენტები

  • D რეგისტრაცია
  • მუქსი
  • ინვერტორი
  • ადდერი

ნაბიჯი 7: თამაში/პაუზა/აირჩიეთ სახელმწიფო მანქანა

დაკვრა/პაუზა/აირჩიეთ სახელმწიფო მანქანა
დაკვრა/პაუზა/აირჩიეთ სახელმწიფო მანქანა

ჩვენს პროექტში არის ორი სასრული მდგომარეობის მანქანა (FSM). FSM არის ლოგიკური მოწყობილობა, რომელსაც შეუძლია არსებობდეს მხოლოდ ერთ მდგომარეობაში სასრულ მდგომარეობიდან. FSM– ის გამოყენებით, ციფრული წრე შეიძლება გადავიდეს ახალ მდგომარეობაში, შეყვანის კომბინაციის საფუძველზე. შეყვანის ლოგიკის გამოყენებით, FSM– ის მდგომარეობა შეიცვლება, როდესაც საათის მზარდი ზღვარია. მდგომარეობიდან და მიკროსქემის შეყვანისგან შეგიძლიათ შექმნათ გამომავალი ლოგიკა, რომელიც იძლევა გამოსავალს, რომელიც არსებობს მხოლოდ იმ შემთხვევაში, თუ FSM არის გარკვეულ მდგომარეობაში.

PPS სახელმწიფო მანქანა არის პირველი FSM ჩვენს წრეში. ამ FSM– ში არის სამი მდგომარეობა; თამაში, პაუზა და შერჩევის რეჟიმი. სხვადასხვა მდგომარეობის გადასატანად, ჩვენ გამოვიყენეთ PP და Selection ღილაკები. იხილეთ მდგომარეობის დიაგრამა ზემოთ, რომ ნახოთ როგორ ხდება გადასვლები მდგომარეობებს შორის. ჩვენ გავაკეთეთ ეს FSM გადასვლა მშობლიური 100 მეგაჰერციანი საათის მზარდ ზღვარზე, ისე რომ შეუძლებელი იქნებოდა მანქანას არ გადასულიყო ერთი ღილაკის დაჭერისას, თუნდაც ძალიან მოკლე დროში. ახლანდელი მდგომარეობა (P_state) არის ერთადერთი გამოსავალი ამ მოდულიდან.

შეყვანა

  • Clk (მშობლიური საათის სიხშირე)
  • სელ (მარცხენა ღილაკი)
  • PP (მარჯვენა ღილაკი)

გამომავალი

P_state (ამჟამინდელი მდგომარეობა, output_FSM, note_assign, seg_dsiplay, final_select)

კომპონენტები

  • მუქსი
  • D რეგისტრაცია

ნაბიჯი 8: თამაში/პაუზა/აირჩიეთ სახელმწიფო მანქანა

დაკვრა/პაუზა/აირჩიეთ სახელმწიფო მანქანა
დაკვრა/პაუზა/აირჩიეთ სახელმწიფო მანქანა

ნაბიჯი 9: გამოუშვით FSM

გამომავალი FSM
გამომავალი FSM

ეს არის მეორე FSM, რომელიც მითითებულია წინა ნაწილში. ეს FSM სხვა ფუნქციას ასრულებს, ვიდრე სხვა, მაგრამ ამის საფუძველი არსებითად ერთი და იგივეა.

გამომავალი FSM მოქმედებს მხოლოდ იმ შემთხვევაში, თუ პირველი FSM– ის ამჟამინდელი მდგომარეობა არის „01“(თამაშის მდგომარეობა). არსებითად, ეს არის მოდულის ჩართვა. თუ მდგომარეობა არის "01", მაშინ FSM აპირებს გადავიდეს მდგომარეობებს შორის BPM საათის სიგნალის ამომავალ ზღვარზე. ჩვენ ამას ვაკეთებთ იმიტომ, რომ output_FSM აკონტროლებს რომელი ორობითი რიცხვი მონიშნული მოედნისათვის იგზავნება output_select და seg_display მოდულებში. FSM– ს აქვს 16-ბიტიანი შეყვანა შენიშვნის მინიჭების მოდულიდან, რომელიც შემდგომ იქნება განხილული. "00" მდგომარეობაში output_FSM- ისთვის, მოდული გამოვა "xxxx" პირველი მინიშნებისთვის. შემდეგ "01" -ში გამოვა "yyyy" მეორე ნოტისთვის და ასე შემდეგ თითოეული ნოტისთვის, სანამ არ დაბრუნდება პირველ ნოტზე. იხილეთ სახელმწიფო დიაგრამა ზემოთ.

ეს FSM განსხვავდება პირველისგან, რადგან არ არსებობს შეყვანის ლოგიკა მდგომარეობებს შორის გადართვის გასაკონტროლებლად. ამის ნაცვლად, FSM იმუშავებს მხოლოდ მაშინ, როდესაც პირველი FSM– ის მდგომარეობიდან არის „01“, შემდეგ კი ეს FSM გადადის მდგომარეობებს შორის მხოლოდ საათის სიგნალის მზარდ ზღვარზე. კიდევ ერთი განსხვავება ისაა, რომ ამ მოდულს აქვს გამომავალი ლოგიკა, რაც იმას ნიშნავს, რომ იგი არ გამოაქვს დღევანდელ მდგომარეობას, ის გამოაქვს ორობითი რიცხვი ამ მდგომარეობის მოედანზე.

შეყვანა

  • Clk_BPM (BPM საათის სიგნალი საათის გამყოფიდან)
  • FSM1_state (PS PPS FSM– დან)
  • Pitch_in (ნიშნები_ნიშვიდან)

გამომავალი

Pitch_out (ერთი ნაბიჯი ერთდროულად, გამომავალი_სარჩევად და seg_display)

კომპონენტები

  • მუქსი
  • D რეგისტრაცია

ნაბიჯი 10: გამოუშვით FSM

გამომავალი FSM
გამომავალი FSM

ნაბიჯი 11: შენიშვნა მიანიჭეთ

შენიშვნა მიანიჭეთ
შენიშვნა მიანიჭეთ

შენიშვნის მინიჭების მოდული პასუხისმგებელია პოზიციის შენიშვნის, საფეხურის რეალურად მინიჭებაზე. ეს მოდული რეალურად საკმაოდ მარტივია. ის პირველ რიგში ამოწმებს არის თუ არა წრე "შერჩევის" მდგომარეობაში და არის თუ არა ნაბიჯის გადამრთველი (მარცხნივ მარცხნივ) მაღალი. თუ ეს სიმართლეა და დავალების ღილაკს დაჭერით, მოდულის გამომავალი ტოლია ორობითი რიცხვისა, რომელიც წარმოდგენილია სიხშირის გადამრთველებით (შორს მარჯვნივ).

თავდაპირველად, ჩვენ შევეცადეთ გაგვეკეთებინა მოდული, რომელიც რეალურად გადაარჩენდა საათის ერთ სიგნალს გამომავალში, მაგრამ ჩვენ შევეჯახეთ პრობლემებს, როდესაც გამომავალი იცვლება საათის შემავალი სიგნალების შესაბამისად. ეს არის ერთადერთი მოდული, რომელიც არაერთხელ იქნა გამოყენებული საბოლოო დიზაინში. თითოეულ საფეხურს აქვს მასთან დაკავშირებული note_assign მოდული და ამის გამო, მოდულის თითოეულ მაგალითს იღებს Step ავტობუსის ერთი ბიტი.

შეყვანა

  • P_state (ამჟამინდელი მდგომარეობა PPS FSM– დან)
  • სელ (მარცხენა ღილაკი)
  • გადამრთველი (ერთი ნაბიჯის გადამრთველი)
  • სიხშირე (უკიდურესად მარჯვენა გადამრთველი მოედანზე)
  • მინიჭება (ქვედა ღილაკი, ანიჭებს შენიშვნას)

გამომავალი

ნაბიჯი (ორობითი რიცხვი, გამომავალ_ფსმ -მდე)

კომპონენტები

  • მუქსი
  • D დარეგისტრირდით

ნაბიჯი 12: გამოყვანის არჩევა

გამოყვანის არჩევა
გამოყვანის არჩევა

გამოყვანის ამორჩევა პასუხისმგებელია ორობითი რიცხვის აღებისათვის და მისი შესაბამისი საათის სიგნალთან დაკავშირებისათვის. მიუხედავად მისი ზომისა, ეს ასევე შედარებით მარტივი მოდულია. Output_select არის არსებითად ორობითი დეკოდირება, რომელიც ასახავს ორობითი რიცხვის სიმაღლეს კონკრეტული საათის სიგნალზე. ფაქტობრივად, გამომავალი საათის სიხშირეზე უკეთ მუშაობდა note_assign მოდულთან შედარებით, რადგან ყველაფერი რაც ამ მოდულს უნდა გაეკეთებინა იყო MUX საათის სიგნალები ორობითი რიცხვით, რომელიც წარმოადგენდა საკონტროლო შეყვანას.

ჩვენ ბოდიშს გიხდით უცნაური მარშრუტისთვის, Vivado– მ მოაწყო მოედნის სიგნალები clk_div_pitches ფაილისთვის ანბანურად, მაგრამ ამ ფაილისთვის მან მოაწყო ისინი ორობითი რიცხვის ზრდით, რამაც გამოიწვია მოედნების განსხვავებული თანმიმდევრობა. ასევე გაითვალისწინეთ, რომ თუ გამომავალი_ფსმ -დან ორობითი რიცხვი იყო "0000" ან რამე მეტი, ვიდრე "1100", მაშინ MUX იგზავნება ბრტყელი '0' სიგნალით.

შეყვანა

  • სიმაღლე (გამომავალი_ფსმ -დან);
  • C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (საათის საათის სიგნალები)

გამომავალი

ტონი (ერთი ბიტი, რომელიც ემთხვევა საათის არჩეულ სიგნალს, კვადრატულ_ტალღამდე)

კომპონენტები

მუქსი

ნაბიჯი 13: კვადრატული ტალღა გენ

კვადრატული ტალღა გენ
კვადრატული ტალღა გენ

მოდული square_wave არის კვადრატული ტალღის გენერატორი, რომელიც გამოდის დაფიდან DAC– ში. წინა ფაილის ტონის სიგნალის გამოყენებით, ეს კვადრატული ტალღა გადააქცევს 4 ბიტიან რიცხვს "0000" - დან "1111" - ს შორის ტონის მზარდ ზღვარზე. ტონი არის კონკრეტული სიმაღლის სიხშირე, ამიტომ კვადრატული ტალღა წარმოქმნის ტალღას განსხვავებული სიხშირით, როდესაც გამომავალი_ფსმ გადადის სხვა მდგომარეობაში. ამ მოდულიდან 4 ბიტიანი გამომავალი მიდის fin_sel მოდულზე, სადაც ლოგიკა გვკარნახობს გამოვა თუ არა ეს ავტობუსი PPS FSM– ის მდგომარეობიდან გამომდინარე.

ამ კვადრატული ტალღის გენერატორის ალტერნატივა წარმოქმნის სინუს ტალღას. მიუხედავად იმისა, რომ ეს სავარაუდოდ უკეთეს საბოლოო ტონს გამოიღებს, მისი განხორციელება გაცილებით რთულია, ამიტომ ჩვენ შევარჩიეთ მხოლოდ კვადრატული ტალღის გენერირება.

შეყვანა

ტონი (გამომავალი_სელექტიდან რხევადი ბიტი)

გამომავალი

DAC_input (რხევადი 4-ბიტიანი ავტობუსი, რომელიც იცვლება ტონის იმავე სიხშირეზე)

კომპონენტები

  • ინვერტორი
  • D რეგისტრაცია

ნაბიჯი 14: 7 სეგმენტიანი ჩვენება

7 სეგმენტიანი ჩვენება
7 სეგმენტიანი ჩვენება

Seg_display მოდული აკონტროლებს ჩვენს ბაზის დაფაზე 7-სეგმენტიან ჩვენებას. მოდულის შიგნით ხდება ორი პროცესი. პირველი პროცესი აშიფრებს სიხშირეს "შერჩევის" მდგომარეობაში ან Pitch როდესაც "დაკვრის" რეჟიმში. "პაუზის" რეჟიმში, მოდული დეკოდირებას ახდენს პაუზის სიმბოლოს ჩვენებაზე. VHDL კოდის დათვალიერებისას თქვენ ხედავთ, რომ ორობითი დეკოდირება ფაქტიურად აშიფრებს შეყვანას ორ სხვადასხვა სიგნალში, კათოდ 1 და კათოდ 2. კათოდი 1 წარმოადგენს ასოს შესაბამის სიმაღლეზე, ხოლო კათოდი 2 წარმოადგენს ბრტყელ სიმბოლოს (ბ), თუ არსებობს. ამის მიზეზი უკავშირდება seg_display მოდულის მიერ განხორციელებულ მეორე პროცესს.

Basys3 დაფაზე, სეგმენტის ჩვენებას აქვს საერთო კათოდები. მიუხედავად იმისა, რომ ანოდები აკონტროლებენ რომელი ციფრია ჩართული, კათოდები აკონტროლებენ რომელი სეგმენტებია ჩართული. ვინაიდან ეკრანს აქვს საერთო კათოდები, ეს ნიშნავს, რომ თქვენ შეგიძლიათ აჩვენოთ მხოლოდ ერთი სეგმენტი ერთდროულად. ეს პრობლემას უქმნის ამ პროექტს, რადგან ჩვენ გვსურს გამოვაჩინოთ ასო პირველ ციფრზე და ბრტყელი სიმბოლო, საჭიროების შემთხვევაში, ერთდროულად. ახლა გახსოვთ 7 -ნიშნიანი საათის სიგნალი? ამ საკითხის გადასაჭრელად, ჩვენ ვცვლით ანოდებს და კათოდებს წინ და უკან 7 -ნიშნიანი საათის სიგნალზე. იმის გამო, რომ საათის სიგნალი არის 240 ჰერცი და ჩვენ ვიყენებთ ორ ციფრს, თითოეული ციფრი იცვლება 60 ჰერცზე. ადამიანის თვალით ის გამოიყურება, რომ ციფრები საერთოდ არ ცვალებადია.

ასევე გაითვალისწინეთ, რომ basys3 დაფის ჩვენება იყენებს უარყოფით ლოგიკას. ეს ნიშნავს, რომ თუ ანოდი ან კათოდი დაყენებულია "0" -ზე, ეს ციფრი ან სეგმენტი ჩართული იქნება და პირიქით.

შეყვანა

  • მოედანზე (ორობითი ნომერი შენიშვნისთვის, გამოიყენება სათამაშო მდგომარეობაში)
  • სიხშირე (სიხშირის გადამრთველები, გამოიყენება შერჩევის მდგომარეობაში)
  • P_state (ამჟამინდელი მდგომარეობა PPS FSM– დან)
  • Clk_240Hz (საათის სიგნალი Clk_div_7seg– დან, ორმაგი 120, რადგან ჩვენ ვიყენებთ მხოლოდ მზარდ ზღვარს)

გამომავალი

  • კათოდი (ავტობუსი, რომელიც აკონტროლებს სეგმენტებს ეკრანზე, საბოლოო გამომავალი)
  • ანოდი (ავტობუსი, რომელიც აკონტროლებს ციფრებს ეკრანზე, საბოლოო გამომავალი)

კომპონენტები

  • ლატჩი
  • მუქსი
  • D რეგისტრაცია

ნაბიჯი 15: საბოლოო შერჩევა

საბოლოო შერჩევა
საბოლოო შერჩევა

საბოლოო შერჩევა არის ბოლო მოდული, რომელიც გამოიყენება ამ პროექტში. კიდევ ერთი მარტივი მოდული, ეს მოდული აკონტროლებს საბოლოო გამომუშავებას, რომელიც მიდის DAC– ში. როდესაც "შერჩევის" ან "პაუზის" მდგომარეობაშია, მოდული აპირებს გამოუშვას სტატიკური "0000" ისე, რომ მუსიკა არ დაკვრა დინამიკებიდან. "თამაშის" მდგომარეობაში, მოდული გამოუშვებს რხევად 4 ბიტს, როგორც ეს განსაზღვრულია კვადრატული ტალღით.

შეყვანა

  • P_state (ამჟამინდელი მდგომარეობა PPS FSM– დან)
  • DAC_input (რხევადი 4 ბიტიანი კვადრატული ტალღიდან)

გამომავალი

DAC (ტოლია DAC_ შეყვანის პიესის მდგომარეობაში, საბოლოო გამომავალი)

კომპონენტები

მუქსი

ნაბიჯი 16: გარე მოწყობილობები: DAC

გარე მოწყობილობები: DAC
გარე მოწყობილობები: DAC

ციფრული ანალოგური გადამყვანი (DAC) იღებს დისკრეტულ სიგნალს და გარდაქმნის მას უწყვეტ სიგნალად. ჩვენს DAC- ს აქვს ოთხი ბიტი და დამზადებულია შემაჯამებელი გამაძლიერებლისგან. მიწოდების და უკუკავშირის მარყუჟში რეზისტორების თანაფარდობის გამოყენებით, ჩვენ შევძელით სისტემის შექმნა, რომელიც გამოდის 16 სხვადასხვა დონეზე, თითოეული ფილიალის "შეჯამებით". Bit0, ზედა ფილიალი, ატარებს ყველაზე მცირე წონას და ხელს უწყობს ყველაზე მცირე პოტენციალს, როდესაც მაღალია, რადგან ამ ტოტებს უფრო მაღალი წინააღმდეგობა აქვთ. წონა იზრდება ფილიალების ქვემოთ. თუ თქვენ დაითვლით ორობითი აღნიშვნით და შემდეგ უკან დაიხევთ ბიტიანი შეყვანის გამოყენებით, გამომავალი ძაბვები ჰგავს საფეხურებრივ სინუს ტალღას. შეყვანის DAC იყო დაკავშირებული ერთ PMODs ფორუმში გადასცეს 4 ბიტიანი სიგნალი.

DAC თავდაპირველად შეკრებილი იყო ელექტროინჟინერიის კლასისთვის და შემუშავებულია და შეკერილია ჩვენ მიერ, არ არის ნაყიდი მაღაზიიდან. ზემოთ არის დიზაინის ფაილის სურათი ბეჭდური მიკროსქემის დაფის შესაქმნელად.

ნაბიჯი 17: გარე მოწყობილობები: სპიკერი

გარე მოწყობილობები: სპიკერი
გარე მოწყობილობები: სპიკერი

ამ პროექტისთვის თქვენ არ გსურთ შეიძინოთ სუპერ ლამაზი დინამიკები. როგორც ხედავთ, ხმა საკმაოდ ფუნდამენტურია. ჩვენ წავედით და ვიყიდეთ 8 დოლარიანი კომპიუტერის დინამიკები Best Buy– დან. ყურსასმენის ჯეკით ყველაფერი კარგად მუშაობს. მონოტონურიც კარგად მუშაობს. ყურსასმენების გამოყენებაც კი შეგიძლიათ, მაგრამ შესაძლოა მათი აფეთქება!

DAC– ის გამოსასვლელთან დინამიკებთან დასაკავშირებლად ჩვენ გამოვიყენეთ ჯუმბერის კაბელები, შემდეგ კი გამომავალი კაბელი მივადექით ყურსასმენის ჯეკის წვერს და კაბელი მიწასთან ბაზაზე. ჩვენ შევეცადეთ ელექტრული ლენტი გამოვიყენოთ კაბელების ადგილზე, მაგრამ ამან ბევრი ჩარევა გამოიწვია. სხვადასხვა სტილის ფირის ცდა შეიძლება ამ საკითხის მოგვარებას.

ჩვენი დინამიკებისათვის ჩვენ გადავაბრუნეთ ისინი უმაღლეს პარამეტრზე და მივიღეთ ღირსეული ხმამაღალი ხმაური.

და ეს არის ბოლო ნაბიჯი ციფრული მიმდევრობის შესაქმნელად FPGA დაფისგან! გადადით მომდევნო ორ განყოფილებაში, რომ გადმოწეროთ ჩვენი VHDL კოდი და ნახოთ მიმდევარი მოქმედებაში.

ნაბიჯი 18: ვიდეო დემო

ეს ვიდეო გვიჩვენებს სამუშაო პროექტის საბოლოო ვერსიას, მათ შორის გადამრთველების მინიჭების პროცესს 4 განსხვავებულ მოედანზე და მომხსენებლებს, რომლებიც უკრავენ შესაბამის ნოტებს.

ნაბიჯი 19: VHDL კოდი

აქ მოცემულია მთელი პროექტის კოდი, მათ შორის შეზღუდვისა და სიმ ფაილების გამოყენება, რომლებიც გამოიყენება სეკვენსერის შექმნისას. გაითვალისწინეთ, რომ გამოუყენებელი დიზაინის ფაილები ასე ამბობენ არქიტექტურაში.

გირჩევთ: