FPGA日常1:101序列检测器

采用三段式状态机,将组合逻辑与时序逻辑分开

第一部分描述状态转移

第二部分描述状态转移条件

第三部分描述输出

module fsm (
input clk,
input rst_n,
input x,
output z


);

reg [1:0]	current_state;
reg [1:0]	nstate;

always @ (posedge clk or negedge rst_n)
if(!rst_n)
current_state<=S0;
else
current_state<=nstate;

parameter S0=4'b0001;
parameter S1=4'b0010;
parameter S2=4'b0100;
parameter S3=4'b1000;

always @(x or current_state) begin
case (current_state)

S0:begin
   if(x==1)
   nstate<=S1;
   else
   nstate<=S0;
   end

S1:begin
   if(x==0)
   nstate<=S2;
   else
   nstate<=S1;
   end

S2:begin
   if(x==1)
   nstate<=S3;
   else
   nstate<=S0;
   end
   
S3:begin
   if(x==1)
   nstate<=S1;
   else
   nstate<=S2;
   end
   
default:begin
   nstate<= S0;
   end
                                   
								
endcase
                               end
 always@(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
		z<=1'b0;
                  end
				  
	    else begin
		if(nstate==S3)
		z<=1'b1;
		else
		z<=1'b0;
		      end
			  
			  
			  
			  
endmodule

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 01101011 序列检测器FPGA 代码示例: ```verilog module seq_detector ( input clk, input reset, input data, output reg detected ); reg [7:0] state; parameter IDLE = 8'b00000000; parameter S0 = 8'b00000001; parameter S1 = 8'b00000010; parameter S2 = 8'b00000101; parameter S3 = 8'b00001011; parameter S4 = 8'b00010110; parameter S5 = 8'b00101100; parameter S6 = 8'b01011001; parameter S7 = 8'b10110010; always @(posedge clk) begin if (reset) begin state <= IDLE; detected <= 0; end else begin case (state) IDLE: begin if (data) begin state <= S0; end end S0: begin if (!data) begin state <= IDLE; end else begin state <= S1; end end S1: begin if (data) begin state <= S2; end else begin state <= IDLE; end end S2: begin if (!data) begin state <= IDLE; end else begin state <= S3; end end S3: begin if (data) begin state <= S4; end else begin state <= IDLE; end end S4: begin if (!data) begin state <= IDLE; end else begin state <= S5; end end S5: begin if (data) begin state <= S6; end else begin state <= IDLE; end end S6: begin if (!data) begin state <= IDLE; end else begin state <= S7; end end S7: begin if (!data) begin detected <= 1; end state <= IDLE; end endcase end end endmodule ``` 这个代码使用一个有 8 个状态的有限状态机来检测 01101011 序列。当检测到序列时,会将 detected 输出置为 1。注意,在每个状态之间都需要进行条件判断,以确定下一个状态。如果输入数据与期望的序列不匹配,则状态会回到 IDLE。这样可以保证在输入错误数据时,状态机可以重新开始检测序列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值