捕获数据中的某个序列---verilog

状态变化图

先是检测序列,每当接收到cmp_equal信号时跳转到下一个状态,等待另外一个cmp_equal信号到来。

代码:

always @ *
case(current_state)
STATE_START:
if (cmp_equal)
next_state = STATE_ADF2;
else
next_state = STATE_START; //每当检测不到cmp_equal信号时,状态就跳转到STATE_START STATE_ADF2:
if (cmp_equal)
next_state = STATE_ADF3;
else
next_state = STATE_START; //同上 STATE_ADF3:
if (cmp_equal)
next_state = STATE_DID;
else
next_state = STATE_START; //同上 STATE_DID:
if (cmp_equal)
next_state = STATE_SDID;
else
next_state = STATE_START; //同上 STATE_SDID:
if (cmp_equal)
next_state = STATE_DC;
else
next_state = STATE_START; //同上 STATE_DC:
if (cmp_equal)
next_state = STATE_UDW0;
else
next_state = STATE_START; //同上 STATE_UDW0:
next_state = STATE_UDW1; //解出所需要的数据 STATE_UDW1:
next_state = STATE_UDW2; //解数据 STATE_UDW2:
next_state = STATE_UDW3; //解数据 STATE_UDW3:
next_state = STATE_CS; STATE_CS:
next_state = STATE_START; default: next_state = STATE_START;
endcase

状态机状态调转模块采用的是组合逻辑。

always @ (posedge clk or posedge rst)
if (rst)
current_state <= STATE_START;
else if (ce)
current_state <= next_state;

状态输出模块:

always @ *
begin
// Unless specifically assigned in the case statement, all FSM outputs
// are given the values assigned here.
ld_byte1 = 'b0; //数据解码使能信号
ld_byte2 = 'b0;
ld_byte3 = 'b0;
ld_byte4 = 'b0;
ld_cs_err = 'b0;
clr_cs = 'b0;
cmp_mux_sel = MUX_SEL_000; //数据比对选择信号 case(current_state) STATE_START: clr_cs = 'b1; //此状态比对的就是 000数据 STATE_ADF2: begin
cmp_mux_sel = MUX_SEL_3FF; //此状态比对的就是 3FF数据
clr_cs = 'b1;
end STATE_ADF3: begin
cmp_mux_sel = MUX_SEL_3FF; // 比对3FF
clr_cs = 'b1;
end STATE_DID: cmp_mux_sel = MUX_SEL_DID; //比对DID数据 STATE_SDID: cmp_mux_sel = MUX_SEL_SDID; //比对SDID数据 STATE_DC: cmp_mux_sel = MUX_SEL_DC; //比对DC数据 STATE_UDW0: ld_byte1 = 'b1; //数据解码使能 STATE_UDW1: ld_byte2 = 'b1; STATE_UDW2: ld_byte3 = 'b1; STATE_UDW3: ld_byte4 = 'b1; STATE_CS: begin
cmp_mux_sel = MUX_SEL_CS; //比对数据CS
ld_cs_err = 'b1;
end
endcase
end

cmp_equal信号产生与数据比对模块生成代码:

always @ *                                //组合逻辑
case(cmp_mux_sel)
MUX_SEL_000: cmp_mux = 'h000;
MUX_SEL_3FF: cmp_mux = 'h3ff;
MUX_SEL_DID: cmp_mux = 'h241;
MUX_SEL_SDID: cmp_mux = 'h101;
MUX_SEL_DC: cmp_mux = 'h104;
MUX_SEL_CS: cmp_mux = {~checksum[], checksum};
default: cmp_mux = 'h000;
endcase assign cmp_equal = cmp_mux == vid_in; //实时监控vid_in数据,当符合条件时,产生cmp_equal信号
localparam [MUXSEL_MSB:]
MUX_SEL_000 = ,
MUX_SEL_3FF = ,
MUX_SEL_DID = ,
MUX_SEL_SDID = ,
MUX_SEL_DC = ,
MUX_SEL_CS = ;

