首页 > 其他分享 >数电第8周周结_by_yc

数电第8周周结_by_yc

时间:2022-10-17 23:56:29浏览次数:44  
标签:周周结 状态 数电 检测 yc state 序列 parameter 输入

1、有限状态机的分类:

  • Moore型:输出仅与电路的状态有关;
  • Mealy型:输出与当前电路状态和当前电路输入有关。

2、有限状态机的描述方法:

  • 状态转换图:节点:状态(Moore输出);
          边:由一个状态转换为另一个状态的对应输入(Mealy)

  • 算法状态机:类似于流程图。

3、设计步骤:

  • S1、定类型;
  • S2、列状态+编码;
  • S3、画状态转换图;
  • S4、代码语言描述

4、状态转移图检查:

  • 完备性;
  • 互斥性。

设计案例:序列检测器

功能描述:设计一个“1101”的序列检测器,设\(d_{in}\)为数子码流输入,\(s_{out}\)为检出标记输出,高电平表示发现指定序列,低电平表示没有发现指令序列

A.Moore型
  • 状态+编码:
      S0:未检测到‘1’
      S1:检测到输入序列‘1’
      S2:检测到输入序列‘11’
      S3:检测到输入序列‘110’
      S4:检测到输入序列‘1101’
      共计5个状态,需要声明位宽为3的状态寄存器*2.

  • 状态转移图:

  • 代码语言描述:
module seqdet
	#(parameter s0=3'b000,
	parameter s1=3'b001,
	parameter s2=3'b010,
	parameter s3=3'b011,
	parameter s4=3'b100)
	(input clk, reset, din,
	output reg sout);
	reg [2:0] cur_state, next_state;

	always@(posedge clk)	begin
		if(reset)	cur_state <= s0;
		else		cur_state <= next_state;
	end

	always@(din, cur_state)	begin
		case(cur_state)
			s0:	begin
				if(din==1'b1)	next_state=s1;
				else		next_state=s0;
				end
			s1:	begin
				if(din==1'b1)	next_state=s2;
				else		next_state=s0;
				end
			s2:	begin
				if(din==1'b1)	next_state=s2;
				else		next_state=s3;
				end
			s3:	begin
				if(din==1'b1)	next_state=s4;
				else		next_state=s0;
				end
			s4:	begin
				if(din==1'b1)	next_state=s2;
				else		next_state=s0;
				end
		endcase
	end

	always@(cur_state)	begin
		if(reset)		sout=1'b0;
		else if(cur_state==s4)	sout=1'b1;
		else			sout=1'b0;
	end

endmodule
B.Mealy型
  • 状态+编码:
      由于Mealy型在边上即可进行输入,故无需S4状态:
      S0:未检测到‘1’
      S1:检测到输入序列‘1’
      S2:检测到输入序列‘11’
      S3:检测到输入序列‘110’
      共计4个状态,需要声明位宽为2的状态寄存器*2.

  • 状态转移图:

  • 代码语言描述:
module seqdet
	#(parameter s0=2'b00,
	parameter s1=2'b01,
	parameter s2=2'b10,
	parameter s3=2'b11)
	(input clk, reset, din,
	output reg sout);
	reg [2:0] cur_state, next_state;

	always@(posedge clk)	begin
		if(reset)	cur_state <= s0;
		else		cur_state <= next_state;
	end

	always@(cur_state, din)	begin
		case(cur_state)
			s0:	begin
				if(din==1'b1)	next_state=s1;
				else		next_state=s0;
				end
			s1:	begin
				if(din==1'b1)	next_state=s2;
				else		next_state=s0;
				end
			s2:	begin
				if(din==1'b1)	next_state=s2;
				else		next_state=s3;
				end
			s3:	begin
				if(din==1'b1)	next_state=s1;
				else		next_state=s0;
				end
		endcase
	end

	always@(posedge clk)	begin
		if(reset)			sout=1'b0;
		else if(cur_state==s3 && din)	sout=1'b1;
		else				sout=1'b0;
	end

endmodule

标签:周周结,状态,数电,检测,yc,state,序列,parameter,输入
From: https://www.cnblogs.com/Qzzz/p/16801173.html

相关文章

  • 数电第7周周结_by_yc
    一、通用双向移位寄存器:功能描述:  4位的双向移位寄存器,含控制输入端(ctrl)、串行输入端(Dsl、Dsr)、4个并行输入端和4个并行输出端,要求实现5种功能:异步置零、同步置数、......
  • PyCharm下载和安装教程(包含配置Python解释器)
    PyCharm是JetBrains公司(www.jetbrains.com)研发,用于开发 Python 的IDE开发工具。图1所示为JetBrains公司开发的多款开发工具,其中很多工具都好评如潮,这些工具可以......
  • Mac下配置Pycharm教程
    除非你是用记事本写代码,或者用vim写代码的大牛,那么推荐使用PyCharm编写Python代码。PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的......
  • 第二季:6CountDownLatch/CyclicBarrier/Semaphore使用过吗?【Java面试题】
    第二季:6CountDownLatch/CyclicBarrier/Semaphore使用过吗?【Java面试题】​​前言​​​​推荐​​​​6CountDownLatch/CyclicBarrier/Semaphore使用过吗?​​​​说明​​......
  • Potyczki Algorythmiczne 2011
    TrialRound:Tulips按题意模拟。#include<cstdio>constintN=15000;intn,ans=N,x,v[N+1];intmain(){scanf("%d",&n);while(n--){scanf("%d",&x);......
  • 初学者安装Anconda环境配置的pycharm教程
    1.Anaconda下载地址:Anaconda|IndividualEdition双击下载好的 Anaconda2-5.2.0-Windows-x86_64.exe文件,点击 Next 即可。点击 IAgree (我同意)Installfor:Just......
  • Verilog与数电[4]-点灯
    硬件SiPeedTang-Primer-20k开发板点灯[https://wiki.sipeed.com/hardware/zh/tang/tang-primer-20k/examples/led.html]candy1.v//点灯moduleled(inputClo......
  • Verilog与数电[3]-波形图
    保命声明:笔者在校属于中低水平学生,代码能力有限,若行文中有错漏之处欢迎大家指出。在线小工具在线波形图查看[https://wavedrom.com/editor.html]Verilog刷题网站[http......
  • DNS(Bind9) Anycast 数据中心部署 最终版
    DNS(Bind9)Anycast数据中心部署最终版问题点:现网使用的是windowsad域控加windowsdns的结构,支撑全网设备的加域和域名解析功能,但由于部分终端机不能动态更换dns服务器ip......
  • Pycharm一键选中多个东西(数据、函数等)进行修改、删除、替换
    Pycharm一键选中多个东西(数据、函数等)进行修改、删除、替换样例:1、Pycharm一键选中多个不同的东西(数据、函数、关键字等)进行修改替换操作办法:1)左手按住“Ctr”+“Shift”+......