题解 | #根据状态转移表实现时序电路#
根据状态转移表实现时序电路
https://www.nowcoder.com/practice/455c911bee0741bf8544a75d958425f7
`timescale 1ns/1ns
module seq_circuit(
input A ,
input clk ,
input rst_n,
output wire Y
);
//状态定义
parameter S0 = 2'd0;
parameter S1 = 2'd1;
parameter S2 = 2'd2;
parameter S3 = 2'd3;
//状态寄存器定义
reg [1:0]curr_state;
reg [1:0]next_state;
//状态输出寄存器
reg Y_reg;
//组合逻辑描述状态转移条件
always@(*)begin
case(curr_state)
S0: next_state <= A? S3:S1;
S1: next_state <= A? S0:S2;
S2: next_state <= A? S1:S3;
S3: next_state <= A? S2:S0;
default: next_state <= S0;
endcase
end
//时序逻辑实现状态转移
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
curr_state <= S0;
else
curr_state <= next_state;
end
//组合逻辑描述输出
always@(*)begin
if(!rst_n)
Y_reg <= 0;
else if(curr_state == S3)
Y_reg <= 1;
else
Y_reg <= 0;
end
assign Y = Y_reg;
endmodule
查看26道真题和解析