Giáo trình Vi mạch số lập trình - Nghề: Điện tử công nghiệp (Trình độ cao đẳng)

Tóm tắt Giáo trình Vi mạch số lập trình - Nghề: Điện tử công nghiệp (Trình độ cao đẳng): ...cấp cho người học những kiến thức về cách cài đặt và sử dụng chương trình ISE để sử dụng vào việc thiết kế và mô phỏng các kết quả thiết kế của mình. Cung cấp cho người học cách cài đặt và sử dụng phần mềm modelsim để mô phỏng các kết quả thiết kế của mình. Mục tiêu: Trình bày cách sử dụng công cụ...ử ngôn ngữ Verilog Năm 1981 công ty phần mềm CAE tuyên bố phần mềm tự động thiết của Gateway được khám phá bởi Prabhu Goel, một trong những nhân viên đầu tiên của Gateway là Phil Moorby, tác giả đầu tiên của ngôn ngữ mô tả phần cứng GenRad (GHDL) và trình mô phỏng HILO. Năm 1983 Gateway phát hành...nào phù hợp thì câu lệnh hay khối lệnh tương ứng sẽ được thực thi. Nếu không có alternative nào thích hợp thì lệnh default_statement được thực hiện, đó là tùy chọn không bắt buộc, không đặt nhiều lệnh mặc định này vào một câu lệnh case. Lệnh case có thể được lồng vào nhau. Ví dụ: reg [1:0] alu_con...

doc262 trang | Chia sẻ: havih72 | Lượt xem: 203 | Lượt tải: 0download
Nội dung tài liệu Giáo trình Vi mạch số lập trình - Nghề: Điện tử công nghiệp (Trình độ cao đẳng), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
n3 = 12'h0; 
 n4 = 12'h0; n5 = 12'h0; n6 = 12'h0; n7 = 12'h0; 
#20;
 n0 = 12'h123; n1 = 12'h123; n2 = 12'h123; n3 = 12'h123; 
 n4 = 12'h123; n5 = 12'h123; n6 = 12'h123; n7 = 12'h123; 
#20;
 n0 = 12'h8f9; n1 = 12'h8f9; n2 = 12'h8f9; n3 = 12'h8f9; 
 n4 = 12'h8f9; n5 = 12'h8f9; n6 = 12'h8f9; n7 = 12'h8f9; 
#200; 
end 
 //--------------- tao xung clock có T = 20 ----------------
always 
 #10 clk <= ~clk;
endmodule
Kết quả mô phỏng:
Hình 7.12 – Kết quả mô phỏng bộ cộng 8 dữ liệu 12 bit
Giao tiếp với led ma trận:
Chương trình thực thi quét led ma trận gồm 8 bit để điều khiển quét hàng và 8 bit điều khiển quét cột led ma trận 8x8.
Hình 7.13 – Sơ đồ khối chương trình giao tiếp led ma trận
Chương trình chính:
module quet_16_led (clk,quet);
output [15:0] quet;
input clk;
reg [15:0] quet;
reg clk1;
reg [2:0] ctr;
integer M;
//----------------tao xung quet--------------------
always @ (posedge clk)
begin
	if(M<250000) begin 
	clk1=clk1;
	M=M+1;
	end
	else begin
	clk1=~clk1;
	M=0;
	end
