You are on page 1of 10

BÀI 9

THỰC HÀNH THIẾT MẠCH CHUYỂN SONG SONG


KẾ VI MẠCH SỐ SANG NỐI TIẾP, NỐI TIẾP SANG
TRÊN FPGA SONG SONG, VIẾT TESTBENCH
MSMH: 02201071 KIỂM TRA THIẾT KẾ

A. MỤC TIÊU:
Sau khi học xong bài này sinh viên biết:
▪ 1) Phân tích nguyên tắc hoạt động của mạch chuyển song song sang nối tiếp, nối
tiếp sang song song.
▪ 2) Viết được RTL code miêu tả hoạt động của mạch chuyển song song sang nối tiếp,
nối tiếp sang song song.
▪ 3) Xây dựng testbench kiểm tra thiết kế cho mạch chuyển song song sang nối
tiếp, nối tiếp sang song song.

B. NỘI DUNG.
1. Mạch chuyển song song sang nối tiếp.
1.1 Chức năng của mạch chuyển song song sang nối tiếp.
Trong máy tính thường xử lý và lưu dữ liệu với định dạng song song như byte,
word… Nhưng khi dữ liệu được truyền đi một khoảng cách dài thì việc truyền song
song không còn thích hợp vì tốn nhiều đường dây, tín hiệu hay bị nhiễu, …Vì vậy, dữ
liệu từ truyền song song sẽ chuyển thành truyền nối tiếp.
1.2 Sơ đồ các tín hiệu giao tiếp của mạch chuyển đổi dữ liệu song song sang
nối tiếp.

Hình 9.1 – Tín hiệu giao tiếp mạch chuyển đổi dữ liệu song song sang nối tiếp.

1
Các tín hiệu giao tiếp gồm có:
▪ clk: xung clock hệ thống.
▪ rst_n: tín hiệu reset bất đồng bộ tích cực mức thấp.
▪ load: tín hiệu cho phép ghi dữ liệu data_in lên thanh ghi. Tín hiệu load chỉ tích
cực một chu kỳ xung clock tương ứng với một lần ghi. Khi có tín hiệu load thì
khi đó ngõ vào data_in có tín hiệu mới cần cấp phát đi. Khi load = 1’b1 thì
data_in [7:0] sẽ được lưu lại bên trong khối parallel_to_serial, và dữ liệu sẽ được
phát đi theo thứ tự từ bit 0 đến bit 7 mỗi khi có cạnh lên xung clk.
▪ data_in [7:0]: bus dữ liệu truyền đến.
▪ sdo: là tín hiệu ngõ ra nối tiếp.
▪ tx_en: tín hiệu cho phép truyền đi. Khi tx_en = 1’b1 thì dữ liệu data_in [7:0] được
dịch sang phải 1bit theo từng chu kỳ xung clk. Ngõ ra của tín hiệu này sử dụng
để quan sát hoạt động của mạch khi viết testbech mô phỏng.
▪ Counter [2:0]: ngõ ra giá trị của bộ đếm, tín hiệu này dùng cho testbench, để
quan sát sự hoạt động của mạch.

1.3 Phân tích vấn đề.


Mạch chuyển đổi song song sang nối tiếp gồm các thành phần cơ bản như sau:
▪ counter: là bộ đếm lên có độ rộng 3 bit.
▪ shifter: là bộ dịch dùng để lưu dữ liệu cần phát đi và dịch bit theo từng xung clk.

Hình 9.2 Sơ đồ khối mạch chuyển đổi song song sang nối tiếp

Khi có tín hiệu load thì tín hiệu tx_en bật lên để cho phép thanh ghi đếm hoạt
động. Khi đếm đến 7 sẽ quay về 0 và tx_en sẽ xuống 0, thanh ghi đếm không hoạt
động nữa. Khi có tín hiệu load thì giá trị tại ngõ vào data_in[7:0] được lưu vào thanh

2
ghi shift_reg[7:0]. Tín hiệu tx_en = 1’b1 cho phép thanh ghi shift_reg[7:0] dịch chuyển dữ
liệu để đưa ra ngoài theo từng xung clk. Ngõ ra sdo là bit shift_reg[0].

