lOMoARcPSD| 58778885
Họ và tên: Lê Xuân Trung.
MSSV: 23119219.
Lớp: Thứ 7, Tiết 10-12.
1) Thiết kế và mô phopnrg mach phát hiện chuỗi 1111 là dữ liệu nói tiếp. W
dữ liệu theo từng xung clk cạnh lên , nếu phát hiện chuỗi 1111 nối tiếp thì y
ở mức 1. - Sơ đồ trạng thái
- Code Verilog
`timescale 1ns / 1ps
module detector_1111 (
input clk, input reset,
input W, output reg y
);
parameter S0 = 2'b00,
lOMoARcPSD| 58778885
S1 = 2'b01,
S2 = 2'b10,
S3 = 2'b11;
reg [1:0] state, next_state; always
@(posedge clk or posedge reset) begin
if (reset) state
<= S0; else
state <= next_state; end
always @(*) begin
case (state)
S0: next_state = (W) ? S1 : S0;
S1: next_state = (W) ? S2 : S0;
S2: next_state = (W) ? S3 : S0;
S3: next_state = (W) ? S3 : S0;
default: next_state = S0; endcase
end
always @(*) begin if (state ==
S3 && W == 1)
y = 1;
else y
= 0; end
endmodule
- Testbench
lOMoARcPSD| 58778885
`timescale 1ns / 1ps module
Trung_detector_1111();
reg clk;
reg reset;
reg W;
wire y;
detector_1111 uut (
.clk(clk),
.reset(reset),
.W(W),
.y(y)
);
initial begin
clk = 0; forever
#10 clk = ~clk; end
initial begin reset = 1;
W = 0; #15; reset
= 0;
#20 W = 1;
#20 W = 1;
#20 W = 1;
lOMoARcPSD| 58778885
#20 W = 1;
#20 W = 1;
#20 W = 0;
#20 W = 1;
#20 W = 1;
#20 W = 1;
#20 W = 1; end
endmodule
kết quả:
Mạch đúng như yêu cầu
lOMoARcPSD| 58778885
2) Thiết kế và mô phỏng mạch đèn giao thông 2 ngõ ra cho 2 trục đèn tín hiệu,
thời gian cho mỗi đèn là tương ứng xanh 15s đỏ 20s vàng 5s.
- Code Verilog
module traffic_light_fsm (
lOMoARcPSD| 58778885
input clk, // Clock 1Hz (mỗi chu kỳ = 1s) input
rst, // Reset đồng bộ output reg [1:0] A, // Đèn A:
00-Đỏ, 01-Xanh, 10-Vàng output reg [1:0] B // Đèn B:
00-Đỏ, 01-Xanh, 10-Vàng
);
reg [1:0] state; // Trạng thái hiện tại reg
[5:0] timer; // Bộ đếm thời gian (0–63)
// Mã trạng thái
parameter S0 = 2'd0, // A: Xanh, B: Đỏ (15s)
S1 = 2'd1, // A: Vàng, B: Đỏ (5s)
S2 = 2'd2, // A: Đỏ, B: Xanh (15s)
S3 = 2'd3; // A: Đỏ, B: Vàng (5s)
always @(posedge clk or posedge rst) begin
if (rst) begin
state <= S0; timer
<= 0; end else begin
timer <= timer + 1;
case (state)
S0: if (timer == 15) begin state <= S1; timer <= 0; end
lOMoARcPSD| 58778885
S1: if (timer == 5) begin state <= S2; timer <= 0; end S2:
if (timer == 15) begin state <= S3; timer <= 0; end S3: if (timer ==
5) begin state <= S0; timer <= 0; end endcase end end
// Đèn hiển thị theo trạng thái (Moore)
always @(*) begin
case (state)
S0: begin A = 2'b01; B = 2'b00; end // A xanh, B đỏ
S1: begin A = 2'b10; B = 2'b00; end // A vàng, B đỏ
S2: begin A = 2'b00; B = 2'b01; end // A đỏ, B xanh
S3: begin A = 2'b00; B = 2'b10; end // A đỏ, B vàng
default: begin A = 2'b00; B = 2'b00; end endcase end
endmodule
- Testbench
module Trung_traffic_light_fsm();
reg clk = 0, rst = 1; wire [1:0] A,
B;
traffic_light_fsm uut (
.clk(clk),
.rst(rst),
.A(A),
.B(B)
);
// Clock 1Hz always
#500 clk = ~clk;
lOMoARcPSD| 58778885
initial begin
#1000 rst = 0; // nhả reset sau 1 chu kỳ
#100000
$finish; end endmodule

