题意整理

本题要求根据题目提供的状态转换图实现同步时序电路,要求使用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