题解 | #根据状态转移图实现时序电路#
根据状态转移图实现时序电路
http://www.nowcoder.com/practice/e405fe8975e844c3ab843d72f168f9f4
这是一个比较标准的状态机题目。
module seq_circuit(
input C ,
input clk ,
input rst_n,
output wire Y
);
reg [1:0] state, nstate;
reg Y_r;
// 当前状态切换,时序逻辑
always@(posedge clk or negedge rst_n) begin
if(~rst_n)
state <= 2'b00;
else
state <= nstate;
end
// 下个状态更新,组合逻辑
always@(*)
case(state)
2'b00 : nstate = C? 2'b01: 2'b00;
2'b01 : nstate = C? 2'b01: 2'b11;
2'b10 : nstate = C? 2'b10: 2'b00;
2'b11 : nstate = C? 2'b10: 2'b11;
default: nstate = 2'b00;
endcase
// 输出,组合逻辑
always@(*) begin
if(~rst_n)
Y_r <= 0;
else
case(state)
2'b00 : Y_r = C? 1'b0: 1'b0;
2'b01 : Y_r = C? 1'b0: 1'b0;
2'b10 : Y_r = C? 1'b1: 1'b0;
2'b11 : Y_r = C? 1'b1: 1'b1;
default: Y_r = 1'b00;
endcase
end
assign Y = Y_r;
endmodule
Verilog篇题解 文章被收录于专栏
本人对牛客网verilog篇题目一些理解