目录

题目1:Fsm onehot(热编码的有限状态机)

题目2:Fsm ps2(ps/2数据包解析器)

题目3:Fsm ps2data(ps/2数据包解析器和数据路径)


题目1:Fsm onehot(热编码的有限状态机)

给定以下状态机,具有 1 个输入和 2 个输出:

假设此状态机使用单热编码,其中状态[0]通过状态[9]分别对应于状态S0和S9。除非另有指定,否则输出为零。

实现状态机的状态转换逻辑输出逻辑部分(但不是状态触发器)。在状态[9:0]中,您将获得当前状态,并且必须产生next_state[9:0]和两个输出。通过检查假设一热编码来推导逻辑方程。(测试平台将使用非一个热输入进行测试,以确保您不会尝试执行更复杂的操作)。

模块声明

module top_module(input in,input [9:0] state,output [9:0] next_state,output out1,output out2);

提示:一热状态转换逻辑的逻辑方程可以通过查看状态转换图的边缘来推导。

根据状态流程图写出逻辑关系,输出也是一样的道理。

module top_module(input in,input [9:0] state,output [9:0] next_state,output out1,output out2);parameter s0 =4'd0,s1 = 4'd1,s2 = 4'd2,s3 = 4'd3,s4 = 4'd4,s5 = 4'd5,s6 = 4'd6,s7 = 4'd7,s8 = 4'd8,s9 = 4'd9;//状态逻辑assign next_state[s0] = !in &( state[s0] | state[s1] | state[s2] | state[s3] | state[s4] | state[7] | state[s8] | state[s9]);assign next_state[s1] = in &( state[s0] | state[s8] | state[s9]);assign next_state[s2] = in &( state[s1]);assign next_state[s3] = in & state[s2] ;assign next_state[s4] = in & state[s3] ;assign next_state[s5] = in & state[s4] ;assign next_state[s6] = in & state[s5] ;assign next_state[s7] = in & (state[s6] | state[7]);assign next_state[s8] = !in & state[s5] ;assign next_state[s9] = !in & state[s6] ;//输出逻辑assign out1 = state[8]|state[9];assign out2 = state[7]|state[9];
endmodule

仿真结果:

题目2:Fsm ps2(ps/2数据包解析器)

PS/2 鼠标协议发送长度为 3 个字节的消息。但是,在连续字节流中,消息的开始和结束位置并不明显。唯一的指示是,每个三字节消息的第一个字节始终具有 bit[3]=1(但其他两个字节的位 [3] 可能是 1 或 0,具体取决于数据)。

我们想要一个有限的状态机,当给定输入字节流时,它将搜索消息边界。我们将使用的算法是丢弃字节,直到我们看到一个位[3]=1的字节。然后,我们假设这是消息的字节 1,并在收到所有 3 个字节(完成)后发出接收消息的信号。

FSM 应在成功接收到每条消息的第三个字节后立即在周期内发出信号。

一些时序图来解释所需的行为

在无差错条件下,每三个字节形成一条消息:

发生错误时,搜索字节 1:

请注意,这与 1xx 序列识别器不同。此处不允许使用重叠序列:

模块声明

