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

【芯片设计- RTL 数字逻辑设计入门 11.1 -- 状态机实现 移位运算与乘法 1】

文章目录

    • 移位运算与乘法
      • 状态机简介
      • SystemVerilog中的测试平台
      • VCS 波形仿真
    • 阻塞赋值和非阻塞赋值
      • 有限状态机(FSM)与无限状态机的区别

本篇文章接着上篇文章【芯片设计- RTL 数字逻辑设计入门 11 – 移位运算与乘法】 继续介绍,这里使用状态机来实现。

移位运算与乘法

已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效)
在这里插入图片描述

在这里插入图片描述

状态机简介

在Verilog中实现状态机通常包括三个主要部分:状态声明状态转换输出逻辑。状态机可以是"Moore"或"Mealy"类型,区别在于输出是仅由当前状态决定(Moore),还是由当前状态和输入决定(Mealy)。

以下是一个 错误的 Moore 状态机的 Verilog 代码示例:

module moore_state_machine( input clk, input rstn, output reg done );// 状态声明 
localparam [1:0] S_IDLE = 2'b00, S_START = 2'b01, S_DONE = 2'b10;// 状态寄存器 
reg [1:0] current_state, next_state;// 状态转换逻辑 
always @(posedge clk or posedge reset) begin if (!rstn) begindone = 0; current_state <= S_IDLE; end else begin current_state <= next_state; end 
end// 下一个状态和输出逻辑 
always @(*) begin case (current_state) S_IDLE: begin if (start) begin next_state = S_START;end end S_START: begin // 执行一些操作... next_state = S_DONE; end S_DONE: begin done = 1'b1; next_state = S_IDLE; end default: next_state = S_IDLE; endcase 
endendmodule 

此外,还需要注意以下几点:

  • 开始状态,这个状态通常都是做一些信号的初始化,然后再执行下一个状态;
  • 结束状态,也就是最后一个状态,这时需要回到最开始的状态;
  • default 的情况,通常都是回到开始状态。

SystemVerilog中的测试平台

以下是上述状态机的SystemVerilog测试平台(testbench)代码示例:

module tb_moore_state_machine; // 测试平台信号 reg clk, reset, done; // 实例化状态机模块 moore_state_machine uut( .clk(clk), .reset(reset), .done(done) ); // 时钟生成 always #5 clk = ~clk; // 测试序列 initial begin // 初始化信号 clk = 0; rstn = 0; #10; // 释放复位 reset = 1; #30; // 断言检查状态机是否正确完成 assert (done === 1'b1) else $error("状态机未正确完成。"); // 仿真结束 $finish; 
end 
endmodule 

VCS 波形仿真

在这里插入图片描述
所以可以看出来仿真结果并不是预期中的,这里主要是由于什么问题导致的?答案是阻塞赋值非阻塞赋值,接下来对它进行详细介绍。

阻塞赋值和非阻塞赋值

always 语句块中, Verilog 语言支持两种类型的赋值: 阻塞赋值和非阻塞赋值。 阻塞赋值使用
=” 语句; 非阻塞赋值使用“<=” 语句。

阻塞赋值: 在一个“begin…end” 的多行赋值语句, 先执行当前行的赋值语句, 再执行下一行的赋值语句。

非阻塞赋值: 在一个“begin…end” 的多行赋值语句, 在同一时间内同时赋值。

beginc = a;d = c + a;
end
beginc <= a;d <= c + a;
end

上面两个例子中, 第1个例子是阻塞赋值, 程序会先执行第 1 行, 得到结果后再执行第 2 行。第2个例子是非阻塞赋值, 两行的赋值语句是同时执行的。

组合逻辑中应使用阻塞赋值“=” , 时序逻辑中应使用非阻塞赋值“<=” 。 可以将这个规则牢牢记住, 按照这一规则进行设计绝对不会发生错误。

对代码做了如下两处修改(将阻塞赋值修改wield非阻塞赋值,同时检测任意信号变化):
在这里插入图片描述
仿真波形图如下:
在这里插入图片描述

如果再将 “下一个状态和输出逻辑” 中的 always @(*) begin 修改为always @(posedge clk or posedge reset) begin 之后则会出现仿真失败,波形图如下:
在这里插入图片描述
不太清楚是什么原因导致的这个问题!!!

