设计一个序列检测功能的时序电路,如图所示。其输入信号有clr、clk、A、 B,输出信号Z。其中clk为时钟信号, clr是低电平有效的异步复位信号,A、B是输入数据信号。有一个二进制串行数据D0D1D2D3……Dx,以两位为一组顺序送入电路,D0送入A,D1送到B,以此类推。电路检测此串行数据中是否存在“01110”序列,每发现一个序列则在Z输出一个时钟周期宽度的高电平脉冲。注意相邻 “01110” 序列数据位不重叠。
1.状态图
根据题意可定义5种状态,需要3个触发器(3位编码)。
S0:初始状态。编码000。
S1:输入0。编码001。
S2:输入01。编码010。
S3:输入011。编码011。
S4:输入0111。编码100。
2. 三段式代码
主代码:
module detector_01110(input wire A,
B,
clk,
rst,
output reg Z);
reg[2:0] Current_state, Next_state;
parameter S0=3'b000, S1=3'b001, S2=3'b010, S3=3'b011, S4=3'b100;
always@(posedge clk, negedge rst)
begin
if(!rst)
Current_state<=S0;
else
Current_state<=Next_state;
end
always@(Current_state, A, B)
begin
case(Current_state)
S0: if(A==1&&B==1) Next_state=S0;
else if(A==0&&B==1) Next_state=S2;
else Next_state=S1;
S1: if(A==0&&B==1) Next_state=S2;
else if(A==1&&B==1) Next_state=S3;
else Next_state=S1;
S2: if(A==0&&B==1) Next_state=S2;
else if(A==1&&B==1) Next_state=S4;
else Next_state=S1;
S3: if(A==0&&B==0) Next_state=S1;
else if(A==0&&B==1) Next_state=S2;
else Next_state=S0;
S4: if(B==1) Next_state=S0;
else Next_state=S1;
endcase
end
always@(posedge clk, negedge rst)
begin
if(!rst) Z<=0;
else begin
case(Current_state)
S0,S1,S2:Z<=0;
S3:if(A==1&&B==0) Z<=1;
else Z<=0;
S4:if(A==0) Z<=1;
else Z<=0;
endcase
end
end
endmodule
测试代码(输入AB分别为10,11,01,11,01,10,11,10,00):
module detector_01110_tb ();
reg A,
B,
clk,
rst;
wire Z;
detector_01110 udetector_01110(
.A(A),
.B(B),
.clk(clk),
.rst(rst),
.Z(Z)
);
always #5 clk =!clk;
initial begin
clk=0;
rst=0;
A=0;
B=0;
#10 rst=1;
#5 A=1;
B=0;
#10 A=1;
B=1;
#10 A=0;
B=1;
#10 A=1;
B=1;
#10 A=0;
B=1;
#10 A=1;
B=0;
#10 A=1;
B=1;
#10 A=1;
B=0;
#20 A=0;
B=0;
$finish;
end
initial begin
$dumpfile("detector_01110.vcd");
$dumpvars() ;
end
endmodule
3.仿真结果
输入信号中出现两次“01110”,输出波形也输出两次高电平。由波形可知,该设计满足序列检测的要求。
4. 总结文章来源:https://www.toymoban.com/news/detail-522229.html
与常见的单输入序列检测器不同,本题要求设计的是双输入序列检测器,但分析和设计方法与单输入是一样的,都是先画状态图,再根据状态图写三段式代码,唯一区别在于要定义两个输入信号。文章来源地址https://www.toymoban.com/news/detail-522229.html
到了这里,关于“01110”双输入口序列检测器的Verilog设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!