You are on page 1of 4

ĐHQG – ĐHBK Tp HCM – Khoa ĐĐT – BMĐT

Môn học: XLTHS với FPGA –HK172


GVPT: Hồ Trung Mỹ

Đáp án của Kiểm tra #02

1. Một mạch tổ hợp có hàm Boole:


F(A, B, C, D) = B’C + A’BD + AB’
Viết mã Verilog mô tả mạch dùng
a) mô hình luồng dữ liệu.
b) mô hình hành vi với phát biểu if . . . else . . . .
c) mô hình hành vi với phát biểu case
BG.
module KT02_1(A, B, C, D, F);
input A, B, C, D;
output F;
a) Mô hình luồng dữ liệu
assign F = (~B & C) | (~A & B & D) + (A & ~B);
b) Mô hình hành vi với if … else …
Ta có: F = B’C + A’BD + AB’ = B’(A + C) + BA’D
reg F;
always@(A or B or C or D)
if (B == 0)
F = A | C;
else
F = ~A & D;
c) Mô hình hành vi với case
Ta có: F(A,B, C,D) = B’C + A’BD + AB’ = Σm(2, 3, 5, 7, 8, 9, 10, 11)
reg F;
always@(A or B or C or D)
case({A, B, C, D})
2, 3, 5, 7, 8, 9, 10, 11: F = 1;
default: F = 0;
endcase;

endmodule

2. Cho trước mạch tuần tự đồng bộ sau:

a) Hãy tìm phương trình Boole của các biến trạng thái A+, B+ (chọn trạng thái là AB) và ngõ ra Z.
Từ đó suy ra bảng chuyển trạng thái của mạch này.
b) Viết mã Verilog cho bảng trạng thái từ a), ta cho thêm tín hiệu reset_n tích cực thấp để cho
FSM chạy từ trạng thái AB =00.

DSP-FPGA_172-KT#02_Đáp án – 1/4
BG.
a) Phương trình biến trạng thái: (JK FF: Q+ = JQ’ + K’Q)
A+ = JAA’ + KA’A = X.A’ + (X’ + B’)’.A = XA’ + XAB = X(A’ + AB) = X(A’ + B) = XA’ + XB
B+ = JBB’ + KB’B = XA.B’ + (X’)’. B = XAB’ + XB = X(AB’ + B) = X(A + B) = XA + XB
Phươnh trình ngõ ra:
Z = AB
Bảng chuyển trạng thái:
PS NS (A+B+)
State AB Z
X=0 X =1
S0 00 00 10 0
S1 01 00 11 0
S2 11 00 11 1
S3 10 00 01 0

b) Mã verilog
module KT02_2 (X, CLK, reset_n, Z);
parameter S0 = 'b00, S1 = 'b01, S2 = 'b11, S3 = 'b10; // Gán trạng thái với mã Gray
input X, CLK, reset_n;
output Z;
reg [1:0] state, nxtstate; // current and next state

// State transition
always @ (posedge CLK or negedge reset_n)
if (reset_n == 0) // (! reset_n)
state <= S0; // Initial state
else
state <= nxtstate;

// Find the next state


always @ (state or X)
begin
nxtstate = state;
case(state)
S0: nxtstate = (X == 0) ? S0 : S3;
S1: nxtstate = (X == 0) ? S0 : S2;
S2: nxtstate = (X == 0) ? S0 : S2;
S3: nxtstate = (X == 0) ? S0 : S1
// default: nxtstate = nxtstate;
endcase
end

// Output logic
assign Z = (state == S2);
endmodule

3. Ta cần thiết kế 1 mạch tuần tự đồng bộ có thể phát hiện chuỗi bit vào liên tiếp là 1101 (ngõ vào 1 bit
nối tiếp) và khi có phát hiện thì ngõ ra sẽ là 1. Hãy viết mã Verilog với
a) Máy trạng thái Moore.
b) Máy trạng thái Mealy.
BG.
a) Máy trạng thái Moore: Phát hiện chuỗi bit vào nối tiếp “1101”
Ta có giản đồ trạng thái sau:

DSP-FPGA_172-KT#02_Đáp án – 2/4
Mã verilog:
module KT02_3A (X, CLK, reset_n, Z);
parameter S0 = 'b000, S1 = 'b001, S2 = 'b011, S3 = 'b010, S4=’b110;
// Gán trạng thái với mã Gray

input X, CLK, reset_n;


output Z;
reg [2:0] state, nxtstate; // current and next state

// State transition
always @ (posedge CLK or negedge reset_n)
if (reset_n == 0) // (! reset_n)
state <= S0; // Initial state
else
state <= nxtstate;

// Find the next state


always @ (state or X)
begin
nxtstate = state;
case(state)
S0: nxtstate = (X == 0) ? S0 : S1;
S1: nxtstate = (X == 0) ? S0 : S2;
S2: nxtstate = (X == 0) ? S3 : S2;
S3: nxtstate = (X == 0) ? S0 : S4;
S4: nxtstate = (X == 0) ? S0 : S1;
// default: nxtstate = nxtstate;
endcase
end

// Output logic
assign Z = (state == S4);
endmodule

b) Máy trạng thái Mealy:


Ta có giản đồ trạng thái sau:

DSP-FPGA_172-KT#02_Đáp án – 3/4
Mã verilog:
module KT02_3B (X, clk, resetn, Z);
// Mealy machine for a "1101" sequence detection
input X, clk, resetn;
output Z; reg Z;
reg [1:0] pstate, nstate; //present and next states
parameter S0=2'b00, S1=2'b01, S2=2'b11, S3=2'b10;

// State transition
always @ (posedge CLK or negedge reset_n)
if (reset_n == 0) // (! reset_n)
state <= S0; // Initial state
else
state <= nxtstate;

// Find the next state


always @ (state or X)
begin
nxtstate = state;
case(state)
S0: nxtstate = (X == 0) ? S0 : S1;
S1: nxtstate = (X == 0) ? S0 : S2;
S2: nxtstate = (X == 0) ? S3 : S2;
S3: nxtstate = (X == 0) ? S0 : S1;
// default: nxtstate = nxtstate;
endcase
end

// Output logic
assign Z = (state == S3) && (X == 1);
endmodule

DSP-FPGA_172-KT#02_Đáp án – 4/4

You might also like