重庆网站推广公司哪家好,产品设计怎么写,职业生涯规划大赛内容,做电影网站侵权专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点#xff0c;刷题网站用的是牛客网 题目要求检测a的序列#xff0c;a为单bit输入#xff0c;每个时刻可能具有不同的值#xff0c; 当连续的六个输入值符合目标序列表示序列匹配#xff0c;当六个输入值的… 专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点刷题网站用的是牛客网 题目要求检测a的序列a为单bit输入每个时刻可能具有不同的值 当连续的六个输入值符合目标序列表示序列匹配当六个输入值的一个或多个不符合则表示序列不匹配。 值得注意的是题目要求以六位数据为一组不同于常见的序列检测要求检测重复序列在画状态转移图时要注意例如第一位不匹配不应该返回到初始状态去进行第一位的判断因为此时的输入是第二位数值题目要求不对该数值做判断而需要等到六个时钟周期之后即第七位数据第二组数值的第一位再判断是否匹配目标序列的第一位。 timescale 1ns/1ns
module sequence_detect(input clk,input rst_n,input data,output reg match,output reg not_match);// 011100reg [3:0] pstate, nstate ; // 当前状态、下一状态parameter idle 4b0,s1 4d1,s2 4d2,s3 4d3,s4 4d4,s5 4d5,s6 4d6,sf1 4d7, sf2 4d8,sf3 4d9, sf4 4d10,sf5 4d11, sf6 4d12 ;always (posedge clk or negedge rst_n) begin if (~rst_n) pstate idle ; else pstate nstate ; endalways (pstate or data) begin // 对应状态转移图case (pstate) idle : if (data 0) nstate s1 ; //0else nstate sf1 ; s1 : nstate data ? s2 : sf2 ; //1s2 : nstate data ? s3 : sf3 ; //1s3 : nstate data ? s4 : sf4 ; //1s4 : nstate data ? sf5 : s5 ; //0s5 : nstate data ? sf6 : s6 ; //0s6 : nstate data ? sf1 : s1 ; sf1 : nstate sf2 ;sf2 : nstate sf3 ;sf3 : nstate sf4 ;sf4 : nstate sf5 ;sf5 : nstate sf6 ;sf6 : nstate data ? sf1 : s1 ;default :nstate idle ; endcaseendalways (pstate or data or rst_n) begin // 输出if (!rst_n) begin match 1b0 ; not_match 1b0 ; endelse if (pstate s6) begin match 1b1 ;not_match 1b0 ; endelse if (pstate sf6) begin match 1b0 ; not_match 1b1 ; endelse begin match 1b0 ; not_match 1b0 ; endendendmodule