Professional Documents
Culture Documents
Chương 4: Thiết kế mạch tổ hợp với Verilog HDL: Bộ môn Điện Tử Máy Tính Khoa Công Nghệ Điện Tử
Chương 4: Thiết kế mạch tổ hợp với Verilog HDL: Bộ môn Điện Tử Máy Tính Khoa Công Nghệ Điện Tử
Chương 4:
Thiết kế mạch tổ hợp với
Verilog HDL
Mô hình hành vi
7
I. Mô hình cấu trúc (Structural model)
Sơ đồ mạch logic
Code Verilog theo mô hình cấu trúc
22
II. Moâ hình luoàng döõ lieäu (DataflowModel)
2. Pheùp gaùn lieân tuïc
• Pheùp gaùn lieân tuïc laø pheùp gaùn seõ ñöôïc thöïc thi baát cöù
khi naøo giaù trò cuûa bieåu thöùc beân phaûi thay ñoåi. Bieåu
thöùc beân traùi phaûi coù döõ lieãu kieåu net.
• Cuù phaùp:
assign bieán_wire = bieåu thöùc;
ví duï:
module and_gate(a,b,y);
input a,b;
output y;
assign y = a & b;
endmodule
Caùc toaùn töû ñöôïc söû duïng trong dataflow module
Mức độ ưu tiên của các toán tử
II. Moâ hình luoàng döõ lieäu (DataflowModel)
assign o1 = ~a & b;
assign o2 = a ~^ b;
assign o3 = a & ~b;
endmodule
II. Moâ hình luoàng döõ lieäu (DataflowModel)
viết chương trình verilog
Ví dụ:
Viết chương trình verilog mô tả decoder 2-4 ngõ ra tích cực
thấp, chân cho phép tích cực thấp dùng mô hình luồng dữ
liệu
a. Thiết kế số
b. Viết code verilog
c. Mô phỏng để kiểm tra kết quả
II. Moâ hình luoàng döõ lieäu (DataflowModel)
// ĐÁP ÁN
// decoder 2-4 ngõ ra tích cực thấp, chân cho phép tích cực thấp
module decoder_E_df (e, x1, x0, y0, y1, y2, y3);
input e, x1, x0;
output y0, y1, y2, y3;
assign y0 = e | x1 | x0;
assign y1 = e | x1 | ~x0;
assign y2 = e | ~x1 | x0;
assign y3 = e | ~x1 | ~x0;
endmodule
II. Moâ hình luoàng döõ lieäu (DataflowModel)
Bài tập 5:
Viết code verilog mô tả mạch chuyển mã nhị phân 3 bit
sang mã quá 3, sử dụng mô hình luồng dữ liệu
II. Moâ hình luoàng döõ lieäu (DataflowModel)
Bài tập 6:
viết code Verilog mô tả IC 74LS138 dùng mô hình luồng dữ liệu
II. Moâ hình luoàng döõ lieäu (DataflowModel)
Bài tập 7:
viết code Verilog mô tả IC 74LS153 dùng mô hình luồng dữ liệu
III. Mô hình hành vi (Behavioral model)
- vẽ sơ đồ chân in/out
- Lập trạng thái
- Viết code
- Mô phỏng và ktra kết quả
module decoder (A,E,Y);
input [2:0]A;
input E;
output [7:0]Y;
reg [7:0]Y;
always @ (A,E) begin
if (E == 1'b0)
begin
case (A)
3'b000: Y = 8'b11111110;
3'b001: Y = 8'b11111101;
3'b010: Y = 8'b11111011;
3'b011: Y = 8'b11110111;
3'b100: Y = 8'b11101111;
3'b101: Y = 8'b11011111;
3'b110: Y = 8'b10111111;
3'b111: Y = 8'b01111111;
endcase
end
else
Y = 8'b11111111;
end
endmodule
III. Mô hình hành vi (Behavioral model)
44
III. Mô hình hành vi (Behavioral model)
Bài tập 9:
Viết chương trình verilog mô tả m ch gi i mã BCD sang
LED7SEG anode chung duøng mô hình hành vi
dùng mô hình hành vi
- vẽ sơ đồ chân in/out
- Lập trạng thái
- Viết code
- Mô phỏng và ktra kết quả
45
III. Mô hình hành vi (Behavioral model)
46
VI. Thiết kế mạch số theo cấu trúc phân cấp
48
VI. Thiết kế mạch số theo cấu trúc phân cấp
b. Module con
Laø module ñöôïc ñònh nghóa loàng trong moät module
khaùc
Leänh goïi vaø gaùn ñaëc tính cho module con seõ taïo ra
moät hoaëc nhieàu baûn sao cuûa module ñöôïc ñònh nghóa
Caùch goïi module con nhö sau:
50
Ví dụ 1: viết code Verilog mô tả mạch FA dùng HA
Mạch cộng HA
Chức năng: HA cộng hai số nhị phân A
và B một bit không có nhớ
sel q
00 a
01 b
10 c
11 d
VI. Thiết kế mạch số theo cấu trúc phân cấp
Đáp án:
- Viết module con Mux2to1
Viết code MUX4to1 duøng MUX 2to1
//module top
module mux4to1(q,sel,a,b,c,d);
input [1:0] sel;
input a,b,c,d;
output q;
wire tmp1,tmp2;
mux2to1 M0 (tmp1,sel[0],a,b);
mux2to1 M1 (tmp2,sel[0],c,d);
mux2to1 M2 (q,sel[1],tmp1,tmp2);
endmodule
code mô tả MUX 4 to 1 duøng MUX 2to1
//module top //module instantiation
module mux4to1(q,sel,a,b,c,d); module mux2to1(q,s,a,b);
input [1:0] sel; input s,a,b;
input a,b,c,d; output q;
output q; wire selbar,a1,a2;
wire tmp1,tmp2;
not(selbar,s);
mux2to1 M0 (tmp1,sel[0],a,b); and (a1,selbar,a);
mux2to1 M1 (tmp2,sel[0],c,d); and (a2,s,b);
mux2to1 M2 (q,sel[1],tmp1,tmp2); or (q,a1,a2);
endmodule endmodule
Ví dụ 3: viết chương trình verilog mô tả decoder 38
ngõ ra tích cực thấp dùng decoder 24
A Y
0 Y0
B(MSB) Y
1 Y1
Y
2 Y2
2 to 4
E Y
3 Y3
A A Y
0 Y4
B(MSB) Y5
B Y
1
Y
2 Y6
2 to 4
C E Y
3 Y7
(MSB)
Đáp án
module decoder3_8 (A,B,C,Y); module decoder2_4(b,a,e,y);
input A,B,C; input a,b,e;
output [7:0]Y; output reg [3:0]y;
wire notc; always @ (a,b,e)
not (notc,C); begin
decoder2_4 u1(B,A,notc,Y[3:0]); if (e == 1'b0)
decoder2_4 u2(B,A,C,Y[7:4]); y = 4'b1111;
Endmodule else
begin
A Y
0 Y0 case ({b,a})
B(MSB) Y
1 Y1 2'b00: y = 4'b1110;
2 to 4
Y
2 Y2 2'b01: y = 4'b1101;
E Y
3 Y3 2'b10: y = 4'b1011;
2'b11: y = 4'b0111;
A A Y
0 Y4 endcase
B B(MSB) Y
1 Y5 end
Y
2 Y6 end
C E
2 to 4 Y
3 Y7 endmodule
(MSB)
Kết quả mô phỏng
C là MSB
Kết quả chạy nestlist
VI. Thiết kế mạch số theo cấu trúc phân cấp
Bài tập 12
Viết code verilog mô tả DEMUX1-8 dùng DEMUX1-4
a. Vẽ sơ đồ mạch logic DEMUX1-8 dùng DEMUX1-4
b. Viết code verilog dùng cấu trúc phân cấp
VI. Thiết kế mạch số theo cấu trúc phân cấp
Bài tập 13
Viết code verilog mô tả mạch so sánh 4 bit dùng mạch so
sánh 1 bit
a. Vẽ sơ đồ mạch so sánh 4 bit dùng mạch so sánh 1 bit
b. Viết code verilog dùng cấu trúc phân cấp
VI. Thiết kế mạch số theo cấu trúc phân cấp
Bài tập 14
Vieát code verilog moâ taû mạch nhân 4 bit dùng FA, sử
dụng cấu trúc phân cấp.
Sơ đồ chân in/out:
a
4 f
Mạch nhân 8
b 4 bit
4
VI. Thiết kế mạch số theo cấu trúc phân cấp
Gợi ý:
Thực hiện nhân hai số nhị phân A = 1100; B = 1011
VI. Thiết kế mạch số theo cấu trúc phân cấp