捕获数据中的某个序列---verilog的更多相关文章

  1. BarTender数据中的转义符序列知识讲解

    Datamatrix是二维码的一个成员,广泛用于商品的防伪.统筹标识.如果为 Data Matrix 条形码指定的“符号类型”不是 ECC 200,则将会启用“字符集”选项.Data Matrix 也 ...

  2. fastx_toolkit去除测序数据中的接头和低质量的reads

    高通量测序数据下机后得到了fastq的raw_data,通常测序公司在将数据返还给客户之前会做"clean"处理,即得到clean_data.然而,这些clean_data是否真的 ...

  3. winpcap使用之捕获数据包

    第一种方法,调用回调函数 #include "pcap.h" /* packet handler 函数原型 */ void packet_handler(u_char *param ...

  4. winPcap_5_打开适配器并捕获数据包

    知道如何获取适配器的信息了,那我们就开始一项更具意义的工作,打开适配器并捕获数据包.编写一个程序,将每一个通过适配器的数据包打印出来. 打开设备的函数是 pcap_open(). (Open a ge ...

  5. winPcap_6_不用回调方法捕获数据包

    用 pcap_next_ex() 函数代替 _5_ 中的 pcap_loop()函数: pcap_loop()函数是基于回调的原理来进行数据捕获,这是一种精妙的方法,并且在某些场合中,它是一种很好的选 ...

  6. Android,使用Json发送数据中,使用的Java转义字符 KanKan原创

    kankan原创 与php后台发送数据的时候.要求用到这样的格式. private void sendJson(){ //初始化自己定义的handler CashHandler handler = n ...

  7. winPcap编程之不用回调方法捕获数据包(五 转)

    这一次要分析的实例程序跟上一讲非常类似(“打开适配器并捕获数据包”),略微不同的一点是本次将pcap_loop()函数替换成了pcap_next_ex()函数.本节的重点也就是说一下这两个函数之间的差 ...

  8. winPcap编程之打开适配器并捕获数据包(四 转)

    在贴源码之前先介绍一个将要用到的很重要的函数--pcap_open(),下面是pcap_open()在remote-ex.h中的声明: pcap_t *pcap_open(const char *so ...

  9. Python3+pyshark捕获数据包并保存为文件

    一.直接使用wireshark捕获数据包并保存为文件 可以使用wireshark通过图形界面的操作来实现捕获数据包并保存为文件. wireshark默认捕获的数据包保存为临时文件,如果最后退出时不选择 ...

随机推荐

  1. pytest自动化3:fixture之conftest.py实现setup

    出处:https://www.cnblogs.com/yoyoketang/p/9390073.html 前言: 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作 ...

  2. VMware三种网络介绍

    前言 很多人安装虚拟机的时候,经常遇到不能上网的问题,而vmware有三种网络模式,对初学者来说也比较眼花聊乱,今天我就来基于虚拟机3种网络模式,帮大家普及下虚拟机上网的背景知识.(博文原创自http ...

  3. vue 获取当前时间

    timeNow () { return moment().utc().format('YYYY年MM月DD日') + ' ' + moment().utc().format('dddd')}

  4. WEB学习笔记2-结构组织和文件命名

    常用的前端文件的组织结构: .js(放置javascript代码) .lib(放置框架javascript文件) .custom.js .css(放置CSS样式代码) .lib(放置框架CSS文件) ...

  5. cobbler批量化安装系统

  6. vim撤销与反撤销

    按esc进入一般模式之后,u按键则为撤销上一步操作,ctrl+r则为反撤销操作

  7. python 各种开源库

    测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. 链接 sel ...

  8. 创建数组必须指定数组数目之new运算符避免这种限制

    typeName arrayName[arraySize] short months[12]; 表达式arraySize指定元素数目,他必须是整型常数或const值,也可以是常量表达式,即其中所有的值 ...

  9. 关于java的scanner类

    java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 首先使用Scanner类时候需要导包: scanner类的基本语法: Scanner类 ...

  10. AssetBundle-----资源包划分

    资源包划分 经常更新的资源放在一个单独的包里面,跟不经常更新的包分离;需要同时加载的资源放在一个包里面;其他包共享的资源放在一个单独的包里面;需要同时加载的小资源打包成一个包;对于一个同一个资源有两个 ...