module top_module(input clk,input [7:0] in,input reset,    // Synchronous resetoutput done);

代码编写如下:

module top_module(input clk,input [7:0] in,input reset,    // Synchronous resetoutput done); //reg [1:0] state,next_state;parameter s0 = 2'd0,s1 = 2'd1,s2 = 2'd2,s3 = 2'd3;// State transition logic (combinational),组合逻辑always @(*)begincase(state)s0:begin;if(!in[3])next_state = s0;elsenext_state = s1;ends1: next_state = s2;s2: next_state = s3;s3:beginif(!in[3])next_state = s0;elsenext_state = s1;endendcaseend// State flip-flops (sequential),时序逻辑always @(posedge clk)beginif(reset)state <= s0;elsestate <= next_state;end// Output logic,输出逻辑assign done = (state==s3);endmodule

题目3:Fsm ps2data(ps/2数据包解析器和数据路径)

另请参见:PS/2 数据包解析器。

现在,您已经有了一个状态机,它将识别 PS/2 字节流中的三字节消息,请添加一个数据路径,该数据路径还将在收到数据包时输出 24 位(3 字节)消息(out_bytes[23:16] 是第一个字节,out_bytes[15:8] 是第二个字节,依此类推)。

每当断言完成信号时,out_bytes都需要有效。您可以在其他时间输出任何内容(即,不要在乎)。

模块声明

module top_module(input clk,input [7:0] in,input reset,    // Synchronous resetoutput [23:0] out_bytes,output done);

分析:观察所给的图例,当done=1,in位1时,输出24位才有效。当in为1,done为1,输出out——bytes才依次从高8位,中8位,低8位输出。当done为0时,不关心输出。

代码如下:

module top_module(input clk,input [7:0] in,input reset,    // Synchronous resetoutput [23:0] out_bytes,output done); //reg [1:0] state,next_state;parameter [1:0] s0 = 2'd0,s1 = 2'd1,s2 = 2'd2 ,s3 = 2'd3;// FSM from fsm_ps2always @(*)begincase(state)s0:beginif(!in[3])next_state = s0;elsenext_state = s1;ends1:next_state = s2;s2:next_state = s3;s3:beginif(!in[3])next_state = s0;elsenext_state = s1;endendcaseend// New: Datapath to store incoming bytes.always @(posedge clk)beginif(reset)state <= s0;elsestate <= next_state ;endalways @(posedge clk)beginif(next_state == s1) beginout_bytes[23:16] <= in;endelse if(next_state == s2)beginout_bytes[15:8] <= in;endelse if(next_state == s3)beginout_bytes[7:0] <= in;endelse beginout_bytes <= 24'b0;endendassign done = (state == s3);endmodule

仿真结果如下:

HDLBITS笔记35:独热编码状态机,ps/2数据包解析器,ps/2数据包和数据路径相关推荐

  1. Python下数值型与字符型类别变量独热编码(One-hot Encoding)实现

    1 OneHotEncoder 2 pd.get_dummies   在数据处理与分析领域,数值型与字符型类别变量的编码是不可或缺的预处理操作.本文基于Python下OneHotEncoder与pd. ...

  2. 学习笔记 | 独热编码(One-Hot Encoding)

    最近学习机器学习,接触到独热编码相关内容,参考了一些资料,加上自己的思考,做出了如下总结. 一.什么是独热编码 独热编码,即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个 ...

  3. NLP学习笔记6--Lecture/语言模型/预处理/独热编码/word2vec/文本特征工程

    语言模型用来判断:是否一句话从语法上通顺 先分词  然后算出联合概率 怎么算? chain rule 条件很长的时候 会遇到一个问题 sparsity 数据的稀疏性 用马尔科夫假设  最简单的假设 之 ...

  4. 字符标签转数字编码、独热编码 及独热编码转数字编码

    有些数据集给的标签是字符串形式,比如wisdm,在放进网络之前,需要转为数字型的编码 这可以通过pd.Categorical(a).codes实现 如 import numpy as np impor ...

  5. 循环神经网络的实现(独热编码,梯度裁剪)

    参考8.5. 循环神经网络的从零开始实现 - 动手学深度学习 2.0.0 documentation 参考循环神经网络(MLP-->RNN)_流萤数点的博客-CSDN博客 我们可以训练一个基于循 ...

  6. 独热编码(One-Hot Encoding)介绍、代码实现应用与优缺点

    一.独热编码(One-Hot Encoding)介绍 One-hot在数字电路中被用来表示一种特殊的位元组合,该字节里,仅容许单一位元为1,其他位元都必须为0.之所以称为one-hot就是因为只能有一 ...

  7. 数据预处理之独热编码(One-Hot)

    1.前言 在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等. 这些特征值并不是连续的,而是离散的,无序的.通常我们需要对其进行特征数字化. 那什么是特征数字化呢 ...

  8. R语言构建xgboost模型:基于叶子索引衍生出新的特征并进行独热编码(one-hot encoding)之后构建新的模型、比较加入叶子索引特征的模型的分类性能提升

    R语言构建xgboost模型:基于叶子索引衍生出新的特征并进行独热编码(one-hot encoding)之后构建新的模型.比较加入叶子索引特征的模型的分类性能提升 目录

  9. R语言构建xgboost模型:使用xgboost模型训练tweedie回归模型,特征工程(dataframe转化到data.table、独热编码、缺失值删除、DMatrix结构生成)

    R语言构建xgboost模型:使用xgboost模型训练tweedie回归模型,特征工程(dataframe转化到data.table.独热编码.缺失值删除.DMatrix结构生成) 目录

最新文章

  1. 改变2020年及未来的8大人工智能趋势
  2. 通信系统中对眼图的理解(二)
  3. Oracle找出需要建立索引的表
  4. LabelImg 影像標註工具使用教學,製作深度學習用的資料集
  5. Python+django网页设计入门(10):分页显示
  6. Real Estate Photography: Exterior at Twilight 房地产摄影:暮光之城 Lynda课程中文字幕
  7. Unigui使用IconFont图标
  8. excel表格打印每页都有表头_EXCEL打印小技巧:如何打印出每张纸上都有表头标题的表格?...
  9. 息县装修“茶几的选择”
  10. html居中小圆点●,圆点怎么打_居中小圆点怎么打出来_电脑常识_中华康网
  11. 将汉字转换为拼音:pypinyin.pinyin()
  12. 基于单片机的自动浇花灌溉系统设计(#0417)
  13. 存储术语中的LUN概念
  14. 蛮力法之百鸡百钱问题
  15. ffmpeg压缩视频
  16. RTKLIB_trans_all
  17. 【CSS练习】IT修真院--练习3-简单界面
  18. iPhone开发背景
  19. 德语环境下 小数点格式化时数字格式异常问题
  20. 穷举法:一道爱因斯坦的数学题

热门文章

  1. 气雾栽培计算机控制系统,丽水市农林院农业智能化快繁中心,气雾栽培,气雾培,鸟巢温室,克隆,植物克隆,克隆技术,植物非试管快繁技术,鱼菜共生,丽水农林院...
  2. zeek(bro) 脚本学习 三
  3. 国四摩托车ODB2接口图和豪爵铃木GSX250R ODB2接口图
  4. 如何修改聚合后的数据的index
  5. 2021-08-23王汕8.23现货黄金晚间行情走势分析,期货原油实时趋势交易策略
  6. 目标检测 YOLO v3 训练 人脸检测模型
  7. 物联网前景广阔 但美国断网事件敲响安全警钟
  8. Unity网络开发实践
  9. C# 导出 Excel 的各种方法总结
  10. 实验40:CCNA综合实验训练2(期末考试)