【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL21
根据状态转移表实现时序电路
描述
某同步时序电路转换表如下,请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。
电路的接口如下图所示。
输入描述:
input A ,
input clk ,
input rst_n
输出描述:
output wire Y
解题思路:
①首先根据题干中的状态转换表,给出次态和输出的卡诺图,如下所示:
表达式为,其中:
输出方程:
由于题干中所使用的触发器为D触发器,根据D触发器的特征方程,,得到其状态方程;
因此,激励方程为;
代码:
下面给出两种代码:
①寄存器未单独例化
`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)
Q0 <= 1'b0;
else
Q0 <= ~Q0 ;
end
always @(posedge clk or negedge rst_n)begin
if(!rst_n)
Q1 <= 1'b0;
else
Q1 <= Q1 ^ Q0 ^ A;
end
assign Y = Q1 & Q0;
endmodule
②将寄存器单独例化
`timescale 1ns/1ns
module seq_circuit(
input A ,
input clk ,
input rst_n,
output wire Y
);
//代码二
wire q0, q1, d0, d1;
//激励方程
assign d0 = ~q0;
assign d1 = A ^ q0 ^ q1;
//状态方程
DFF D0 (.d(d0), .clk(clk), .rst_n(rst_n), .q(q0));
DFF D1 (.d(d1), .clk(clk), .rst_n(rst_n), .q(q1));
//输出方程
assign Y = q0 & q1;
endmodule
//带复位端的D触发器
module DFF(input d,
input clk,
input rst_n,
output reg q);
always @(posedge clk or negedge rst_n) begin
if (!rst_n) q<= 1'b0;
else q<= d;
end
endmodule