西南交大EDA实验——Sequence Detector

本文介绍了西南交大EDA实验中的SequenceDetector设计,该设计能检测四种一致性数据序列:增量、递减和稳定。通过Mealy型状态机实现,根据MODE输入切换不同检测模式,并在满足条件时输出标志信号OUT_VALID和DATA_OUT。文章详细阐述了状态编码、状态转换逻辑以及输出信号的处理方法,并提供了testbench的编写思路。

一、实验内容及要求

1. 目的

在这里插入图片描述

设计一种能够根据配置模式检测四个一致性数据并输出标志的序列检测器。

·支持增量模式:可以检测到四个一致性递增的数据

·支持减少模式:可以检测到四个一致性递减的数据

·支持稳定模式:可以检测到四个一致性相同的数据

2. 说明

在这里插入图片描述
在这里插入图片描述

·文件名:SEQUENCE.v

·模块名:SEQ_DETECTOR

·I/O端口:

RST_B:位宽为1bit的输入。系统异步复位,低电平有效。

SYSCLK:位宽为1bit的输入。系统时钟

IN_VALID:位宽为1bit的输入。高电平有效。输入信号MODEDATA_IN只有在IN_VALID = 1的时候有效。当IN_VALID = 0时,MODEDATA_IN应被忽略,并且状态应与IN_VALID = 1时相同。

MODE:位宽为2bit的输入。检测模式,这个信号决定了检测模式。00:增量检测模式,其中四个一致性增长数据(如1,2,3,4或15,0,1,2)可以置OUT_VALID为逻辑1。01:递减检测模式,其中4个一致性递减数据(如5,4,3,2或0,15,14,13)可以置OUT_VALID为逻辑1。10:稳定检测模式,其中4个相同的数据(如0,0,0,0)可以置OUT_VALID为逻辑1。11:与IN_VALID=1作用相同。

DATA_IN:位宽为4bit的输入。输入数据,该信号只有在IN_VALID = 1并且MODE != 2’b11时有效。

OUT_VALID:位宽为1bit的输出。输出有效位,高电平有效。当根据检测模式接收到四个一致性数据是,该信号才生效。

DATA_OUT:位宽为4bit的输出。当OUT_VALID生效时,DATA_OUT应等于DATA_IN,其他情况都等于0。

3. 要求

在这里插入图片描述

4. 波形

在这里插入图片描述在这里插入图片描述

二、内容讲解及代码编写

首先,先把顶层模块的输入和输出写上。

module	SEQ_DETECTOR
(
    input   wire            SYSCLK      ,
    input   wire            RST_B       ,
    input   wire            IN_VALID    ,
    input   wire    [1:0]   MODE        , 
    input   wire    [3:0]   DATA_IN     ,
    
    output  reg             OUT_VALID   ,
    output  reg    [3:0]    DATA_OUT  
);
    
 
endmodule    

我们需要用到Mealy型状态机,先将需要的状态想好。初始状态S0,以增量模式(MODE=2’b00)为例,假设检测到第一个数0进入状态INCREMEN_STATE1,下一个检测到1进入状态INCREMENT_STATE2,再检测到2进入状态INCREMENT_STATE3,此时已经检测到3个增量,这时如果再检测到3,就要输出OUT_VALID = 1DATA_OUT,同时保持状态在INCREMENT_STATE3,因为1,2,3又是三个连续递增的序列,下一个数据如果是4,也可以构成一个递增的序列1,2,3,4。类似,我们还需要减少模式的状态DECREMENT_STATE1DECREMENT_STATE2 DECREMENT_STATE3和稳定模式的状态EQUAL_STATE1EQUAL_STATE2EQUAL_STATE3。因此我们共需要10个状态,对这10个状态进行编码:

parameter	S0      			= 4'd0  ,  
			INCREMEN_STATE1   	= 4'd1  ,   
			INCREMEN_STATE2   	= 4'd2  ,   
			INCREMEN_STATE3   	= 4'd3  ,   
			DECREMENT_STATE1   	= 4'd4  ,   
			DECREMENT_STATE2   	= 4'd5  ,   
			DECREMENT_STATE3   	= 4'd6  ,   
			EQUAL_STATE1   		= 4'd7  ,   
			EQUAL_STATE2   		= 4'd8  ,   
			EQUAL_STATE3   		= 4'd9  ;   

对状态进行编码后,我们就要考虑状态的转换了,状态转换就需要判断输入的序列是递增、递减还是相等的。如何判断呢?因为使用时序逻辑赋值,会使数据慢一个周期,这样可以比较输入的数据了。

reg	[3:0]	data_in_delay;
always@(posedge SYSCLK, negedge RST_B)
    begin
        if(!RST_B)
            data_in_delay <= 4'd0;
        else if(IN_V
### EDA实验资料与教程 EDA(Electronic Design Automation,电子设计自动化)作为现代电路设计的核心工具之一,在高校教学和工业应用中占据重要地位。对于学习者而言,获取高质量的实验资料和教程至关重要。 #### 1. 实验目的 西南交通大学的EDA实验——序列检测器Sequence Detector),旨在通过实际操作帮助学生掌握有限状态机的设计方法以及Verilog HDL编程技巧[^1]。该实验不仅涉及理论知识的学习,还强调动手能力的培养。 #### 2. 学习资源推荐 以下是几个常见的EDA实验资料下载途径: - **学校官网或实验室网站** 许多大学会公开其课程讲义、实验指导书等内容。例如,西南交通大学可能在其电子信息工程学院官网上提供《数字逻辑》或《VHDL/Verilog 设计基础》等相关材料。 - **开源平台** GitHub 是寻找项目案例的好地方。可以通过搜索关键词如 `eda sequence detector verilog` 找到其他院校学生的作业实现代码及其测试 benches。 - **在线教育平台** Coursera 和 edX 提供由顶尖学府开设的关于 FPGA 开发板使用的 MOOCs (Massive Open Online Courses),这些课程通常附带详细的 PDF 文件和技术文档支持学员完成家庭作业练习。 #### 3. 工具安装指南 为了顺利完成上述提到的各种仿真验证工作流,建议先配置好必要的开发环境: ```bash sudo apt-get update && sudo apt-get install git make gcc g++ tcl tk libffi-dev python3-pip -y pip3 install myhdl icestorm yosys nextpnr arachne-pnr ``` 以上命令适用于基于 Debian 的 Linux 发行版用户快速搭建所需的软件栈集合。 #### 4. 示例代码片段 下面展示了一个简单的 Moore 型 FSM 模型用于匹配特定比特串模式 "01": ```verilog module seq_det(input clk, input reset_n, input din, output reg match); parameter S_IDLE=2'b00,S_SAW_0=2'b01; always @(posedge clk or negedge reset_n) begin : state_logic if (!reset_n) current_state <= S_IDLE; else case(current_state) S_IDLE:if(din==1'b0)current_state<=S_SAW_0; else current_state<=S_IDLE; S_SAW_0:if(din==1'b1){match,current_state}={1'b1,S_IDLE}; else {match,current_state}={1'b0,S_IDLE}; endcase end endmodule ``` 此模块定义了一种状态转移机制来识别输入数据流中的目标子字符串实例。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

堂钰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值