end
//--------------chuong trinh quet led--------------
always @ (posedge clk1)
begin
	case (ctr)
	'd0: 	begin
	quet=16'h0001;
	ctr=1;
	end
	'd1: 	begin
	quet =(quet <<1'b1);
	if(quet==16'h8000) ctr=2;
	else ctr=ctr;
	end
	'd2:	 begin
	quet=quet >> 1'b1;
	if(quet==16'h0000) begin
	ctr=3;
	quet=16'h0001;
	end
	else ctr=ctr;
	end
	'd3:	 begin
	quet = (quet<<1'b1) +1;
	if(quet==16'hffff) begin
	ctr=4;
	quet=16'h0180;
	end
	else ctr=ctr;
	end
	'd4: 	begin
	quet[15:8]= (quet [15:8]<<1'b1);
	quet[7:0] = quet[7:0]>>1'b1;
	if(quet==16'h8001) ctr=5;
	else ctr=ctr;
	end
	'd5: 	begin
	quet[15:8] = quet [15:8]>>1'b1;
	quet [7:0] = quet [7:0]<<1'b1;
	if(quet==16'h0180) ctr=6;
	else ctr=ctr;
	end
	'd6: 	begin
	quet[15:8] = (quet [15:8]<<1'b1)+1;
	quet [7:0] = (quet [7:0]>>1'b1)+ 128;
	if(quet==16'hffff) ctr=7;
	else ctr=ctr;
	end
	'd7: 	begin
	quet [15:8] = quet[15:8]>>1'b1;
	quet [7:0] = quet[7:0]<< 1'b1;
	if(quet==0) ctr=0;
	else ctr= ctr;
	end
endcase
end
endmodule
Điều chế độ rộng xung và chia tần:
Chia tần số:
Chương trình chính:
Thực hiện chia một tần số ngõ vào, thành một tần số ngõ ra với số chia là bất kỳ có tầm giá trị từ 1 đến 1023. Sơ đồ khối của khối chia tần số như hình 7.14.
Hình 7.14 – Sơ đồ khối khối chia tần số
Trong đó:
Số chia: là giá trị cần chia
Clk: tần số ngõ vào
Res: xung reset
Clk_out: tần số ngõ ra
Tên của module chính là chia_xung:
Chương trình chính:
module chia_xung (clk, res, clk_out, so_chia);
//----------- cac ngo vao ----------
input clk;
input res;
input [9:0] so_chia;
//---------- cac ngo ra ------------
output clk_out;
reg clk_out;
//------- bien trung gian ----------
reg [9:0] N;
//-------- main program ------------
always @ (posedge clk or negedge clk )
begin
	if (!res) begin
	clk_out = 0;
	N = 0;
	end
	else if (so_chia == 0) begin
	clk_out = 0;
	N = 0;
	end
	else begin
	if(N == so_chia - 1) begin
	N = 0;
	clk_out = !clk_out;
	end
	else N = N + 1;
	end
end
endmodule
Chương trình testbench
module test_chia_xung;
//--------- Inputs-----------
reg clk;
reg res;
reg [9:0] so_chia;
//------- Outputs----------
wire clk_out;
//------- Instantiate the Unit Under Test (UUT)----------
	chia_xung uut (
	.clk(clk), 
	.res(res), 
	.clk_out(clk_out), 
	.so_chia(so_chia));
initial begin
// -------- Initialize Inputs ---------
	clk = 0;
	res = 0;
	so_chia = 0;
// ------Wait 100 ns for global reset to finish------
	#100;
	res =1; 	//------------cho reset len 1-------- 
	#100;	 //--------- delay sau 100 -----------
	so_chia = 2;	 //-------- nhap chia xung la 2-------
	#200; 	//--------- delay sau 200 -----------
	so_chia = 5;	 //------ nhap chia xung la 5 --------
	end
//-------tao xung clock he thong -------
always 
#10 clk = !clk; 
endmodule
Kết quả mô phỏng
Hình 7.15 –Kết quả mô phỏng bộ chia tần số
Nhìn vào kết quả mô phỏng ta thấy: khi nhập giá trị của số chia bằng 2 thì xung ngõ ra được chia 2, khi nhập giá trị của số chia là 5 thì xung ngõ ra được chia 5.
Điều chế độ rộng xung:
Chương trình chính
Viết chương trình thực hiện bộ điều chế độ rộng xung PWM như hình 7.16.
Hình 7.16 – Bộ điều chế độ rộng xung
Trong đó:
Duty: độ rộng xung ngõ ra có giá trị chọn từ 0 đến 100%, mỗi bước là 1%
Clk: xung clock ngõ vào
Res: xung reset hệ thống
Clk_out1: xung clock ngõ ra thứ nhất đã được điều chế độ rộng xung, có tần số bằng 1/100 tần số ngõ vào clk.
Clk_out2: xung clock ngõ ra thứ 2 đã được điều chế độ rộng xung, có tần số bằng 1/400 tần số ngõ vào clk.
N, M: là các biến trung gian. Ta cho xuất ra ngoài để quan sát các thông số của bộ PWM.
Tên của module là:PWM
Chương trình chính:
module PWM (res, clk, duty, clk_out1, clk_out2, N,M);
//------ cac ngo vao ---------------------------------------------
input res;	//----- tin hieu reset -------------------------
input clk;	//----- xung clock ---------------------------
input [6:0] duty;	//-------- do hong xung ---------------------
//------ cac ngo ra ----------------------------------------------
output clk_out1;	//----- xung ngo ra thu 1 -------------------
output clk_out2;	//----- xung ngo ra thu 2 -------------------
//------- tin hieu dung de quan sat duty khi mo phong ------
output [6:0] N;	//---- N dung de quan sat clk_out1 -------
output [8:0] M;	//---- M dung de quan sat clk_out2 -------
reg clk_out1;
reg clk_out2;
//------ -------bien trung gian -------------------
reg [6:0] N;
reg [8:0] M;
//---------- main program -------------------------
always @ (posedge clk)
begin
	//---------- xu ly reset -----------------------
	if(!res) begin
	clk_out1 = 0;
	clk_out2 = 0;
	N = 1;
	M = 1;
	end
	//--------- chuong trinh xu ly chinh -----------
	else begin
	//----------- xu ly ngo ra clk_out1 ---------
	if (N <= duty) begin
	N = N + 1;
	clk_out1 = 1;
	end
	else begin
	if(N == 100) begin
	N = 1;
	clk_out1 = 0;
	end
	else begin	
	N = N + 1;
	clk_out1 = 0;
	end
	end
	//----------- xu ly ngo ra clk_out2 ---------
	if (M <= 4*duty) begin
	M = M + 1;
	clk_out2 = 1;
	end
	else begin
	if(M == 400) begin
	M = 1;
	clk_out2 = 0;
	end
	else begin	
	M = M + 1;
	clk_out2 = 0;
	end
	end
	end
end
endmodule
Chương trình testbench
module test_PWM;
// ---------Inputs------------
reg res;
reg clk;
reg [6:0] duty;
//-------- Outputs----------
wire clk_out1; wire clk_out2; wire [6:0] N; wire [8:0] M;
//--------- Instantiate the Unit Under Test (UUT)----------
PWM uut 	(
	.res(res), 
	.clk(clk), 
	.duty(duty), 
	.clk_out1(clk_out1), 
	.clk_out2(clk_out2), 
	.N(N), 
	.M(M));
	initial begin
	//--------- Initialize Inputs------------
	res = 0;
	clk = 0;
	duty = 0;
	// ------Wait 100 ns for global reset to finish---------
	#100;
	res=1;
	#100 duty=1; //- -- nhap duty = 1% ------
	#20000;
	duty = 5;	//--- nhap duty = 5%-------
	end
//-----------tao xung clock vao -------------
always 
#5 clk =!clk;	 
endmodule
Kết quả mô phỏng:
Hình 7.17 – Kết quả mô phỏng bộ điều chế độ rộng xung PWM khi duty = 1%
Nhìn vào kết quả mô phỏng ta thấy, với duty = 1%, thì ở ngõ ra clk_out1 có thời gian ở mức logic “1” bằng 1 chu kỳ xung của clk, và thời gian ở mức logic “0” bằng 99 chu kỳ xung clk (bằng 100 – 1 chu kỳ xung ở mức 1), ngõ ra clk_out2 có thời gian ở mức logic “1” bằng 4 chu kỳ xung clk, và thời gian ở mức logic “0” bằng 396 chu kỳ xung clk (bằng 400 – 4 xung ở mức 1). Như vậy duty = 1/100 = 4/400 = 1%.
Hình 7.17 – Kết quả mô phỏng bộ điều chế độ rộng xung PWM khi duty = 5%
Nhìn vào kết quả mô phỏng ta thấy, với duty = 5%, thì ở ngõ ra clk_out1 có thời gian ở mức logic “1” bằng 5 chu kỳ xung của clk, và thời gian ở mức logic “0” bằng 95 chu kỳ xung clk (bằng 100 – 5 chu kỳ xung ở mức 1), ngõ ra clk_out2 có thời gian ở mức logic “1” bằng 20 chu kỳ xung clk, và thời gian ở mức logic “0” bằng 380 chu kỳ xung clk (bằng 400 – 20 xung ở mức 1). Như vậy duty = 5/100 = 20/400 = 5%.
Truyền dữ liệu song song:
Chương trình chính:
Viết chương trình thực hiện bộ truyền dữ liệu song song có sơ đồ khối như hình 7.18.
Hình 7.18 – Sơ đồ khối bộ truyền dữ liệu song song
Trong đó:
clk: xung clock bộ phát.
res: tín hiệu reset.
data_in: dữ liệu vào có độ rộng 8 bit.
EN: tín hiệu cho phép truyền, tích cực mức 1.
data_out: dữ liệu được truyền ra ngoài có độ rộng 8 bit.
Dữ liệu vào được đưa vào chân data_in, dữ liệu này không được truyền ra ngoài, và dữ liệu data_out vẫn giữ nguyên giá trị trước đó khi EN = 0. Khi EN lên mức 1, thì dữ liệu vào data_in được truyền ra data_out để truyền đi. Khi tín hiệu res = 0, thì ngõ ra bộ phát được treo lên trạng thái tổng trở cao.
Chương trình chính:
module transmiter (res, clk, data_in, data_out, EN);
//---------- cac ngo vao ------------------------------------------------
input res;
input clk;	//------ xung clock he thong -------------
input [7:0] data_in;	//---- ------------du lieu vao --------------
input EN;	//--------- tin hieu cho phep truyen ------
//-------------------- cac ngo ra -----------------------------------------
output [7:0] data_out;	//--------------du lieu truyen di -----------
reg [7:0] data_out;
//------------------ main program --------------------------------------
always @ (posedge clk)
begin
if(!res) data_out = 'dz;
	else if (!EN) data_out = data_out;
	else data_out = data_in;
end
endmodule
Chương trình testbench:
module test_transmiter;
//--------- Inputs -------------
reg res;	
reg clk;
reg [7:0] data_in;
reg EN;
//--------- Outputs ------------
wire [7:0] data_out;
//------ Instantiate the Unit Under Test (UUT) -------
transmiter uut	(.res(res), 
	 .clk(clk), 
	.data_in(data_in), 
	.data_out(data_out), 
	.EN(EN)	);
initial begin
//------ Initialize Inputs ------------
	res = 0;
	clk = 0;
	data_in = 0;
	EN = 0;
	#100;
 	 res = 1;	//------cho reset len muc 1 ------
	#100 data_in = 10;	//--- cho du lieu vao bang 10 -----
	#100 EN = 1;	//--- cho phep truyen du lieu di ---
	#100 data_in = 20;	//--- nhap du lieu thu 2 ------------
	#100 EN = 0;	//--- dung truyen -------------------
	#100 data_in = 30;	//--- nhap du lieu thu 3 ------------
	#100 EN =1;	//--- cho phep truyen ---------------
end
//---------------- tao xung clock he thong --------
always
#10 clk = !clk; 
endmodule
Kết quả mô phỏng:
Hình 7.19 – Kết quả mô phỏng bộ truyền dữ liệu song song
Nhìn vào kết quả mô phỏng bộ truyền dữ liệu ta thấy:
Tại thời điểm khi res = 0 thì ngõ ra ở trạng thái tổng trở cao. 
Khi res = 1:
Khi EN = 0: dữ liệu data_in = 10 đã được nhập vào trước đó nhưng vẫn không được truyền ra ngoài, và data_out vẫn giữ nguyên giá trị trước đó là data_out = z.
Khi EN = 1: dữ liệu ngõ vào data_in được truyền ra ngoài data_out các giá trị lần lượt là 10 và 20.
Dữ liệu data_in = 30 không được truyền ra ngoài khi EN = 0 và data_out vẫn giữ nguyên giá trị trước đó là data_out = 20, cho đến khi EN = 1 thì giá trị data_in = 30 mới được truyền ra ngoài data_out.
Giao tiếp ADC và cảm biến nhiệt độ
Chương trình chính:
Viết chương trình giao tiếp ADC-8bit và hiển thị trên 3 led 7-đoạn bằng phương pháp quét có sơ đồ khối như hình 7.20.
Hình 7.20 – Sơ đồ khối khối giao tiếp ADC và led 7 đoạn
Cảm biến nhiệt độ xuất ra tín hiệu tương tự, tín hiệu tương tự được đưa vào ADC-8bit, ADC-8bit có nhiệm vụ chuyển tín hiệu tương tự nhận được từ cảm biến nhiệt độ thành tín hiệu số tương ứng dưới dạng số hex. FPGA có nhiệm vụ nhận dữ liệu số hex từ ADC, sau đó giải mã và cho hiển thị trên ba led-7 đoạn bằng phương pháp quét.
Chương trình chính:
module quet_3led (in, seven_doan, chonled, clk, res);
//-------------- cac ngo vao -----------------------------
input clk;	//---------- xung clock --------------
input [7:0] in;	//------ du lieu 8 bit tu ADC --------
input res;	//------ tin hieu reset ----------------
//-------------- cac ngo ra -------------------------------
output [2:0] chonled;	//------ chon led hien thi --
output [7:0] seven_doan; 	//------ 7 doan + dau cham --
reg [2:0] chonled;
reg [7:0] seven_doan;
//-------- bien trung gian -----------------------------
reg [1:0] K;	
reg [3:0] M;
reg [5:0] N;
//---------dinh nghia ma 7 doan -----
parameter [6:0] so0 = 7'h40; //c0
parameter [6:0] so1 = 7'h79; //f9
parameter [6:0] so2 = 7'h24; //a4
parameter [6:0] so3 = 7'h30; //b0
parameter [6:0] so4 = 7'h19; //99
parameter [6:0] so5 = 7'h12; //92
parameter [6:0] so6 = 7'h02; //82
parameter [6:0] so7 = 7'h78; //f8
parameter [6:0] so8 = 7'h00; //80
parameter [6:0] so9 = 7'h10; //90
//--------main program-------------
always @ (posedge clk)
begin
	if(!res) begin	
	K=0;
	N=0;
	M = 0;
	end
	else begin
	case (K)
	//---------------- hien thi led 7 doan thu nhat --------
	(0): begin
	chonled=~1;
	if (N==63) begin	 //------ delay --------------
	K=1; N=0; 
	end
	else begin
	K=0;
	N=N+1;
	end
	M = (in%100)%10;
	end
	//---------------- hien thi led 7 doan thu hai --------
	1: begin
	chonled=~2;
	if (N==63) begin 	//------ delay -------------
	K=2; N=0; 
	end
	else begin
	K=1;
	N=N+1;
	end
	M = (in/10)%10;
	end
	//---------------- hien thi led 7 doan thu ba --------
	2: begin
	chonled=~4;
	if (N==63) begin //------ delay ---------------------
	K=0; N=0; 
	end
	else begin
	K=2;
	N=N+1;
	end
	M = in/100;
	end
	endcase
	case(M)
	0: begin	seven_doan = {1'b1,so0}; end
	1: begin	seven_doan = {1'b1,so1}; end
	2: begin	seven_doan = {1'b1,so2}; end
	3: begin	seven_doan = {1'b1,so3}; end
	4: begin	seven_doan = {1'b1,so4}; end
	5: begin	seven_doan = {1'b1,so5}; end
	6: begin	seven_doan = {1'b1,so6}; end
	7: begin	seven_doan = {1'b1,so7}; end
	8: begin	seven_doan = {1'b1,so8}; end
	9: begin	seven_doan = {1'b1,so9}; end
	endcase
	end
end
endmodule
Chương trình testbench:
module test_quet_led;
//------ Inputs ---------
reg [7:0] in;
reg clk;
reg res;
//------- Outputs -------
wire [7:0] seven_doan;
wire [2:0] chonled;
//----- Instantiate the Unit Under Test (UUT)-------
quet_3led uut	 (.in(in), 
	.seven_doan(seven_doan), 
	.chonled(chonled), 
	.clk(clk), 
	.res(res) );
initial begin
//----- Initialize Inputs -------------
	in = 0;
	clk = 0;
	res = 0;
	#100;
	res =1;	//------- cho reset len 1 ---------
	#100 in=201;	//------- nhap du lieu thu 1 ------
	#6000 in = 123;	//------- nhap du lieu thu 2 ------
	#6000 in = 255;	//------- nhap du lieu thu 3 ------
end
//----------- tao xung clock he thong ------------------
always
	#10 clk = !clk; 
endmodule
Kết quả mô phỏng:
Hình 7.21 – Kết quả mô phỏng bộ giao tiếp ADC và led 7 đoạn 
khi giả lập dữ liệu từ ADC bằng 201.
Nhìn vào kết quả mô phỏng với dữ liệu vào là in = 201 ta thấy:
Đầu tiên, tín hiệu chonled = 110, tức là led 7 đoạn thứ nhất được cho phép sáng, đồng thời mã 7 đoạn của số 1 là “f9” cũng được xuất ra led thứ nhất để hiển thị.
Tiếp theo, tín hiệu chonled = 101, tức là led 7 đoạn thứ hai được cho phép sáng, đồng thời mã 7 đoạn của số 0 là “c0” cũng được xuất ra led thứ hai để hiển thị.
Cuối cùng, tín hiệu chonled = 011, tức là led 7 đoạn thứ ba được cho phép sáng, đồng thời mã 7 đoạn của số 2 là “a4” cũng được xuất ra led thứ ba để hiển thị.
Quá trình này được quét lặp đi lặp lại.
Tương tự như vậy, hình 7.22 và 7.23 cho ta thấy kết quả mô phỏng trong trường hợp giả lập dữ liệu từ ADC lần lượt là 123 và 255.
Hình 7.22 – Kết quả mô phỏng bộ giao tiếp ADC và led 7 đoạn 
khi giả lập dữ liệu từ ADC bằng 123.
Hình 7.23 – Kết quả mô phỏng bộ giao tiếp ADC và led 7 đoạn 
khi giả lập dữ liệu từ ADC bằng 255.
Tạo bộ đệm dữ liệu:
Bộ đệm dữ liệu thường gọi là FIFO, có chức năng ghi và đọc dữ liệu có sơ đồ khối như hình 7.24.
Hình 7.24 – Sơ đồ khối của khối FIFO
Trong đó:
DIN: dữ liệu ghi vào FIFO, có độ rộng 16 bit.
DOUT: dữ liệu đọc ra từ FIFO, có độ rộng 16 bit
RD_EN: chân cho phép đọc dữ liệu từ FIFO
WR_EN: chân cho phép ghi dữ liệu vào FIFO
CLK: xung clock đọc ghi dữ liệu
EMPTY: chân báo dữ liệu của FIFO đã hết.
FULL: chân báo ô nhớ của FIFO đã đầy
RES: chân reset hệ thống.
Trong nội dung giáo trình giới thiệu FIFO có khả năng lưu trữ 16 ô nhớ, mỗi ô nhớ có chứa dữ liệu 16 bit. Khi dữ liệu được ghi vào ô nhớ của FIFO đã đủ 16 mà chưa có dữ liệu nào được đọc ra thì FIFO sẽ báo đầy bộ nhớ bằng tín hiệu FULL và không cho phép ghi dữ liệu vào FIFO nữa. Ngược lại, khi dữ liệu trong FIFO đã được đọc hết ra ngoài thì FIFO sẽ báo đã hết dữ liệu bằng tín hiệu EMPTY và không cho phép đọc dữ liệu từ FIFO nữa. FIFO này vừa có thể đọc và ghi dữ liệu cùng một lúc.
FIFO đã được ISE hỗ trợ sẵn IP core, do đó ta có thể tạo FIFO này từ IP core của Xilinx. Để tạo FIFO, ta vào Memories & Storage Elements trong Xilinx CORE Generator, chọn FIFOs. Sau đó chọn các thông số cho FIFO như sau:
Write Width: chọn độ rộng dữ liệu của FIFO (độ rộng dữ liệu của DIN và DOUT).
Write Depth: số ô nhớ của FIFO.
Hình 7.25 – Thiết lập thông số của FIFO cần tạo
Sau khi đã thiết lập thông số của FIFO cần tạo, thì ta tiến hành tạo FIFO theo các bước tạo IP core như ở phần 5.8.
Sử dụng core có sẵn của ISE vào thiết kế:
Sau khi đã tạo IP core, thì ta add IP core đã được tạo vào project và sử dụng như một chương trình mà ta đã viết. Ta xem xét IP core FIFO vừa được tạo ra ở phần 7.12, ta thấy IP core tạo ra source verilog có các khai báo vào ra giống như chương trình mà ta đã viết.
Một đoạn source khai báo trong IP core FIFO vừa tạo ra như sau:
module fifo_generator_v6_1(clk, rst, din, wr_en, rd_en, dout, full, empty);
input clk;
input rst;
input [7 : 0] din;
input wr_en;
input rd_en;
output [7 : 0] dout;
output full;
output empty;
Bài tập bài 7:
Bài tập 1: viết chương trình thiết kế mạch đếm lên từ 0 đến 99.
Bài tập 2: viết chương trình thiết kế mạch đếm xuống từ 99 xuống 0.
Bài tập 3: viết chương trình thiết kế mạch đếm lên từ 0 đến 99, sau đó đếm xuống từ 99 đến 0, sau đó lặp lại chu trình đếm.
Bài tập 4: viết chương trình thiết kế mạch truyền/nhận dữ liệu theo chuẩn RS232.
Bài tập 5: viết chương trình xuất dòng chữ “VMSLT” lên LCD 16x2.
Bài tập 6: viết chương trình thiết kế đồng hồ số hiển thị trên 8 led 7 đoạn.
Bài tập 7: viết chương trình thiết kế bộ đo tần số hiển thị trên 8 led 7 đoạn.
Bài tập 8: viết chương trình thiết kế bộ điều chế độ rộng xung PWM.
YÊU CẦU VỀ ĐÁNH GIÁ KẾT QUẢ HỌC TẬP BÀI 7:
Nội dung:
Về kiến thức: Trình bày được các kiến thức cụ thể về hệ thống số.
Về kỹ năng: Sử dụng phần mềm ISE và modelsim để thiết kế, mô phỏng các ứng dụng cụ thể. Tạo các IP core có sẵn từ ISE. Kết nối phần cứng, đổ chương trình vào FPGA.
Về thái độ: Đảm bảo an toàn về điện và vệ sinh công nghiệp.
Phương pháp:
Về kiến thức: Được đánh giá bằng hình thức kiểm tra viết, vấn đáp.
Về kỹ năng: Đánh giá kỹ năng sử dụng ngôn ngữ Verilog HDL để thiết kế các ứng dụng cụ thể. Kỹ năng kết nối phần cứng theo đúng yêu cầu, đổ chương trình đã thiết kế vào FPGA.
Về thái độ:Tỉ mỉ, cẩn thận, chính xác, an toàn về điện và ngăn nắp trong công việc.
TÀI LIỆU THAM KHẢO
Computer Architecture Handbook on Verilog HDL, Dr.Daniel - C.Hude, Computer Science Department Bucknell University Lewisburg, 1997.
Verilog Hardware Description Laguage Reference Manual, Open Verilog International, 1992.
The Complete Verilog Book, Vivek Sagdeo – Sun Micro Systems, 1998.
Design Through Verilog HDL, IEEE Press, 2004.
The Verilog Hardware Description Language – Fifth Edition, Donald E.Thomas – ECE Department Carnegie Mellon University Pittsburgh, Pholip R.Moorby – Co-design Automation, 2002.
A Guide to Digital Design and Synthesis - Second Editon, Samir lapnitkar, 2003.
Spartan – 3E FPGA Family Data Sheet, Xilinx, 2009.
ModelSim User’s Manual
A verilog HDL, second edition.
Verilog coding for logic synthesis - A JOHN WILEY & SONS, INC., PUBLICATION
A Guide to Digital Design and Synthesis, Second Edition - Prentice Hall PTR – 2003
 Introduction to Verilog - Peter M. Nyasulu – 2001
www.google.com.

File đính kèm:

  • docgiao_trinh_vi_mach_so_lap_trinh_nghe_dien_tu_cong_nghep_trin.doc