Professional Documents
Culture Documents
C5 - Mach Tuan Tu
C5 - Mach Tuan Tu
Nội dung:
Mô tả các mạch tuần tự sau dùng ngôn ngữ verilog
•Flip Flop
•Thanh ghi dịch
•Mạch đếm nhị phân
•Mạch đếm BCD
•Máy trạng thái
•ROM/RAM
•Các mạch số ứng dụng
1. Đặc Điểm Chung Của Mạch Tuần Tự
Q
module d_ff (ck, d, rs, q);
D
input ck, d, rs;
Q
output q;
CK reg q;
always @ (posedge ck or negedge rs)
RS
begin
if (rs == 1'b0)
q <= 0;
Dn Qn+1
else
0 0
q <= d;
1 1 end
endmodule
2. Mô tả Flip Flop
Ví dụ : Viết chương trình verilog mô tả D_FF có ck
tác động theo cạnh xuống, chân rs đồng bộ tích cực
mức cao module d_ff (ck, d, rs, q);
input ck, d, rs;
output q;
reg q;
always @ (negedge ck )
begin
if (rs == 1'b1)
q <= 0;
else
q <= d;
end
endmodule
2. Mô tả Flip Flop
s q0
Counter q1
rs q2
Up/down
ck q3
21
4. Mô tả bộ đếm BCD
Đáp án : chương trình cho bộ đếm lên BCD 1 digit (đếm 09), xung
ck kích theo cạnh lên, reset tích cực mức cao
module counter (rs, ck, bcd);
input ck,rs;
output [3:0] bcd;
reg [3:0] bcd;
always @ (posedge ck or posedge rs) begin
if (rs == 1) bcd <= 4'b0000;
else
begin
bcd <= bcd +1;
if (bcd == 4’b1001) bcd <= 4'b0000;
end
end
endmodule
4. Mô tả bộ đếm BCD
23
code mô tả mạch đếm BCD 2 digit đếm 00 99
//mạch đếm 00-99 always @ (posedge ck)
//ngo ra ma BCD begin
//bcd1 : hàng đơn vị if (rs == 1)
//bcd0 : hàng chục begin
//-------------------------------------------// bcd1 <= 4'b0000;
module counter_bcd (ck,rs,bcd1,bcd0); bcd0 <= 4'b0000;
input ck, rs; end
output [3:0] bcd1,bcd0; else
reg [3:0] bcd1, bcd0; begin
bcd0 <= bcd0 + 1;
if (bcd0 == 4'b1001)
begin
bcd0 <= 4'b0000;
bcd1 <= bcd1 + 1;
if (bcd1 == 4'b1001)
bcd1 <= 4'b0000;
end
end
end
endmodule
4. Mô tả bộ đếm BCD
25
4. Mô tả bộ đếm BCD
27
4. Mô tả bộ đếm BCD
Bài tập 4: Vieát chöông trình verilog moâ taû boä ñeám
xuống BCD 2 digit, ñeám xuống töø 60 về 00, chaân
rs tích cöïc möùc cao, ck tác động theo cạnh lên.
28
5. MÁY TRẠNG THÁI (FSM)
29
5. MÁY TRẠNG THÁI (FSM)
Next state logic circuit: khối tác động trạng thái kế tiếp
State memory register: khối thanh ghi (lưu trạng thái trong của FSM)
Output logic circuit: khối tác động ngõ ra
30
5. MÁY TRẠNG THÁI (FSM)
Ngõ vào: C
Ngõ ra : Y
4 trạng thái trong:
00,01,10,11
C
RS Y
FSM
CK
33
5. MÁY TRẠNG THÁI (FSM)
always @ (*)
begin
if (current_state == s5) y = 1'b1;
else y = 1'b0;
end
Endmodule
Kết quả mô phỏng
5. MÁY TRẠNG THÁI (FSM)
Ví dụ:
Viết code verilog mô tả FSM theo sơ đồ sau:
RS
5. MÁY TRẠNG THÁI (FSM)
always @ (*)
case (current_state)
s0 : ab = 2’b00;
s1 : ab = 2’b10;
s2 : ab = 2’b00;
s3 : ab = 2’b01;
endmodule
5. MÁY TRẠNG THÁI (FSM)
Bài tập 5:
Viết code verilog mô tả FSM theo sơ đồ sau:
RS
Ví dụ: viết chương trình verilog mô tả FSM có chức năng phát hiện
chuỗi 1011 từ ngõ vào. Chân ck kích theo cạnh lên, rs đồng bộ tích
cực mức cao. Ngõ ra sẽ bằng 1 khi phát hiện đúng chuỗi 1011 ở ngõ
vào Mã hóa trạng thái:
Ví dụ :
viết chương trình verilog mô tả FSM có chức năng phát hiện
chuỗi 101 và 011 ở ngõ vào. Ngõ ra Y1 sẽ báo trạng thái 1 khi
phát hiện chuổi bit 101, Ngõ ra Y2 sẽ báo trạng thái 1 khi phát
hiện chuổi bit 011. Xung ck tác động theo cạnh xuống, rs không
đồng bộ tích cực mức cao
Gợi ý: viết code theo graph trạng thái sau
5. MÁY TRẠNG THÁI (FSM)
Bài tập 7:
Viết chương trình verilog mô tả máy trạng thái phát hiện
chuỗi bit 101 và 0100 ở ngõ vào. Ngõ ra Y1=1 khi phát
hiện đúng chuỗi 101, Y2=1 khi phát hiện đúng chuỗi 0100.
Xung ck tác động theo cạnh xuống, rs không đồng bộ tích
cực mức cao
Gợi ý: viết code theo graph trạng thái sau
Bài tập 8 : viết chương trình verilog mô tả FSM theo
sơ đồ phần cứng sau, ngõ ra hiểu thị led 7seg hiển thị
lần lượt các chữ số trong mã số sinh viên. Khi RS tích
cực thì LED hiển thị chữ số đầu tiên trong MSSV, Thời
gian hiển thị 1 trạng thái là 500ms
+5V
BCD
ck
FSM 74LS47
RESET
ck
FSM
RESET
RESET 74LS47
59
Đáp án : code mô tả mạch đếm 2 digit đếm 00 24
module BT (ck,rs,q,bcd1,bcd0);
input ck, rs;
output [4:0]q;
output [3:0]bcd1,bcd0;
reg [4:0]q;
reg [3:0]bcd1,bcd0;
always @ (posedge ck or posedge rs)
begin
if (rs == 1) q <= 5'b 00000;
else
begin
q <= q + 1;
if (q == 5’b11000)
q<= 5’b00000;
end
end
always @ (posedge ck or posedge rs)
begin
bcd1 = q / 10;
bcd0 = q % 10;
end
endmodule
5. MÁY TRẠNG THÁI (FSM)
Bài tập 11: lập trình verilog điều kiển led bảy đoạn hiển thị
số ñeám xuống 60 về 00, led 7 SEG loại cathode chung, chaân
rs không đồng bộ tích cöïc möùc cao, thời gian hiển thị 1 trạng
thái là 1s
5. MÁY TRẠNG THÁI (FSM)
Bài tập 12:
Viết code verilog lập trình led bảy đoạn hiển thị chữ
HELLO. Khi RS tích cực thì led tắt hết. LED bảy
đoạn loại cathode chung.
5. MÁY TRẠNG THÁI (FSM)
Bài tập 13 :
Viết code Verilog lập trình cho led bảy đoạn hiển thị
chữ HAPPY dịch chuyển từ trái qua phải. Khi RS tích
cực thì led tắt hết. LED bảy đoạn loại cathode chung.
5. MÁY TRẠNG THÁI (FSM)
Bài tập 14 :
Viết code Verilog lập trình điều khiển 8 led đơn sáng
dần từ trái sang phải. Khi RS tích cực thì led tắt
hết.Thời gian tồn tại một trạng thái là 500ms
5. MÁY TRẠNG THÁI (FSM)
RESET
FSM
ck
Yêu cầu:
Thời gian sáng của các đèn như sau:
Đèn xanh : 8s Đèn vàng: 4s Đèn đỏ: 12s
- Chân Reset tích cực mức thấp, khi chân Reset tích cực thì chu trình
bắt đầu lại từ đầu với đèn xanh sáng 66
5. MÁY TRẠNG THÁI (FSM)
67
5. MÁY TRẠNG THÁI (FSM)
Yêu cầu:
Thời gian sáng của các đèn như sau:
Đèn xanh : 10s Đèn vàng: 5s Đèn đỏ: 15s
- Chân Reset tích cực mức thấp, khi chân Reset tích cực
thì chu trình bắt đầu lại từ đầu với đèn xanh sáng
68
6. Mô tả thanh ghi dịch
Gợi ý:
6. Mô tả thanh ghi dịch
80
7. Thiết kế ROM-RAM
Giải:
Phân tích đề bài
RAM 8x8 có 8 dia chi chân address có 3 bit
Dữ liệu 8 bit chân datain và dataout có 8 bit
CS = 1 cho phep RAM hoạt động
WE = 1 : cho phép ghi dữ liệu
WE = 0 : cho phep đọc dữ liệu
81
7. Thiết kế ROM-RAM
module RAM( dataIn, dataOut, Addr,CS,WE, Clk );
input [7:0] dataIn;
output reg [7:0] dataOut;
input [2:0] Addr;
input CS, WE, Clk;
reg [7:0] SRAM [7:0]; //SRAM co 8 dia chi , moi dia chi luu du lieu 8 bit
always @ (posedge Clk)
begin
if (CS == 1'b1)
begin
if (WE == 1'b1) // ghi du lieu
SRAM [Addr] <= dataIn;
else // doc du lieu
dataOut <= SRAM [Addr];
end
else
dataOut <= 8'bxxxxxxxx;
end
82
endmodule
7. Thiết kế ROM-RAM
83
7. Thiết kế ROM-RAM
86
d. Ví dụ : viết code verilog mô tả ROM 16x4
module ROM (dataOut, Addr, CS, rd, Clk ); // rom 16x4
output reg [3:0] dataOut; // rom co 16 dia chi (4 chan addr ngo vao),
input [3:0] Addr; //du lieu 4 bit
// cs =1 : cho phep rom
input CS,rd, clk; // rd = 1 : cho phep doc du lieu
reg [3:0] rom [15:0]; //ROM co 16 dia chi , moi dia chi
luu du lieu 4 bit always @ (posedge Clk)
initial begin
begin if (CS == 1'b1)
rom[4'b0000] = 4'b1111; begin
rom[4'b0001] = 4'b1110; if (rd == 1'b1)
dataOut <= rom [Addr];
rom[4'b0010] = 4'b1101; else
rom[4'b0011] = 4'b1100; dataOut <= dataOut;
rom[4'b0100] = 4'b1011; end
rom[4'b0101] = 4'b1010; else
rom[4'b0110] = 4'b1001; dataOut = 4'bxxxx;
rom[4'b0111] = 4'b1000; end
rom[4'b1000] = 4'b0111; Endmodule
rom[4'b1001] = 4'b0110;
rom[4'b1010] = 4'b0101;
rom[4'b1011] = 4'b0100;
rom[4'b1100] = 4'b0011;
rom[4'b1101] = 4'b0010;
rom[4'b1110] = 4'b0001;
rom[4'b1111] = 4'b0000;
87
end
7. Thiết kế ROM-RAM
88
Bài tập 21. Viết code verilog mô tả RAM 1K x 8, kiểm tra
nhập và xuất dữ liệu là các mã ASCII của A, B, C,D,
E,1,2,3,4,5 tại các địa chỉ 51h 60h
a. vẽ sơ đồ kết nối phần cứng
b. viết code và mô phỏng kiểm tra kết quả
Bài tập 22. Viết code verilog mô tả phần cứng thực hiện
phép tính x2, với x là số nhị phân 3 bit. Kết quả phép tính
được lưu trữ trong ROM
a. vẽ sơ đồ kết nối phần cứng
b. viết code và mô phỏng kiểm tra kết quả
Bài tập 23. Viết code verilog mô tả phần cứng thực hiện
phép tính cộng hai số nhị phân 3 bit A và B. Kết quả phép
tính được lưu trữ trong RAM và xuất ra ngõ ra
a. vẽ sơ đồ kết nối phần cứng
b. viết code và mô phỏng kiểm tra kết quả