BÀI BÁO CÁO SỐ 3 THIẾT KẾ MẠCH TUẦN TỰ ĐỒNG BỘ1... Thiết kế mạch đếm lên 8 bit, lựa chọn 8 tần số đếm khác nhau, lựa chọn đếm lên hoặc đếm xuống, có tính hiệu cho phép dừng đếm Pause,có
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA ĐIỆN- ĐIỆN TỬ
-BÁO CÁO THỰC TẬP MÔN: THỰC TẬP THIẾT KẾ HỆ THỐNG
VÀ VI MẠCH TÍCH HỢP
GVHD: Th.S Lê Minh Thành
Họ và tên: Ngô Minh Nhật MSSV: 20161346 Lớp: Thứ 7 - tiết 1 – 5
THÀNH PHỐ HỒ CHÍ MINH – Tháng 11 năm 2022
Trang 2BÀI BÁO CÁO SỐ 3 THIẾT KẾ MẠCH TUẦN TỰ ĐỒNG BỘ
1 Thiết kế mạch đếm lên 8 bit, lựa chọn tần số đếm, lựa chọn đếm lên hoặc đếm xuống
Sơ đồ khối:
Hình 1.1: Sơ đồ khối của mạch đếm lên 8 bit , lựa chọn tần số đếm, lựa chọn đếm lên
hoặc đếm xuống
CK_50M: ngõ vào xung đồng hồ tần số 50MHz
CLR: ngõ vào clear khi tác động mức cao
S0, S1: ngõ vào điều khiển lựa chọn tần số đếm
U_D: lựa chọn đếm lên hoặc đếm xuống
q<0> → q<7> : các bit ở ngõ ra
Sơ đồ RTL:
Trang 3Hình 1.2: Sơ đồ RTL của mạch đếm lên 8 bit , lựa chọn tần số đếm, lựa chọn đếm lên
Trang 4assign r_next01H = (r_reg01H==M)?0:r_reg01H + 1;
assign r_next1H = (r_reg1H==M/10)?0:r_reg1H + 1;
assign r_next10H = (r_reg10H==M/100)?0:r_reg10H + 1;assign r_next100H =(r_reg100H==M/1000)?0:r_reg100H+1;// output logic
Trang 5module CounterUD
#(parameter N= 8) // 500,000,000 for 0.1Hz(input wire clk,reset,ud,
// next state logic
assign r_next = (ud==1)?r_reg + 1:r_reg - 1;// output logic
Trang 6Mux41 mux4to1 (f,SW,clk_o);
CounterUD counter (clk_o, reset,UD,Q);endmodule
.UD(UD),.Q(Q));
initial begin
clk = 0;
reset = 0;
Trang 82 Thiết kế mạch đếm lên 8 bit, lựa chọn 8 tần số đếm khác nhau, lựa chọn đếm lên hoặc đếm xuống, có tính hiệu cho phép dừng đếm (Pause),
có tín hiệu đảo trạng thái ngõ ra
reset: ngõ vào khởi động lại
Toggle: ngõ vào đảo trạng thái ngõ ra
UD: ngõ vào lựa chọn đếm lên hoặc đếm xuống
Q(7:0): các bit ngõ ra
Sơ đồ RTL:
Trang 9Hình 2.2: Sơ đồ RTL của mạch đếm lên 8 bit , lựa chọn 8 tần số đếm khác nhau, lựa chọn đếm lên hoặc đếm xuống, có tính hiệu cho phép dừng đếm (Pause), có tín hiệu đảo trạng
reg[N-1:0]
r_reg01Hz,r_reg1Hz,r_reg10Hz,r_reg100Hz,r_reg1000Hz,r_reg10000Hz,r_reg100000Hz,r_reg1000000Hz;
initial r_reg01Hz =0;
initial r_reg1Hz =0;
initial r_reg10Hz =0;
Trang 10r_next1000Hz=(r_reg1000Hz==M/10000)?0:r_reg1000Hz + 1;assign r_next10000Hz = (r_reg10000Hz==M/100000)?0 :r_reg10000Hz + 1;
Trang 11assign r_next100000Hz = (r_reg100000Hz==M/1000000)?0 :r_reg100000Hz + 1;
Trang 12// next state logic
assign r_next = (ud==1)? r_reg + 1 : r_reg - 1;// output logic
assign q=(toggle==0)?r_reg:~r_reg;
endmodule
Trang 13CounterUDToggle M3 (clk_o, reset, UD, Toggle, Q);
and(clk1, clk, ~clk_gate);
endmodule
Trang 14.UD(UD),.Pause(Pause),.Toggle(Toggle),.Q(Q)
Trang 15#10000000;Pause=0;
#140000000;Pause=1;
#10000000;Pause=0;end
always
begin
#10;
clk=~clk;end
endmodule
Trang 16Hình 2.3: Các trường hợp mô phỏng
Nhận xét: Mạch đếm lên 8 bit có giới hạn đếm từ 0 đến 255 Do S = 2 nênmạch đếm với tần số là 10Hz Ban đầu UD = 0 nên mạch đang ở chế độ đếmxuống, sau 200ms thì UD = 1 nên mạch chuyển sang chế độ đếm lên Banđầu Pause = 0 nên mạch đếm bình thường, sau 350ms có tín hiệu Pause tácđộng nên mạch ngừng đếm, sau 150ms tiếp theo lại có tín hiệu Pause tácđộng nên mạch đếm tiếp tục hoạt động
3 Thiết kế mạch đếm lên 8 bit hiển thị ra 8 Led đơn L0 đến L7, xung Clock 100Hz được chia từ xung Clock nội 50MHz, Switch gạt SW3 dùng
để Reset bộ đếm tích cực mức 0, các SW0 đến SW2 được dùng để cài đặt
số chu kì đếm đủ của bộ đếm
Sơ đồ khối:
Trang 17Hình 3.1: Sơ đồ khối của mạch đếm lên 8 bit hiển thị ra 8 Led đơn L0 đến L7, xung Clock 100Hz được chia từ xung Clock nội 50MHz, Switch gạt SW3 dùng để Reset bộ đếm tích cực mức 0, các SW0 đến SW2 được dùng để cài đặt số chu kì đếm đủ của bộ đếm
SW(2:0): ngõ vào lựa chọn chu kì đếm
Trang 18Chương trình mô tả phần cứng bằng ngôn ngữ Verilog:
reg [N-1:0] r_reg, r_reg100h;
wire [N-1:0] r_next, r_next100h;
always @(posedge clk, posedge reset)
begin
if (reset)begin
r_reg<=0 ;r_reg100h<=0 ;end
elsebeginr_reg<=r_next ;r_reg100h<=r_next100h ;end
end
assign r_next = (r_reg==256*(M+1)/100)?0:r_reg + 1;assign r_next100h = (r_reg100h==M/100)?0:r_reg100h + 1;assign clk256f =(r_reg<256*M/100)?0:1;
Trang 19assign clk100hz =(r_reg100h<M/200)?0:1;endmodule