有限状态机(FSM)与无限状态机的区别

有限状态机(FSM)

  • 有限状态机具有一个定义良好的状态集,这个集合是有限的。
  • 通常包括状态、转换、输入和(可选的)输出。
  • FSM可以是确定性的(每个状态和输入组合对应一个唯一的后继状态)也可以是非确定性的(一个状态和输入组合可以对应多个后继状态)。
  • FSM广泛用于硬件设计、协议实现、解析器和其他工程应用。

无限状态机

  • 理论上,无限状态机拥有无限多个状态,但这在实际硬件设计中不是可行的,因为硬件资源是有限的。
  • 在软件中,无限状态机可能通过数据结构和不断变化的状态信息来模拟无限状态的概念。
  • 无限状态机通常是指在概念模型中可能具有无限状态的系统,如某些类型的自动机或计算模型。

在实际硬件设计中,我们通常处理的是有限状态机。无限状态机更多地是计算理论的一部分,用于研究计算能力和复杂性等问题。

相关文章:

【芯片设计- RTL 数字逻辑设计入门 11.1 -- 状态机实现 移位运算与乘法 1】

文章目录 移位运算与乘法状态机简介SystemVerilog中的测试平台VCS 波形仿真 阻塞赋值和非阻塞赋值有限状态机&#xff08;FSM&#xff09;与无限状态机的区别 本篇文章接着上篇文章【芯片设计- RTL 数字逻辑设计入门 11 – 移位运算与乘法】 继续介绍&#xff0c;这里使用状态机…...

MongoDB系列:管道操作:聚合阶段操作符(二)

MongoDB系列&#xff1a;管道操作&#xff1a;聚合阶段操作符&#xff08;二&#xff09; 聚合阶段操作符介绍 本节只编写了个人认为可能用到的操作符&#xff0c;详细更多的操作符以及使用注意事项请前往MongoDB官网。 $match 过滤匹配数据。 // 插入数据 db.orders.inse…...

C++ //练习 5.12 修改统计元音字母的程序,使其能统计以下含有两个字符的字符序列的数量:ff、fl和fi。

C Primer&#xff08;第5版&#xff09; 练习 5.12 练习 5.12 修改统计元音字母的程序&#xff0c;使其能统计以下含有两个字符的字符序列的数量&#xff1a;ff、fl和fi。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /****…...

C语言-----自定义类型-----结构体枚举联合

结构体和数组一样&#xff0c;都是一群数据的集合&#xff0c;不同的是数组当中的数据是相同的类型&#xff0c;但是结构体中的数据类型可以不相同&#xff0c;结构体里的成员叫做成员变量 结构体类型是C语言里面的一种自定义类型&#xff0c;我们前面已经了解到过int,char,fl…...

elasticsearch下载及可视化工具下载使用

elasticsearch下载及配置、启动 一、下载 Download Elasticsearch | Elastic 二、启动 双击bat即可。 出现如下说明启动成功&#xff1a; 访问测试&#xff1a; 三、注意 &#xff08;1&#xff09;因为es启动默认端口是&#xff1a;9200,所以需要检查此端口是否被占用。…...

vim常用命令以及配置文件

layout: article title: “vim文本编译器” vim文本编辑器 有三种模式: 命令模式 文本模式, 末行模式 vim命令大全 - 知乎 (zhihu.com) 命令模式 插入 i: 切换到输入模式&#xff0c;在光标当前位置开始输入文本。 a: 进入插入模式&#xff0c;在光标下一个位置开始输入文…...

2024年的VUE2下的无效指令npm install --save vue-i18n

vue官网已经声明了不再维护vue2, vue-i18n安装依赖的时候就只接安装vue3的vue-i18, 直接报错&#xff1a; > npm install --save vue-i18n npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: yudao-ui-admin…...

计算机视觉主要知识点

计算机视觉是指利用计算机和算法来解析和理解图片和视频中的内容。这是一个跨学科领域&#xff0c;融合了计算机科学、图像处理、机器学习和模式识别等多方面的技术。以下是一些计算机视觉入门的基本知识点&#xff1a; 图像基础&#xff1a; 像素&#xff1a;图片的最基本组成…...

python 基础知识点(蓝桥杯python科目个人复习计划35)

