赞
踩
某同步时序电路的状态转换图如下,→上表示“C/Y”,圆圈内为现态,→指向次态。
请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。
如图所示:
电路的接口如下图所示,C是单bit数据输入端。
如图所示:
- input C ,
- input clk ,
- input rst_n
output wire Y
本题提供的是状态转换图,可采用状态机实现,也可采用列激励方程、输出方程,进而用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
方法二
- `timescale 1ns/1ns
- module seq_circuit(
- input C ,
- input clk ,
- input rst_n,
-
- output wire Y
- );
- reg [1:0] state;
- always @(posedge clk or negedge rst_n)
- begin
- if(~rst_n)
- begin
- state <= 2'b00;
- end
- else
- begin
- case(state)
- 2'b00:
- begin
- if(C)
- state <= 2'b01;
- else
- state <= 2'b00;
- end
- 2'b01:
- begin
- if(C)
- state <= 2'b01;
- else
- state <= 2'b11;
- end
- 2'b10:
- begin
- if(C)
- state <= 2'b10;
- else
- state <= 2'b00;
- end
- 2'b11:
- begin
- if(C)
- state <= 2'b10;
- else
- state <= 2'b11;
- end
- endcase
- end
- end
-
- assign Y = (state == 2'b11)?1'b1:(state == 2'b10)?C:1'b0 ;
- endmodule
注:解题分析来源于网友,如有侵权,请告删之。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。