HDLBits-Fsm serialdata
在许多(较旧的)串行通信协议中,每个数据字节与一个起始位和一个停止位一起发送,以帮助接收器从比特流中划分字节。一种常见的方案是使用一个起始位(0)、8个数据位和1个停止位(1)。当无任何传输(空闲)时,线路也处于逻辑1。
设计一个有限状态机,当给定一个比特流时,它将识别何时正确接收字节。它需要识别起始位,等待所有8个数据位,然后验证停止位是否正确。如果停止位未按预期出现,则FSM必须等到找到停止位后再尝试接收下一个字节。
现在,您有了一个有限状态机,可以识别在串行位流中何时正确接收字节,添加一个数据路径,该路径将输出正确接收的数据字节。当done为1时,out_字节必须有效,否则为don-care。
请注意,串行协议首先发送最低有效位。
cnt都是从0开始的,上升沿加1
cnt计数器,计算接收的数据数量0-7 ,cnt=8时候判断in是否为停止位,来判断是否进入stop状态
n_state比c_state早一拍
如果使用c_state,那么会丢失第一个数字
module top_module(input clk,input in,input reset, // Synchronous resetoutput [7:0] out_byte,output done
); // Use FSM from Fsm_serialparameter idle =3'd0;parameter start =3'd1;parameter data =3'd2;parameter stop =3'd3;parameter hunluan =3'd4;reg [2:0] c_state,n_state;always@(posedge clk)beginif(reset)c_state<=idle;elsec_state<=n_state; endalways@(*)begincase(c_state)idle :n_state=(in==0)?start:idle;start :n_state=data;//没有接收到停止位,这个字节被抛弃//直到等到停止位,才开始下一个字节data :n_state=(cnt==8)?((in==1)?stop:hunluan):data;hunluan:n_state=(in)?idle:hunluan;stop :n_state=(in==0)?start:idle;endcase endreg [3:0]cnt;always@(posedge clk)beginif(reset)cnt<=0;else if(n_state==data)cnt<=cnt+1'b1;elsecnt<=0; //其他状态下cnt为0endassign done=(c_state==stop);// New: Datapath to latch input bits.reg [7:0]out;always@(posedge clk)beginif(reset)out<=0;else if(n_state==data)out[cnt]<=in;//out<={in,out[7:1]};elseout<=out;endassign out_byte=out;endmodule
我们想给串行接收器增加奇偶校验。奇偶校验在每个数据字节后添加一个额外的位。我们将使用奇数奇偶校验,其中接收到的9位中的1数必须是奇数。例如,101001011满足奇数奇偶校验(有5个1),但001001011不满足。
更改FSM和数据路径以执行奇数奇偶校验。仅当正确接收字节且奇偶校验通过时,才断言done信号。与串行接收器FSM一样,该FSM需要识别起始位,等待所有9位(数据和奇偶校验),然后验证停止位是否正确。如果停止位未按预期出现,则FSM必须等到找到停止位后再尝试接收下一个字节。
您可以使用以下模块来计算输入流的奇偶校验(这是一个带重置的TFF)。其预期用途是,应为其提供输入位流,并在适当的时间重置,以便其计算每个字节中的1位数。
两种做法
方法一:仍然使用n_state
方法二:状态start和data结合在一起,那么就可以使用c_state
奇偶校验的关键:奇偶模块的复位信号,在方法一n_state!=data时候有效,
方法二c_state!=start时候有效
注意:奇偶校验的前提是有停止位,在组合逻辑中判断
有停止位并且奇偶校验为1,那么进入stop状态
module top_module(input clk,input in,input reset, // Synchronous resetoutput [7:0] out_byte,output done
); //wire odd;// Modify FSM and datapath from Fsm_serialdata// Use FSM from Fsm_serialparameter idle =3'd0;parameter start =3'd1;parameter data =3'd2;parameter stop =3'd3;parameter hunluan =3'd4;reg [2:0] c_state,n_state;always@(posedge clk)beginif(reset)c_state<=idle;elsec_state<=n_state; endalways@(*)begincase(c_state)idle :n_state=(in==0)?start:idle;start :n_state=data;//没有接收到停止位,这个字节被抛弃//直到等到停止位,才开始下一个字节//没有接收到停止位,就不用谈及奇偶校验,停止位优先级高data :if(cnt==9)if(in)if(odd)n_state<=stop;elsen_state<=idle;elsen_state<=hunluan;elsen_state<=data;hunluan:n_state=(in)?idle:hunluan;stop :n_state=(in==0)?start:idle;endcase endreg [3:0]cnt;always@(posedge clk)beginif(reset)cnt<=0;else if(n_state==data)cnt<=cnt+1'b1;elsecnt<=0; //其他状态下cnt为0endassign done=(c_state==stop);// New: Datapath to latch input bits.reg [7:0]out;always@(posedge clk)beginif(reset)out<=0;else if((n_state==data)&&(cnt<=7))out[cnt]<=in;//out<={in,out[7:1]};elseout<=out;endassign out_byte=out;// New: Add parity checking.parity u_parity (.clk(clk),.reset(n_state!=data),.in(in),.odd(odd));
endmodule
module top_module(input clk,input in,input reset, // Synchronous resetoutput [7:0] out_byte,output done
); //wire odd;// Modify FSM and datapath from Fsm_serialdataparameter idle =2'd0;parameter start =2'd1;//parameter data =3'd2;parameter stop =2'd2;parameter hunluan =2'd3;reg [1:0] c_state,n_state;always@(posedge clk)beginif(reset)c_state<=idle;elsec_state<=n_state; endalways@(*)begincase(c_state)idle :n_state=(in==0)?start:idle;//没有接收到停止位,这个字节被抛弃//直到等到停止位,才开始下一个字节start :if(cnt==9)if(in)if(odd)n_state=stop;elsen_state=idle;elsen_state=hunluan;elsen_state=start; hunluan:n_state=(in)?idle:hunluan;stop :n_state=(in==0)?start:idle;endcase endreg [3:0]cnt;always@(posedge clk)beginif(reset)cnt<=0;else if(c_state==start)cnt<=cnt+1'b1;elsecnt<=0;end// New: Datapath to latch input bits.reg [7:0]out;always@(posedge clk)beginif(reset)out<=0;else if(c_state==start&&cnt<=4'd7)out[cnt]<=in;//out<={in,out[7:1]};elseout<=out;endassign out_byte=out;assign done=(c_state==stop);// New: Add parity checking.parity u_parity (.clk(clk),.reset(!(c_state==start)),.in(in),.odd(odd));endmodule
HDLBits-Fsm serialdata相关推荐
- verilog练习:hdlbits网站上的做题笔记(6)
前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...
- 【HDLBits 刷题 11】Circuits(7)Finite State Manchines 18-26
目录 写在前面 Finite State Manchines Fsm serialdata Fsm serialdp Fsm hdlc Design a Mealy FSM ece241 2014 q ...
- HDLBits 系列(36)Arbitration circuit implemented by FSM
目录 原题复现 审题 我的设计 设计解释 原题复现 原题复现: Consider the FSM described by the state diagram shown below: This FS ...
- HDLBits 系列(33)Sequence Recognition with Mealy FSM
目录 原题复现 状态转移图 我的设计 测试 原题复现 原题重现: Implement a Mealy-type finite state machine that recognizes the seq ...
- HDLBits 系列(27)孰对孰错 之 Fsm onehot?
目录 前言 原题复现 审题 我的设计 测试吐槽 最后的解决方案 前言 今天的这个问题,并没有满意的解决,路过的朋友,看出问题所在的,可以给个评论,谢谢. 原题复现 Fsm onehot 下面是一个最基 ...
- 【小罗的hdlbits刷题笔记5】基于fifo思想的fsm设计(Exams/2014 q3fsm)
在写状态机时,经常会有检测输入信号波形的情况,这种情况下,如果采用三段式状态机书写,则需要通过穷举法把输入信号所有可能存在的情况书写出来,在检测一到两个周期的输入信号时工作量不会很大,但是在检测多于三 ...
- HDLBits(十 三)学习笔记——Building Lager Circuits (1000计数器 —— FSM:One-hot logic equations独热码)
文章目录 1.Counter with period 1000 2.4-bit shift register and down counter(移位寄存器) 3.fsmseq 序列1101识别器 4. ...
- HDLBits 系列(34)Serial two's complememter(Mealy and Moore FSM)
目录 Mealy 状态机 原题复现 我的设计 Moore 状态机 原题复现 状态转移图 我的设计 Mealy 状态机 原题复现 原题复现: The following diagram is a Mea ...
- HDLBits 系列(24)进入FSM(有限状态机)的世界入口
目录 Fsm1 Fsm1s Fsm2 Fsm3comb Fsm1 This is a Moore state machine with two states, one input, and one o ...
- HDLBits 系列(0)专题目录
本篇博文是近来总结HDLBits系列的目录,点击蓝色字体即可进入查看具体内容. HDLBits 系列(1)从HDLBits中获取灵感,整顿自己,稳步前行 HDLBits 系列(2)如何避免生成锁存器? ...
最新文章
- linux c 链接详解4-共享库
- JavaScript基础一
- 第一次使用OD和IDA动静结合找出软件的注册算法
- Linux C 学习 单向链表
- 福州大学软件工程1916|W班 第10、11次作业成绩排名
- Spring的OpenEntityManagerInViewFilter
- 计算机英语名词解释之软件工程篇
- 电子与电工技术实验——集成运算放大器的应用
- emmc host调用mmc_rescan发现设备
- 浅谈核桃的栽培技术与种植管理方法
- 切换阿里巴巴开源镜像站镜像——Kali镜像
- Tungsten Fabric如何增强Kubernetes的网络性能
- 【2022吉比特】春招技术笔试A卷-AK题解
- 现代编程语言(3):zig
- Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operat
- JavaBean技术的应用——购物车
- (附源码)Python云顶之弈数据分析系统 毕业设计451545
- 视频融合云服务EasyCVR平台部署在云服务器中的配置关键点
- 江民:核心杀毒技术不过硬,再“云”也不安全
- 狐狸抓兔子(实验楼的练习)