【芯片设计- 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广泛用于硬件设计、协议实现、解析器和其他工程应用。

无限状态机

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计一个可以智能训练神经网络的流程

设计一个可以智能训练神经网络的流程,需要考虑以下几个关键步骤: 初始化参数:设定初始的batch size和learning rate,以及其他的神经网络参数。训练循环:开始训练过程,每次迭代更新网络的权重。监控loss:在每个训练周期(epoch)后,监控loss的变化情况。动态调整:根据l…

运放偏置电流Ibs消除方法-简单粗暴的使用电阻

1 电阻应用电阻之运放如何消除偏置电流的影响 我们会发现一个问题&#xff0c;或者前辈告诉我们无论是电压跟随或者正相比例还是其他运放应用电路&#xff0c;一定要在正相输入端串入一个电阻&#xff0c;而且这个电阻的值等于反向输入端反馈电阻网络的并联。 为什么要这么做…

C语言笔试题之求出三角形的最大周长

实例要求&#xff1a; 1、给定由一些正数&#xff08;代表长度&#xff09;组成的数组 nums &#xff1b;2、返回 由其中三个长度组成的、面积不为零的三角形的最大周长 &#xff1b;3、如果不能形成任何面积不为零的三角形&#xff0c;返回 0&#xff1b; 案例展示&#xff…

代码随想录算法训练营day14||二叉树part01、理论基础、递归遍历、迭代遍历、统一迭代

递归遍历 &#xff08;必须掌握&#xff09; 本篇将介绍前后中序的递归写法&#xff0c;一些同学可能会感觉很简单&#xff0c;其实不然&#xff0c;我们要通过简单题目把方法论确定下来&#xff0c;有了方法论&#xff0c;后面才能应付复杂的递归。 这里帮助大家确定下来递归…

Mobile ALOHA 2: An Enhanced Low-Cost Hardware for Bimanual Teleoperation

文章目录 1. Mobile ALOHA 11.1 项目地址 2. Mobile ALOHA 22.1 相关链接2.2 Whats upgraded in II ? Reference Stanford 最新家务机器人 1. Mobile ALOHA 1 Mobile ALOHA: Learning Bimanual Mobile Manipulation with Low-Cost Whole-Body Teleoperation 1.1 项目地址 htt…

C语言函数栈帧的创建和销毁(逐步分析)

什么是函数栈帧 我们在写C语言代码的时候&#xff0c;经常会把一个独立的功能抽象为函数&#xff0c;所以C程序是以函数为基本单位的。 那函数是如何调用的&#xff1f;函数的返回值又是如何返回的&#xff1f;函数参数是如何传递的&#xff1f;这些问题都和函数栈帧有关系。 …

基于AST实现一键自动提取替换国际化文案

背景&#xff1a;在调研 formatjs/cli 使用&#xff08;使用 formatjs/cli 进行国际化文案自动提取 &#xff09;过程中&#xff0c;发现有以下需求formatjs/cli 无法满足&#xff1a; id 需要一定的语义化&#xff1b; defaultMessage和Id不能直接hash转换&#xff1b; 需要…

STM32F1 - 启动文件startup_stm32f10x_hd.s

startup_stm32f10x_hd.s 1> 启动文件类型2> 启动文件干了点啥&#xff1f;2.1> 设置栈2.2> 设置堆2.3> 设置中断向量表2.4> 复位程序2.5> 中断服务函数2.6> 用户栈和堆的初始化 3> __main库函数 1> 启动文件类型 标准库中提供&#xff1a;启动文…

ThinkPad X201 经典小黑 折腾玩

前段时间&#xff0c;在折腾ThinkPad T430时&#xff0c;偶然看到了ThinkPad X200&#xff0c;一个12.1英寸的高端便携小本。 想当年&#xff0c;但那是总裁级别才能用的&#xff0c;应该是接近2万元&#xff0c;我们是一直用DELL的。 没想到的是&#xff0c;在海鲜市场上&am…

基于modbus rtu协议操作PLC的EPICS示例