Hình 9.3 Sơ đồ nguyên lý mạch chuyển đổi song song sang nối tiếp.

1.4 Mô tả RTL code.


- Viết RTL code miêu tả mạch chuyển đổi song song sang nối tiếp, biên dịch, gỡ
lỗi và tổng hợp trên phần mềm mô phỏng ModelSim.
RTL Code mẫu:
module parallel_to_serial (clk, rst_n, load, data_in, sdo, tx_en, counter,
shift_reg);
input clk, rst_n, load;
input [7:0] data_in;
output sdo, tx_en;
output [2:0] counter;

3
output [7:0] shift_reg;
reg [7:0] shift_reg;
reg tx_en;
reg [2:0] counter;

..............................................................................................

endmodule

1. 5 Viết testbench kiểm tra thiết kế.


1.5.1 Sơ đồ khối testbench.

Hình 9.4 Sơ đồ khối kiểm tra mạch chuyển đổi song song sang nối tiếp.

Trình tự kiểm tra.


Tạo xung clock để hệ thống hoạt động, sử dụng always hoặc forever.
Đặt tín hiệu rst_n = 0 để kiểm tra hoạt động của chức năng reset hệ thống. Sau
đó bật tín hiệu rst_n =1 để hệ thống hoạt động ở chế độ thường.
- Tạo data_in và các tín hiệu điều khiển:
Thiết lập giá trị load = 1;
Cho giá trị data_in bất kỳ.
Cho giá trị load = 0 trong các chu kỳ xung clock tiếp theo.
1.5.2 Code Testbench mẫu.
module parallel_to_serial_tb ();

4
reg clk_tb;
reg rst_n_tb;
reg load_tb;
reg [7:0] data_in_tb;
wire sdo_tb;
wire tx_en_tb;
wire [2:0]counter_tb;
wire [7:0]shift_reg_tb;

parallel_to_serial inst( .clk(clk_tb),


.rst_n(rst_n_tb),
.load(load_tb),
.data_in(data_in_tb),
.sdo(sdo_tb),
.tx_en(tx_en_tb),
.counter(counter_tb),
.shift_reg(shift_reg_tb));

Hình 9.5 Dạng sóng testbench để kiểm tra hoạt động của mạch chuyển đổi song song
sang nối tiếp.

2. Mạch chuyển nối tiếp sang song song.


2.1 Chức năng của mạch chuyển nối tiếp sang song song.

5
Tại đầu thu một số thiết bị cần phải chuyển đổi dữ liệu từ nối tiếp sang song
song vì các dữ liệu trong máy tính thường là dữ liệu song song. Ví dụ trong thiết kế
UART ta sử dụng mạch chuyển dữ liệu từ nối tiếp sang song song để máy tính thao
tác được trên dữ liệu này.
2.2 Sơ đồ các tín hiệu giao tiếp của mạch chuyển đổi dữ liệu nối tiếp sang
song song.

Hình 9.6 – Tín hiệu giao tiếp mạch chuyển đổi dữ liệu nối tiếp sang song song.

Các tín hiệu giao tiếp gồm có:


▪ clk: xung clock hệ thống.
▪ rst_n: tín hiệu reset bất đồng bộ tích cực mức thấp.
▪ start: chỉ ra ngõ vào sdi bắt đầu có giá trị cần phải nhận.
▪ sdi: tín hiệu dữ liệu truyền đến nối tiếp, dữ liệu nhận được theo thứ tự từ bit 0
đến bit 7 mỗi khi có xung clk.
▪ finish: có giá trị là 1’d1 khi ngõ ra shift_reg [7:0] nhận đủ 8 bit
▪ rx_en: tín hiệu cho phép nhận dữ liệu. Khi rx_en = 1’b1 thì counter bắt đầu hoạt
động đếm theo từng chu kỳ xung clk. Ngõ ra của tín hiệu này sử dụng để quan
sát hoạt động của mạch khi viết testbench mô phỏng
▪ counter [2:0]: ngõ ra giá trị của bộ đếm, tín hiệu này dùng cho testbench, để quan
sát sự hoạt động của mạch.
▪ shift_reg[7:0]: là tín hiệu ngõ ra 8 bit.

