Thanh ghi dịch chuyển là một thành phần quan trọng trong thiết kế kỹ thuật số, được sử dụng để lưu trữ và dịch chuyển dữ liệu. Bài viết này sẽ hướng dẫn bạn viết Verilog code cho thanh ghi dịch chuyển 4 bit, bao gồm thiết kế, sơ đồ phần cứng và testbench để kiểm tra chức năng.
Thiết Kế Thanh Ghi Dịch Chuyển 4 Bit trong Verilog
Code Verilog dưới đây mô tả một thanh ghi dịch chuyển có thể tùy chỉnh độ rộng bit bằng tham số MSB
. Để tạo thanh ghi 4 bit, ta đặt MSB = 4
. Thanh ghi này có các tính năng:
- Kích hoạt/Vô hiệu hóa: Điều khiển bằng tín hiệu
en
. - Hướng dịch chuyển: Dịch trái hoặc phải tùy thuộc vào tín hiệu
dir
. - Reset: Khi
rstn
ở mức thấp, thanh ghi sẽ được reset về giá trị 0. - Dữ liệu đầu vào: Nhận dữ liệu từ chân
d
.
module shift_reg #(parameter MSB=4) (
input d, // Dữ liệu đầu vào
input clk, // Xung clock
input en, // Kích hoạt
input dir, // Hướng dịch chuyển (0: phải, 1: trái)
input rstn, // Reset
output reg [MSB-1:0] out // Đầu ra
);
always @ (posedge clk) begin
if (!rstn) begin
out <= 0;
end else if (en) begin
if (dir) begin
out <= {out[MSB-2:0], d}; // Dịch trái
end else begin
out <= {d, out[MSB-1:1]}; // Dịch phải
end
end
end
endmodule
Sơ Đồ Phần Cứng
Sơ đồ phần cứng của thanh ghi dịch chuyển 8 bit được minh họa dưới đây. Đối với thanh ghi 4 bit, chỉ cần sử dụng 4 flip-flop thay vì 8.
Testbench cho Thanh Ghi Dịch Chuyển 4 Bit
Testbench sau đây được sử dụng để kiểm tra chức năng của thanh ghi dịch chuyển. Nó khởi tạo thanh ghi, sau đó thử nghiệm các trường hợp khác nhau của tín hiệu en
, dir
và d
.
module tb_sr;
parameter MSB = 4;
reg data;
reg clk;
reg en;
reg dir;
reg rstn;
wire [MSB-1:0] out;
shift_reg #(MSB) sr0 (
.d(data),
.clk(clk),
.en(en),
.dir(dir),
.rstn(rstn),
.out(out)
);
always #10 clk = ~clk;
initial begin
clk = 0;
rstn = 0;
data = 1;
en = 0;
dir = 0;
#20 rstn = 1;
#20 en = 1;
#100 dir = 1; // Thay đổi hướng dịch chuyển
#100 data = 0; // Thay đổi dữ liệu đầu vào
#200 $finish;
end
endmodule
Kết quả mô phỏng sẽ cho thấy đầu ra out
thay đổi theo các giá trị của d
, en
và dir
.
Kết Luận
Bài viết đã trình bày Verilog code cho thanh ghi dịch chuyển 4 bit, cùng với sơ đồ phần cứng và testbench. Hy vọng bài viết này sẽ giúp bạn hiểu rõ hơn về cách thiết kế và kiểm tra thanh ghi dịch chuyển trong Verilog. Bạn có thể thay đổi tham số MSB
để tạo thanh ghi với số bit khác nhau.