捕获数据中的某个序列---verilog
捕获数据中的某个序列---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的更多相关文章
- BarTender数据中的转义符序列知识讲解
Datamatrix是二维码的一个成员,广泛用于商品的防伪.统筹标识.如果为 Data Matrix 条形码指定的“符号类型”不是 ECC 200,则将会启用“字符集”选项.Data Matrix 也 ...
- fastx_toolkit去除测序数据中的接头和低质量的reads
高通量测序数据下机后得到了fastq的raw_data,通常测序公司在将数据返还给客户之前会做"clean"处理,即得到clean_data.然而,这些clean_data是否真的 ...
- winpcap使用之捕获数据包
第一种方法,调用回调函数 #include "pcap.h" /* packet handler 函数原型 */ void packet_handler(u_char *param ...
- winPcap_5_打开适配器并捕获数据包
知道如何获取适配器的信息了,那我们就开始一项更具意义的工作,打开适配器并捕获数据包.编写一个程序,将每一个通过适配器的数据包打印出来. 打开设备的函数是 pcap_open(). (Open a ge ...
- winPcap_6_不用回调方法捕获数据包
用 pcap_next_ex() 函数代替 _5_ 中的 pcap_loop()函数: pcap_loop()函数是基于回调的原理来进行数据捕获,这是一种精妙的方法,并且在某些场合中,它是一种很好的选 ...
- Android,使用Json发送数据中,使用的Java转义字符 KanKan原创
kankan原创 与php后台发送数据的时候.要求用到这样的格式. private void sendJson(){ //初始化自己定义的handler CashHandler handler = n ...
- winPcap编程之不用回调方法捕获数据包(五 转)
这一次要分析的实例程序跟上一讲非常类似(“打开适配器并捕获数据包”),略微不同的一点是本次将pcap_loop()函数替换成了pcap_next_ex()函数.本节的重点也就是说一下这两个函数之间的差 ...
- winPcap编程之打开适配器并捕获数据包(四 转)
在贴源码之前先介绍一个将要用到的很重要的函数--pcap_open(),下面是pcap_open()在remote-ex.h中的声明: pcap_t *pcap_open(const char *so ...
- Python3+pyshark捕获数据包并保存为文件
一.直接使用wireshark捕获数据包并保存为文件 可以使用wireshark通过图形界面的操作来实现捕获数据包并保存为文件. wireshark默认捕获的数据包保存为临时文件,如果最后退出时不选择 ...
随机推荐
- Linux "ls -l"文件列表权限详解 【转】
1.使用 ls -l 命令 执行结果如下(/var/log) : drwxr-x--- 2 root adm 4096 2013-08-07 11:03 apache2 ...
- http协议发送post请求
package post; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamR ...
- 剑指Offer 60. 把二叉树打印成多行 (二叉树)
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目地址 https://www.nowcoder.com/practice/445c44d982d04483b04a54f ...
- Python爬虫--简单的单词查询
Refer to: https://github.com/gaopu/Python/blob/master/Dict.py 本程序参考自上面Github连接 该程序功能是输入一个单词可以给出这个单词的 ...
- 关于QQ屏蔽某些文件上传一些有意思的事
起因是因为某鱼事件... 资源倒是找了,可是因为TX的屏蔽文件上传.文件通过几次改名之后也没能上传成功(想想也没那么简单). 然后某神就写了上面那串代码实现上传.具体思想是:绕过文件摘要算法(hash ...
- Vue慕课网音乐项目随手记--node代理及数据抓取
1.抓取数据 链接 https://y.qq.com/portal/playlist.html Parameters 通过上图能看到,qq音乐通过设置了refer和host来保护接口. 那么怎么才 ...
- Linux系统环境下Tomcat8、httpd、mysql8开机自启动配置
Linux系统环境下Tomcat8.httpd.mysql8开机自启动配置: 相关命令:chkconfig 参考链接:https://jingyan.baidu.com/article/6525d4b ...
- C语言-第4次作业得分
作业链接:https://edu.cnblogs.com/campus/hljkj/CS201801/homework/2523 作业链接:https://edu.cnblogs.com/campus ...
- p132程序代码解析
1. long before = System.currentTimeMillis(); ...... long after = System.currentTimeMillis(); 解析:该两句 ...
- ztree模糊筛选展开选中节点
树呢是一个最简单的树,并没有做一异步加载,也就是一个筛选,然后跳到第一个符合删选的数据下,并且所有符合的都会被展开和选中.其中ztreeAry是一个模拟的本地数组json.在test.json中,如果 ...