今日复习计划&#xff1a;阶段总结&#xff08;新年贺礼&#xff09; 1.python简介&#xff08;定义&#xff0c;优点&#xff0c;缺点&#xff0c;应用领域&#xff09; python&#xff1a;一种广泛使用的解释型&#xff0c;高级和通用的编程语言 python极简&#xff0c;生…...

使用HTML、CSS和JavaScript来创建一个粒子效果,粒子会跟随鼠标点击位置生成

文章目录 一、粒子效果二、JavaScript三、HTML四、CSS五、热门文章 一、粒子效果 以下是一个简单的示例&#xff0c;使用HTML、CSS和JavaScript来创建一个粒子效果&#xff0c;粒子会跟随鼠标点击位置生成&#xff1a; <!DOCTYPE html> <html> <head><t…...

优质项目追踪平台一览:助力项目管理与监控

项目追踪平台是现代项目管理中不可或缺的工具&#xff0c;它可以帮助团队高效地跟踪和管理项目进度、任务和资源分配。在当今快节奏的商业环境中&#xff0c;有许多热门的项目追踪平台可供选择。 本文总结了当下热门的项目追踪平台&#xff0c;供您参考~ 1、Zoho Projects&…...

Docker下安装GitLab

极狐GitLab Docker 镜像 | 极狐GitLab 安装所需最小配置 内存至少4G 系统内核至少3.10以上 uname -r 命令可以查看系统内核版本 安装Docker 1.更新 yum源 yum update 2.安装依赖(如果在操作第三步的时候提示yum-config-manager 未找到命令 就安装下面依赖) yum instal…...

2024/2最新升级ChatGPT Plus的方法

2024年2月最新升级方法&#xff1a;ChatGPT Plus全方位体验指南 随着2024年2月的到来&#xff0c;ChatGPT Plus迎来了全新的升级。对于追求更高效率和更强大功能的用户来说&#xff0c;升级至ChatGPT Plus无疑是提升工作和学习体验的关键。在本指南中&#xff0c;我将一步一步…...

github和gitee

github GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub。 github可以给提交的代码打上标签&#xff0c;方便版本的迭代和回退&#xff0c;也是一个存储代码的仓库 github工作区 gitee是gitHub的…...

3秒实现无痛基于Stable Diffusion WebUI安装ComfyUI!无需重复安装环境!无需重复下载模型!安装教程

标题略有夸张的表达了接下来这一套确实很简单&#xff0c;相较于直接下载或者通过秋叶包更新而言。大大节省磁盘空间&#xff0c;和下载时间。 这篇教程不需要你有&#xff1a; 代码基础。都是复制粘贴就完事。魔法。 这篇教程默认你已经有&#xff1a; 1. 本地能够正常使用…...

【UE】游戏运行流程的简单理解

流程图 官方的游戏流程图&#xff1a; 一般顺序为初始化引擎、创建并初始化 GameInstance、加载关卡&#xff0c;最后开始游戏。 总的来说就是&#xff1a; 开始游戏-》游戏实例-》关卡-》游戏模式-》玩家控制器-》Pawn、玩家状态、HUD、UMG&#xff08;可有可无&#xff09; …...

【数据分析】Excel中的常用函数公式总结

目录 0 引用方式0.1 相对引用0.2 绝对引用0.3 混合引用0.4 3D引用0.5 命名引用 1 基础函数1.1 加法、减法、乘法和除法1.2 平均数1.3 求和1.4 最大值和最小值 2 文本函数2.1 合并单元格内容2.2 查找2.3 替换 3 逻辑函数3.1 IF函数3.2 AND和OR函数3.3 IFERROR函数 4 统计函数4.1…...

ESLint prettier 配置代码风格

环境同步&#xff1a; 1、ESlint&#xff0c;开启保存自动修复 配置文件 .eslintrc.cjs prettier 风格配置 https://prettier.io 使用单引号 不使用分号 每行宽度至多80字符 不加对象|数组最后逗号 换行符号不限制&#xff08;win mac 不一致&#xff09; vue组件名称…...

涤生大数据实战:基于Flink+ODPS历史累计计算项目分析与优化(上)

涤生大数据实战&#xff1a;基于FlinkODPS历史累计计算项目分析与优化&#xff08;一&#xff09; 1.前置知识 ODPS&#xff08;Open Data Platform and Service&#xff09;是阿里云自研的一体化大数据计算平台和数据仓库产品&#xff0c;在集团内部离线作为离线数据处理和存…...

