verilog根据状态转移表实现电路BUAA集电

文章介绍了如何使用Verilog语言实现一个同步时序电路,涉及case语句、状态转移规则以及测试用例。电路根据输入A和复位信号rst_n的状态变化,通过Q1和Q0寄存器更新输出Y。测试bench部分给出了时序行为的示例和波形图的展示。
摘要由CSDN通过智能技术生成

1、问题描述:

某同步时序电路转换表如下,请使用verilog实现此同步时序电路。

image.png

模块名称和端口要求:

module name: seq_circuit
input ports: A, clk, rst_n(异步复位)
output ports: Y

样例波形:

43a58eb65c2a2c12695fa42b11f57b2.png

 2、verilog程序如下:

module seq_circuit(
input A,
input clk,
input rst_n,
output reg Y
);

reg Q1=0;
reg Q0=0;

always@(posedge clk,negedge rst_n)begin
if(!rst_n)begin
Y<=0;
Q0<=0;
Q1<=0;
end
else if(A==0)
case({Q1,Q0})
2'b00:begin Y<=0;Q1<=0;Q0<=1;end
2'b01:begin Y<=0;Q1<=1;Q0<=0;end
2'b10:begin Y<=1;Q1<=1;Q0<=1;end
2'b11:begin Y<=0;Q1<=0;Q0<=0;end
endcase
else if(A==1)
case({Q1,Q0})
2'b00:begin Y<=1;Q0<=1;Q1<=1;end
2'b01:begin Y<=0;Q1<=0;Q0<=0;end
2'b10:begin Y<=0;Q1<=0;Q0<=1;end
2'b11:begin Y<=0;Q1<=1;Q0<=0;end
endcase
end

endmodule

Q1Q0的下一状态为11时,即输出的Y=1; 因此case语句并不是与题目描述一一对应。

3、testbench:

module tb_seq_circuit();

reg A;
reg clk;
reg rst_n;
wire Y;

seq_circuit U(A,clk,rst_n,Y);

initial begin
A=0;rst_n=0; clk=0;
#10 A=0;rst_n=0; clk=1;
#5 A=0;rst_n=0; clk=0;
#5 A=0;rst_n=1; clk=1;
#5 A=0;rst_n=1; clk=0;
#5 A=0;rst_n=1; clk=1;
#5 A=0;rst_n=1; clk=0;
#5 A=0;rst_n=1; clk=1;
#5 A=0;rst_n=1; clk=0;
#5 A=1;rst_n=1; clk=1;
#5 A=1;rst_n=1; clk=0;
#5 A=1;rst_n=1; clk=1;
#5 A=1;rst_n=1; clk=0;
#5 A=1;rst_n=1; clk=1;
#5 A=1;rst_n=1; clk=0;
#5 A=1;rst_n=1; clk=1;
end

initial begin
   $dumpfile("test.vcd");
   $dumpvars(0);
end
endmodule

波形图:

 4、总结:

熟悉case语句和简单的时序电路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值