题意整理
本题要求根据题目提供的状态转换图实现同步时序电路,要求使用D触发器。
题解主体
本题提供的是状态转换图,可采用状态机实现,也可采用列激励方程、输出方程,进而用D触发器和组合逻辑电路实现。本题解采用第二种方案实现。
由状态转换图可得出,电路共4个状态,所以使用2个寄存器来实现状态的寄存。两个寄存器的输出为Q1和Q0,两个寄存器的输入为D1和D0。可列出状态转换表如下:
由状态转换表可列出激励方程如下:
输出方程如下:
根据激励方程和输出方程以及思路整理,关键电路如下:
将电路转换成Verilog代码描述如下:
reg Q1 ; reg Q0 ; always @(posedge clk or negedge rst_n)begin if(!rst_n) Q1 <= 1'b0; else Q1 <= (Q1 & (Q0 | C)) | (~Q1 & Q0 & ~C); end always @(posedge clk or negedge rst_n)begin if(!rst_n) Q0 <= 1'b0; else Q0 <= (~Q1 & (Q0 | C)) | (Q1 & Q0 & ~C); end assign Y = (C & Q1) | (Q1 & Q0);
参考答案
`timescale 1ns/1ns module seq_circuit( input C , input clk , input rst_n, output wire Y ); reg Q1 ; reg Q0 ; always @(posedge clk or negedge rst_n)begin if(!rst_n) Q1 <= 1'b0; else Q1 <= (Q1 & (Q0 | C)) | (~Q1 & Q0 & ~C); end always @(posedge clk or negedge rst_n)begin if(!rst_n) Q0 <= 1'b0; else Q0 <= (~Q1 & (Q0 | C)) | (Q1 & Q0 & ~C); end assign Y = (C & Q1) | (Q1 & Q0); endmodule