题解 | #根据状态转移表实现时序电路#
根据状态转移表实现时序电路
http://www.nowcoder.com/practice/455c911bee0741bf8544a75d958425f7
简析
本想着用状态机,不过题目要求使用D触发器,差点没想出来。
因为是D触发器,所以每个always
块简单控制一个变量。所以进一步地将原来的电路转换表拆分成三个真值表。和的状态受、和的影响,的状态受、的影响。
的真值表:
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
可以得出表达式
的真值表:
0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
可以得出表达式
的真值表:
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
可以得出表达式
代码
`timescale 1ns/1ns
module seq_circuit(
input A ,
input clk ,
input rst_n,
output wire Y
);
reg q0, q1;
always@(posedge clk or negedge rst_n) begin
if(~rst_n) begin
q1 <= 0;
end
else begin
q1 <= A ^ q0 ^ q1;
end
end
always@(posedge clk or negedge rst_n) begin
if(~rst_n) begin
q0 <= 0;
end
else begin
q0 <= ~q0;
end
end
assign Y = q0 & q1;
endmodule
Verilog篇题解 文章被收录于专栏
本人对牛客网verilog篇题目一些理解