Viết chương trình mô tả máy bán hàng tự động sẽ thả kẹo sau khi nhận được 15 xu.. Viết chương trình mô tả mạch đếm tần số và hiển thị kết quả trên LED 7 đoạn 4.. Bài 2 Viết chương trình
Trang 1� HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BÁO CÁO BÀI TẬP LỚN
Thiết kế logic số
Giảng viên: Trần Thu Hà
Nhóm lớp : 02 Nhóm bài tập :19 Sinh viên: Trần Long Thành: B18DCDT236 Nguyễn Kính Đảm: B18DCDT039 Trịnh Đức Tiệp: B18DCDT215
Trang 2
Mục lục
Trang 3Thiết kế logic số
Đề bài nhóm 19
1 Viết chương trình mô tả mạch tạo mã chẵn/lẻ 7 bit
2 Viết chương trình mô tả máy bán hàng tự động sẽ thả kẹo sau khi nhận được 15 xu Máy có một khe nhận tiền xu gồm đồng 5 xu và 10 xu, mỗi lần nhận một xu Nếu đưa vào nhiều hơn 15 xu, máy sẽ trả lại tiền thừa Sau khi sản phẩm được đưa ra, máy sẽ trở lại trạng thái đợi ban đầu Hãy thiết kế mạch tuần tự đồng bộ dùng trigơ JK để mô phỏng mạch điều khiển của máy bán hàng tự động
3 Viết chương trình mô tả mạch đếm tần số và hiển thị kết quả trên LED 7 đoạn
4 Viết chương trình mô tả bộ hợp kênh 16:1 từ bộ hợp kênh 4:1
Bài 1 Viết chương trình mô tả mạch tạo mã chẵn/lẻ 7 bit.
I Tổng quan nguyên lý hoạt động
Nguyên lý đơn giản như sau:
- Mã chẵn là số bit ‘1’ trong từ mã là chẵn , và mã lẻ là ngược lại
- Với 7 bit ta làm tương tự
II Mã chương trình và giải thích
Hàm main
Phỏng theo nguyên tắc hoạt động của bảng trên ta dễ dàng xây dựng được chương trình bằng các cú pháp điều kiện đơn giản : if else
Ta khai báo Port như sau:
- inp: in std_logic_vector(0 to 6); // từ mã đưa vào – 7 bit hiểu diễn
- chan: out std_logic_vector(0 to 7); // từ mã đầu ra – 8 bit biểu diễn : 7 bit
cho đầu vào và 1 bit thêm vào để tạo mã chẵn
- le: out std_logic_vector(0 to 7)); //// từ mã đầu ra – 8 bit biểu diễn : 7 bit
cho đầu vào và 1 bit thêm vào để tạo mã lẻ
Trang 4-Testbench
Trang 5Thiết kế logic số
Trang 6III Chạy mô phỏng và sơ đồ RTL
- Như ta thấy ban đầu tín hiệu vào inp = 0000000 đang chẵn số ‘1’ vậy để tạo mã chẵn ta cần thêm bit ‘0’ vào cuối từ mã , để tạo từ mã lẻ ta cần thêm bit ‘1’ vào cuối từ mã
- Tiếp tục, khi inp =0000001 đang lẻ bit ‘1’ , vậy để tao mã chẵn ta thêm bit
‘1’ và mã lẻ ta thêm bit ‘0’
Bài 2 Viết chương trình mô tả máy bán hàng tự động sẽ thả kẹo sau khi nhận được 15 xu Máy có một khe nhận tiền xu gồm đồng 5 xu và 10 xu, mỗi lần nhận một xu Nếu đưa vào nhiều hơn 15 xu, máy sẽ trả lại tiền thừa Sau khi sản phẩm được đưa ra, máy sẽ trở lại trạng thái đợi ban đầu Hãy thiết kế mạch tuần tự đồng bộ dùng trigơ JK để mô phỏng mạch điều khiển của máy bán hàng tự động.
I Tổng quan nguyên lý hoạt động
Việc thực hiện chương trình bằng mạch tuần tự như yêu cầu bọn em làm đúng
về ý tưởng , cô cũng đã xem và không phát hiện ra lỗi nhưng chương trình không chạy Vậy nên bọn em đã làm thay thế bằng phương pháp máy trạng thái FSM
Trang 7Thiết kế logic số
Nguyên lý hoạt động được mô tả đơn giản như hình vẽ : 5 xu – ‘0’ , 10 xu – ‘1’, khi nhận đủ 15 xu máy sẽ nhả kẹo , nếu hơn 15 xu máy nhả kẹo kèm tiền thừa
II Mã chương trình và giải thích
Hàm main
Trang 8Ta khai báo Port như sau:
- Clk : in std_logic ; // tín hiệu kích thích
- Reset : in std_logic ; // tín hiệu dùng để quay lại trạng thái ban đầu, trong thực tế đây là chức năng khá cần thiết , ví dụ ta đút 5 xu vào máy nhưng không muốn mua sản phẩm , máy sẽ trả lại lại tiền và quay lại vị trí ban đầu
Coin_in : in std_logic; //là tín hiệu khi đưa xu vào máy:‘0’ là 5 xu ,‘1’ -10xu
- Drop_: out_std_logic ; //tín hiệu nhả kẹo
- Coin_out :in std_logic ; //tín hiệu nhả tiền thừa
Trang 9Thiết kế logic số
Ta tạo ra 2 process :
- Process (sreg , coin_In , flag) : có tác dụng chuyển trạng thái khi đưa xu
vào : ví dụ S1 nhận coin_In =1 sẽ chuyển đến S3
- Process (sreg) : có tác dụng đưa ra giá trị đầu ra : nhả kẹo và nhả tiền: ví
dụ khi ở S3 sẽ thực hiện nhả kẹo nhưng không nhả tiền , S4 sẽ nhả kẹo và nhả tiền thừa , còn lại các trạng thái S0 , S1 , S2 sẽ không nhả kẹo cũng không nhả kẹo
Trang 10Testbench
Trang 11Thiết kế logic số
III Chạy mô phỏng và sơ đồ RTL
- Khi đủ 15 xu sẽ nhả kẹo nhưng không nhả tiền thừa , đồng thời xung nhịp clock tiếp theo sẽ quay về S0 để thực hiện đút tiền vào máy để thực hiện chu kỳ mới
- Khi hơn 15 xu sẽ nhả kẹo và tiền thừa , và xung nhịp clock tiếp theo sẽ quay về S0 để thực hiện chu kỳ mới
Bài 3 Viết chương trình mô tả mạch đếm tần số và hiển thị kết quả trên LED
7 đoạn
I Tổng quan nguyên lý hoạt động
Nguyên lý hoạt động : ta sẽ tạo ra 1 xung tham chiếu là 1s , trong 1s đó , ta thực hiện xây dựng bài toán để đếm số chu kỳ của xung clock truyền vào , kết quả đọc được chính là tần số của xung Clock sẽ hiện thị ra Led 7 đoạn
II Mã chương trình và giải thích
Việc xây dưng chương trình khá đơn giản khi chỉ cần các cú pháp điều kiện đơn giản : if else
Thực hiện khai báo Port như sau:
- CLK : in STD_LOGIC; //tín hiệu kích thích đếm
Trang 12- ref : in STD_LOGIC; // tín hiệu tham chiếu , ta để 1s để thực hiện đếm xung clock
- qs: in std_logic; // tín hiệu giữ để quan sát việc hiển thị ra led, ví dụ khi đã thực hiện đếm xung clock trong 1s , ta sẽ giữ giá trị đếm được trong 1 khoảng thời gian nhỏ để hiện thị ra Led 7 đoạn , chủ yếu để Led hiển thị đúng không bị nhấp nháy
- Led_chuc, Led_dvi : out STD_LOGIC_VECTOR(6 downto 0) ;// hiển thi giá trị đo được
Hàm main
- Khi xung tham chiều ref =’0’ và qs =’1’ , ta sẽ giữ giá trị đo được để hiển thị ra Led
- Nều vẫn trong khoảng tham chiếu ref= ‘1’ , chương trình vẫn thực hiện
Trang 13Thiết kế logic số
- Nhược điểm :
+ Do ta dùng 2 Led để hiện thị giá trị tần số đo được nên giá trị tối đa hiển thị được là 99
+ Ta dùng xung tham chiếu là 1s để đếm xung Clock nên tần số tối thiểu
đo được là 1Hz
- 2 process hiển thị tần số đo được ra Led 7 đoạn
Testbench
Trang 14- Ta để chu kỳ của xung tham chiếu ref = 2s , 1s nửa chu kỳ lên dùng để đếm xung clock
- Xung qs dùng để quan sát giá trị đo được ra led , ta để chu kỳ lên 1900ms
để hiển thị ra led không bị nhấp nháy
Trang 15Thiết kế logic số
III Chạy mô phỏng và sơ đồ RTL
- Khi ref = 1 , chương trình thực hiện đếm xung clock
- Xung qs giữ lại giá trị đo được để hiển thi ra led.
Bài 4 Viết chương trình mô tả bộ hợp kênh 16:1 (Enable hoạt động ở mức thấp)
I Tổng quan nguyên lý hoạt động
Nguyên lý hoạt động : đầu ra của bộ Mux được lấy từ giá trị đầu vào bởi sự quyết định bởi tín hiệu từ chân địa chỉ Quan sát mô phỏng hoạt động của bộ Mux 4:1 để hiều về nguyên lý hoạt động để từ đó xây dựng bộ Mux 16:1
Trang 16Để xây dựng bộ Mux 16:1 , ta có 2 cách
- Dùng trực tiếp bộ Mux 16:1
- Dùng từ các bộ Mux nhỏ hơn ( 8:1 , 4:1 , 2:1)
II Mã chương trình và giải thích
1 Dùng trực tiếp Mux 16:1
Hàm main
Trang 17Thiết kế logic số
- Cách này tuy đơn giản nhưng ít được sử dụng nên chỉ đưa ra để làm đa dạng cho cách giải quyết bài toán
2 Ghép từ Mux 4:1
Hàm main
Ý tưởng ở đâu là tạo ra chương trình Mux 4:1 cơ bản để dựa vào đó để xây dựng Mux 16:1 bằng Port Map
- Cách xây dựng Mux 4:1 khá đơn giản , trước tiên khai báo Port;
+ d: in std_logic_vector(3 downto 0); // giá trị đầu vào : 4 đầu vào
Trang 18+ sel: in std_logic_vector(1 downto 0); // chân địa chỉ dùng chọn giá trị cho đầu ra
+ s: out std_logic ; // xuất giá trị ra
- Xây dựng Mux 16:1 từ Mux 4:1 bằng Port Map , hiểu đơn giản là ánh xạ
từ Mux 4:1 Tạo 4 Mux 4:1 ta có 4 đầu ra , từ 4 đầu ra này ta đưa vào 4 đầu vào của bộ Mux 4:1 thứ 5 để được bộ Mux 16:1
Trang 19Thiết kế logic số
Trang 20III Chạy mô phỏng và sơ đồ RTL
- Khi chân địa chỉ sel2=00 và sel1=00 , đầu ra sẽ lấy giá trị của chân đầu vào thứ 1 của cin1 =0000 , tức là theo thứ tự sẽ là chân đầu vào thứ 1 của
bộ Mux 16:1
- Khi chân địa chỉ sel2=01 và sel1=01 đầu ra sẽ bằng giá trị chân thứ 6 của
bộ Mux 16:1 ( cin2(3,0)= 0010)