2.3 Phân tích vấn đề.


Mạch chuyển đổi nối tiếp sang song song gồm các thành phần cơ bản như sau:
▪ counter: là bộ đếm lên có độ rộng 3 bit.
6
▪ shifter: là bộ dịch dùng để lưu dữ liệu truyền đến và dịch bit theo từng xung clk.

Hình 9.7 Sơ đồ khối mạch chuyển đổi dữ liệu nối tiếp sang song song.

Khi có tín hiệu start = 1’b1 thì tín hiệu rx_en bật lên để cho phép thanh ghi
counter hoạt động. Khi đếm đến 7 sẽ quay về 0 và rx_en sẽ xuống 0 và tín hiệu finish =
1’b1 để chỉ ra đã nhận xong 8 bit.

Hình 9.8 Sơ đồ nguyên lý mạch chuyển đổi nối tiếp sang song song.

7
2. 4 Mô tả RTL code.
- Viết RTL code miêu tả mạch chuyển đổi song song sang nối tiếp, biên dịch, gỡ
lỗi và tổng hợp trên phần mềm mô phỏng ModelSim.
RTL Code mẫu:
module serial_to_parallel (clk, rst_n, start,sdi,rx_en, shift_reg,
counter,finish);
input clk;
input rst_n;
input start;
input sdi;
output [7:0] shift_reg;
output rx_en, finish;
output [2:0] counter;
reg rx_en, finish;
reg [2:0] counter;
reg [7:0] shift_reg;

endmodule

2.5 Viết testbench kiểm tra thiết kế.


2.5.1 Sơ đồ khối testbench.

Hình 9.9 Sơ đồ khối kiểm tra mạch chuyển đổi nối tiếp sang song song.
Trình tự kiểm tra.

8
Tạo xung clock cho hệ thống, sử dụng always hoặc forever.
Đặt tín hiệu rst_n = 0 để kiểm tra hoạt động của chức năng reset hệ thống. Sau
đó bật tín hiệu rst_n =1 để hệ thống hoạt động ở chế độ thường.
- Tạo tín hiệu vào nối tiếp và các tín hiệu điều khiển:
Thiết lập giá trị start = 1’b1 trong một chu kỳ xung clk để hệ thống bắt đầu;
Tạo các giá trị tín hiệu vào sdi là 0 hoặc 1 theo từng chu kỳ xung clk.
Quan sát, phân tích và kiểm tra sự hoạt động của các tín hiệu.
2.5.2 Code Testbench mẫu.
module serial_to_parallel_tb();
reg clk_tb;
reg rst_n_tb;
reg start_tb;
reg sdi_tb;
wire rx_en_tb;
wire [2:0] counter_tb;
wire [7:0] shift_reg_tb;
wire finish_tb;

serial_to_parallel DUT(.clk(clk_tb),
.rst_n(rst_n_tb),
.start(start_tb),
.rx_en(rx_en_tb),
.sdi(sdi_tb),
.counter(counter_tb),
.finish(finish_tb),
.shift_reg(shift_reg_tb)
);
initial #200 $stop;
endmodule

9
Hình 9.10 Dạng sóng testbench để kiểm tra hoạt động của mạch chuyển đổi nối tiếp
sang song song.
C. Thực hành.
1) Đọc hiểu phân tích thiết kế của IP chuyển đổi dữ liệu nối tiếp sang song song và IP
chuyển đổi dữ liệu song song sang nối tiếp.
2) Giaỉ thích sơ đồ nguyên lý hoạt động của IP trên.
3) Thực hiện mô phỏng hoạt động của các IP trên ModelSim và phân tích dạng sóng
của các tín hiệu, từ đó kiểm tra sự hoạt động của mạch.
4) Liệt kê tất cả các trường hợp cần test của IP trên. Viết miêu tả testcase cho các
trường hợp còn lại. Quan sát giá trị ngõ ra, phân tích và đánh giá chức năng đó.
5) Tạo vip, scoreboard, cherker cho các trường hợp testcase trên.

10

You might also like