捕获数据中的某个序列---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默认捕获的数据包保存为临时文件,如果最后退出时不选择 ...
随机推荐
- 通过ajax提交表单上传文件
//这是看的大神的.//原地址:https://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html $("#sub" ...
- HttpInvoker客户端动态调用Demo
private static <T> T getHttpInvokerService(String serverUrl, Class<T> serviceInterface) ...
- WeX5学习笔记-02
1.安装wex5,下载地址 http://wex5.com WeX5是绿色免安装的,解压即可直接使用.注意:不能解压到含中文.空格和特殊字符 的目录下, 例如:Program Files,是不可以的, ...
- background属性冲突导致的部分浏览器背景图片不显示问题
前几天在项目中遇到了一个让人摸不着头脑的bug,测试说页面显示有点问题并发了截图, 正常的显示状态是这样 首先我自信地用自己的手机检查了一下,没有问题,问清楚后得知是UC浏览器中出现的,UC的内核是u ...
- BUAAOO P5-P7 Elevator Simulation
目录 Abstract Introduction Topic Request Elevator Analysis Reading Requests Coordinating Scheduling an ...
- 如何生成SSH key及查看SSH key
只适用于Mac和windows下的Git Bash操作界面. 一.检查本地是否有SSH Key存在 在终端输入 ls -al ~/.ssh 如果终端输出的是: No such file or dire ...
- 【oracle入门】SQL的命令动词
SQL的功能 命令动词 数据定义 CREATE,DROP,ALTER 数据操纵 SELECT,INSERT,UPDATE,DELETE 数据控制 CRANT,REVOKE
- 调试利器GDB(上)
什么是GDB: GDB应用: 静态分析工具与动态分析工具: GDB启动方式: GDB启动之后会有一个交互式的命令行,可以输入GDB特定的命令让GDB去工作. gdb test.out意思是这一次gdb ...
- 1. ReactJS基础(开发环境搭建)
本文主要介绍通过React官方提供的create-react-app脚手架进行开发环境的搭建. 1.安装node环境(安装过程这里不做介绍,可参考其他博文) 在cmd中输入node -v 如果可以看到 ...
- Lua实现Map
通过Lua中自带的table来实现一个Map,可以根据键值来插入移除取值 map = {} local this = map function this:new() o = {} setmetatab ...