当前位置: 首页 > article >正文

【Verilog】实验八 有限状态机设计

一、实验目的

1. 掌握有限状态机原理和设计方法。

2. 掌握ModelSim和VIVADO工具软件。

3. 掌握基本的测试代码编写和FPGA开发板使用方法。

二、实验环境

1. 装有ModelSim和VIVADO的计算机。

2. Sword实验系统。

三、实验原理

有限状态机是时序电路的通用模型,任何时序电路都可以表示为有限状态机。在由时序电路表示的有限状态机中,各个状态之间的转移总是在时钟的触发下进行的,状态信息存储在寄存器中。因为状态的个数是有限的,所以称为有限状态机。有限状态机可以分为同步和异步两种,

    状态机的同步置位与复位:

always@(posedge clk )

    if(!rst)

    …

    状态机的异步置位与复位:

always@(posedge clk or negedge rst)

我们主要讨论有限同步状态机。有限状态机也是由两部分组成:存储电路和组合逻辑电路。存储电路用来生成状态机的状态,组合逻辑电路用来提供输出以及状态机跳转的条件。

根据输出信号的产生方式,有限状态机可以分为Mealy型和Moore型两类。Mealy型状态机的输出信号不仅与当前状态有关,而且还与输入信号有关,即可以把Mealy型有限状态机的输出看成是当前状态和输入信号的函数。Moore型状态机的输出仅与当前状态有关,即可以把Moore型有限状态的输出看成是当前状态的函数。

  1. 设计并实现掌握检测连续接收“1111”的Moore型和Mealy型状态机设计。

要求:画出Moore型和Mealy型的状态转移图,并编写代码在modelsim上仿真

xc7k160tffg676-1

top.v

`timescale 1ns / 1ps

module 	 TOP(input  wire clk_100mhz,
				 input  wire[15:0]SW,
				 output wire led_clk,
				 output wire led_clrn,
				 output wire led_sout,
				 output wire LED_PEN				
					);
				
    wire[31:0]Div;
    wire[15:0]LED_DATA;
    wire CK;
	
    clk_div       U8(clk_100mhz,1'b0,SW[2],Div,CK);
													
    LED_P2S 			  #(.DATA_BITS(16),.DATA_COUNT_BITS(4)) 
					      PLED (clk_100mhz,
									1'b0,
									Div[20],
									LED_DATA,
									led_clk,
									led_clrn,
									led_sout,
									LED_PEN
									);
	wire dout;
	seqdata1111_moore U1(Div[26],SW[1],SW[2],dout);
								
    assign LED_DATA = ~{dout,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,Div[26]};	
	
endmodule





		


seqdata1111_moore.v

module seqdata1111_moore(
	input wire clk,
	input wire clr,
	input wire din,
	output reg dout
	);
	reg[2:0] present_state,next_state;
	parameter s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100;
	always@(posedge clk)
		begin
			if(clr==1) present_state<=s0;
			else present_state<=next_state;
		end
	always@(*)
		begin
			case(present_state)
				s0: if(din==1) next_state=s1;
					else next_state=s0;
				s1: if(din==1) next_state=s2;
					else next_state=s0;
				s2: if(din==1) next_state=s3;
					else next_state=s0;
				s3: if(din==1) next_state=s4;
					else next_state=s0;
				s4: if(din==1) next_state=s4;
					else next_state=s0;
				default: next_state=s0;
			endcase
		end
	always@(*)
		begin
		if(present_state==s4) dout=1;
		else dout=0;
		end
endmodule


http://www.kler.cn/a/446252.html

相关文章:

  • 【学习总结|DAY021】Java 多线程
  • winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭
  • Mac 开机 一闪框 mediasharingd
  • 算法笔记—前缀和(动态规划)
  • C++ 引用的基本用法
  • visual studio 2022 c++使用教程
  • vue2实现word在线预览
  • Linux shell脚本用于常见图片png、jpg、jpeg、webp、tiff格式批量添加文本水印
  • 负载均衡+LNMP+rsync+NFS+lsync部署流程
  • QT exe文件设置图标【终极解决方案!】
  • word实现两栏格式公式居中,编号右对齐
  • 解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题
  • Java 单元测试中 JSON 相关的测试案例
  • 【C++算法】48.分治_归并_数组中的逆序对
  • uniapp 图片上传功能以及给图片添加水印
  • 数据分析实战—鸢尾花数据分类
  • 诸葛智能CTO文革:放大数据价值,释放金融营销原动力
  • Day29 C++ 模板
  • day-95 定长子串中元音的最大数目
  • 计算机视觉:原理、分类与应用
  • 头歌实训数据结构与算法-图的最短路径(第2关:多源最短路径)
  • 在 C# 中加载图像而不锁定文件
  • Xcode 文件缺失:Missing submodule xxx
  • 基于Spring Boot的大学就业信息管理系统
  • MPLS小实验:静态建立LSP
  • 【Spring】Spring的模块架构与生态圈—Spring MVC与Spring WebFlux