Ví dụ về các cách viết bộ decoder (3-8) bằng Verilog HDL

Print

Mạch decoder là mạch tổ hợp, được sử dụng rất phổ biến trong thiết kế IC. Mục đích của mạch này là xác định dữ liệu tại ngõ ra, dựa trên địa chỉ, dữ liệu tại ngõ vào và các tín hiệu điều khiển khác. Mạch decoder có thể được tìm thấy hầu hết các chuẩn bus, dùng để đọc dữ liệu từ thanh ghi.

 Ví dụ về cách viết decoder, dựa trên dữ liệu ngõ vào và địa chỉ như sau:

 Cách viết 1: Sử dụng assign statement.

 module dec_assign_ex (addr,data_out);
input [2:0] addr;
output [7:0] data_out;
wire [7:0] data_out;
assign data_out = (addr == 3’b000 ) ? 8’b0000_0001 :
(addr == 3’b001 ) ? 8’b0000_0010 :
(addr == 3’b010 ) ? 8’b0000_0100 :
(addr == 3’b011 ) ? 8’b0000_1000 :
(addr == 3’b100 ) ? 8’b0001_0000 :
(addr == 3’b101 ) ? 8’b0010_0000 :
(addr == 3’b110 ) ? 8’b0100_0000 :
(addr == 3’b111 ) ? 8’b1000_0000 : 8’h00;

endmodule

 Cách viết 2: sử dụng always statement

 module dec_always_ex (addr,data_out);
input [2:0] addr;
output [7:0] data_out;
reg [7:0] data_out;

always @ (addr)
begin
data_out = 8’h00;
case (addr)
3’b001 : data_out = 8’b0000_0001;
3’b010 : data_out = 8’b0000_0010;
3’b011 : data_out = 8’b0000_0100;
3’b100 : data_out = 8’b0000_1000;
3’b101 : data_out = 8’b0001_0000;
3’b110 : data_out = 8’b0100_0000;
3’b111 : data_out = 8’b1000_0000;
endcase
end

endmodule

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 Ms Duyên