Preview text:

lOMoAR cPSD| 58778885
Họ và tên: Lê Xuân Trung. MSSV: 23119219. Lớp: Thứ 7, Tiết 10-12.
1) Thiết kế và mô phopnrg mach phát hiện chuỗi 1111 là dữ liệu nói tiếp. W là
dữ liệu theo từng xung clk cạnh lên , nếu phát hiện chuỗi 1111 nối tiếp thì y
ở mức 1. - Sơ đồ trạng thái - Code Verilog `timescale 1ns / 1ps module detector_1111 ( input clk, input reset, input W, output reg y ); parameter S0 = 2'b00, lOMoAR cPSD| 58778885 S1 = 2'b01, S2 = 2'b10, S3 = 2'b11;
reg [1:0] state, next_state; always
@(posedge clk or posedge reset) begin if (reset) state <= S0; else state <= next_state; end always @(*) begin case (state)
S0: next_state = (W) ? S1 : S0;
S1: next_state = (W) ? S2 : S0;
S2: next_state = (W) ? S3 : S0;
S3: next_state = (W) ? S3 : S0;
default: next_state = S0; endcase end
always @(*) begin if (state == S3 && W == 1) y = 1; else y = 0; end endmodule - Testbench lOMoAR cPSD| 58778885 `timescale 1ns / 1ps module Trung_detector_1111(); reg clk; reg reset; reg W; wire y; detector_1111 uut ( .clk(clk), .reset(reset), .W(W), .y(y) ); initial begin clk = 0; forever #10 clk = ~clk; end initial begin reset = 1; W = 0; #15; reset = 0; #20 W = 1; #20 W = 1; #20 W = 1; lOMoAR cPSD| 58778885 #20 W = 1; #20 W = 1; #20 W = 0; #20 W = 1; #20 W = 1; #20 W = 1; #20 W = 1; end endmodule kết quả:
Mạch đúng như yêu cầu lOMoAR cPSD| 58778885
2) Thiết kế và mô phỏng mạch đèn giao thông 2 ngõ ra cho 2 trục đèn tín hiệu,
thời gian cho mỗi đèn là tương ứng xanh 15s đỏ 20s vàng 5s. - Code Verilog module traffic_light_fsm ( lOMoAR cPSD| 58778885
input clk, // Clock 1Hz (mỗi chu kỳ = 1s) input
rst, // Reset đồng bộ output reg [1:0] A, // Đèn A:
00-Đỏ, 01-Xanh, 10-Vàng output reg [1:0] B // Đèn B: 00-Đỏ, 01-Xanh, 10-Vàng );
reg [1:0] state; // Trạng thái hiện tại reg
[5:0] timer; // Bộ đếm thời gian (0–63) // Mã trạng thái
parameter S0 = 2'd0, // A: Xanh, B: Đỏ (15s)
S1 = 2'd1, // A: Vàng, B: Đỏ (5s)
S2 = 2'd2, // A: Đỏ, B: Xanh (15s)
S3 = 2'd3; // A: Đỏ, B: Vàng (5s)
always @(posedge clk or posedge rst) begin if (rst) begin state <= S0; timer <= 0; end else begin timer <= timer + 1; case (state)
S0: if (timer == 15) begin state <= S1; timer <= 0; end lOMoAR cPSD| 58778885
S1: if (timer == 5) begin state <= S2; timer <= 0; end S2:
if (timer == 15) begin state <= S3; timer <= 0; end S3: if (timer ==
5) begin state <= S0; timer <= 0; end endcase end end
// Đèn hiển thị theo trạng thái (Moore) always @(*) begin case (state)
S0: begin A = 2'b01; B = 2'b00; end // A xanh, B đỏ
S1: begin A = 2'b10; B = 2'b00; end // A vàng, B đỏ
S2: begin A = 2'b00; B = 2'b01; end // A đỏ, B xanh
S3: begin A = 2'b00; B = 2'b10; end // A đỏ, B vàng
default: begin A = 2'b00; B = 2'b00; end endcase end endmodule - Testbench
module Trung_traffic_light_fsm();
reg clk = 0, rst = 1; wire [1:0] A, B; traffic_light_fsm uut ( .clk(clk), .rst(rst), .A(A), .B(B) ); // Clock 1Hz always #500 clk = ~clk; lOMoAR cPSD| 58778885 initial begin
#1000 rst = 0; // nhả reset sau 1 chu kỳ #100000 $finish; end endmodule