jvm一级缓存

1、利用JVM缓存。脱离redis。 2、导包&#xff0c;springboot自带此包。如没有可以导&#xff1a;com.google.guava:guava:20.0的包。 3、直接上代码&#xff1a; package com.leo.cache;import com.alibaba.fastjson.JSONObject; import com.google.common.cache.Cache; im…...

Linux应用健康端点实战指南

Linux应用健康端点实战指南本文面向具备一定 Linux 基础的技术人员&#xff0c;围绕应用健康端点展开&#xff0c;重点讨论健康接口、依赖检查和负载均衡摘除。在中级运维和系统管理工作中&#xff0c;这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交织在…...

C语言实现终端菜单系统:从字符串解析到表驱动设计

1. 项目概述&#xff1a;为什么我们需要一个终端菜单系统&#xff1f;在嵌入式开发、服务器运维或者任何需要在纯命令行终端环境下工作的场景里&#xff0c;我们打交道最多的就是一个“黑框框”。这个黑框框&#xff0c;也就是终端&#xff0c;功能强大但交互原始。每次调试、测…...

【Java实战】Java 实现 Base64 文件批量压缩为 ZIP

一、前言在实际项目开发中&#xff0c;经常遇到这样的场景&#xff1a;前端上传多个文件后以 Base64 格式存储&#xff0c;或者从数据库读取多个 Base64 编码的文件&#xff0c;需要将这些文件打包成 ZIP 压缩包供用户下载。本文分享一个实用的 Java ZIP 压缩工具类二、应用场景…...

【NotebookLM要点提取黄金法则】:20年AI工具实战总结的5大避坑指南与3步精准萃取法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM要点提取方法论全景概览 NotebookLM 是 Google 推出的面向研究者与知识工作者的 AI 原生笔记工具&#xff0c;其核心能力在于对用户上传文档&#xff08;PDF、TXT、Google Docs&#xff09;进…...

别让你的AI模型‘偏心’:用Python实战解决机器学习公平性问题(附代码)

别让你的AI模型‘偏心’&#xff1a;用Python实战解决机器学习公平性问题&#xff08;附代码&#xff09; 在信贷审批系统中&#xff0c;女性申请者的通过率比男性低23%&#xff1b;在招聘算法中&#xff0c;35岁以上候选人的简历筛选通过率骤降40%——这些真实案例揭示了一个残…...

Android项目集成CH340串口驱动:从官方Demo到体温检测模块的完整配置流程

Android项目集成CH340串口驱动&#xff1a;从官方Demo到体温检测模块的完整配置流程 在医疗设备、工业控制等物联网场景中&#xff0c;Android设备与外围硬件通过串口通信的需求日益增长。CH340作为一款高性价比的USB转串口芯片&#xff0c;因其稳定性和广泛兼容性成为许多硬件…...

毫米波雷达3D重建技术:挑战与RFconstruct系统创新

1. 毫米波雷达3D重建技术概述在自动驾驶感知系统中&#xff0c;毫米波雷达因其独特的物理特性正扮演着越来越关键的角色。与激光雷达和摄像头相比&#xff0c;工作在76-81GHz频段的毫米波雷达具有穿透雾霾、雨雪的能力&#xff0c;且不受光照条件影响&#xff0c;这使其成为全天…...

3分钟快速上手:Windows实时语音转文字工具TMSpeech完整使用指南

3分钟快速上手&#xff1a;Windows实时语音转文字工具TMSpeech完整使用指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录手忙脚乱吗&#xff1f;是否曾因错过重要信息而懊恼&#xff1f;今天我要向…...

NotebookLM脑机接口部署避坑指南:TensorRT加速失效、电极位移漂移补偿、低信噪比场景下的9种fallback策略

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM脑机接口研究 NotebookLM 是 Google 推出的基于用户自有文档进行深度理解与推理的 AI 助手&#xff0c;虽其官方定位并非直接面向脑机接口&#xff08;BCI&#xff09;领域&#xff0c;但其底层架构…...

杰理之把音量调到最高后暂停蓝牙音乐,再按播放后,音量会变小问题处理参考【篇】

由于苹果手机音量等级只有16级&#xff0c;当近端耳机音量调超过16级后&#xff08;比如20级&#xff09;...