硬件设备 本实验中使用到的设备如下&#xff1a; 1、S7-200 Smart SR20 PLC 作为受控设备&#xff0c;执行机构。 S7-200 Smart是西门子的一款小型PLC产品&#xff08;以下简称Smart系列&#xff09;。 Smart系列PLC是西门子公司经过大量调研&#xff0c;为中国小型自动化…

Javaweb之SpringBootWeb案例之登录校验功能的详细解析

2. 登录校验 2.1 问题分析 我们已经完成了基础登录功能的开发与测试&#xff0c;在我们登录成功后就可以进入到后台管理系统中进行数据的操作。 但是当我们在浏览器中新的页面上输入地址&#xff1a;http://localhost:9528/#/system/dept&#xff0c;发现没有登录仍然可以进…

五、优化日程(Optimize Your Schedule)

3. Optimize Your Schedule 三、优化日程 The right length of time for focus is the time you have available.If you only have half an hour to squeeze in on a side project, then that’s the time you have.If you can devote a block of four hours every morning, ma…

async 与 await(JavaScript)

目录捏 前言一、async二、await三、使用方法总结 前言 async / await 是 ES2017(ES8) 提出的基于 Promise 解决异步的最终方案。上一篇文章介绍了 回调地狱 与 Promise&#xff08;JavaScript&#xff09;&#xff0c;因为 Promise 的编程模型依然充斥着大量的 then 方法&#…

【力扣】查找总价格为目标值的两个商品,双指针法

查找总价格为目标值的两个商品原题地址 方法一&#xff1a;双指针 这道题和力扣第一题“两数之和”非常像&#xff0c;区别是这道题已经把数组排好序了&#xff0c;所以不考虑暴力枚举和哈希集合的方法&#xff0c;而是利用单调性&#xff0c;使用双指针求解。 考虑数组 pri…

可达鸭二月月赛——入门赛第四场(周三)题解

可达鸭二月月赛——入门赛第四场&#xff08;周三&#xff09;题解 博文作者&#xff1a;王胤皓 题目&#xff08;可达鸭学员应该能打开&#xff0c;打不开的题解里有题目简述&#xff09;题解(点击即可跳转&#xff0c;里面有我的名字)T1 小可喝水linkT2 \texttt{ }\texttt{ …

数据结构:双向链表

文章目录 1. 双向带头循环链表的结构2. 相关操作2.1 创建节点2.2 尾插2.3 头插2.4 打印2.5 尾删2.6 头删2.7 查找2.8 指定位置前/后插入2.9 删除指定位置的节点2.10 删除指定位置后的节点2.11 销毁链表 3.顺序表与链表区别 1. 双向带头循环链表的结构 与单链表不同的是&#xf…

详解计算机软件基本概念

软件基本概念 软件的定义 一个完整的计算机系统是由硬件系统和软件系统协同工作来完成某一给定的任务的。 只有硬件的计算机称为裸机&#xff0c;裸机必须安装了计算机软件后才可以完成各项任务。 从广义地讲&#xff0c;软件是指计算机程序、数据以及开发、使用和维护程序…

Python 视频转场特效处理笔记

本文参考Python-OpenCV 实现美图秀秀视频剪辑效果【特效】_opencv 多张图片 视频 特效-CSDN博客 最近研究了点python处理视频相关的东西&#xff0c;本文展示特效包括&#xff0c;竖向开幕/横向开幕&#xff0c;渐隐/渐显&#xff0c;推近/拉远&#xff0c;方形开幕&#xff0…

Excel——有效性、二级菜单联动

一、录入规范数据 1.手动输入序列录入有效性信息 选择需要录入有效性的所有单元格 选择【数据】——【有效性】——【有效性】 在【允许】输入的值之间选择【序列】 在【序列】输入框中输入想要选择的值&#xff0c;中间用逗号&#xff08;必须是英文逗号&#xff09;隔开 。…

Spring Authorization Server Spring Security密码加密

文章目录 一、修改密码编码器二、效果三、注意点1. RegisteredClient2. UserDetailsService 一、修改密码编码器 以BCryptPasswordEncoder举例。 直接将其注册成PasswordEncoder 的Bean即可。 Beanpublic PasswordEncoder passwordEncoder() {// 密码为明文方式 // ret…