Verilog基础:寄存器输出的两种风格

相关文章

Verilog基础icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482


        Verilog中的寄存器操作一般指的是那些对时钟沿敏感而且使用非阻塞赋值的操作。例如状态机中的状态转移,实际上就是一种寄存器操作,因为这相当于将下一状态的组合逻辑连接至寄存器的输入,如图一的Moore状态机所示。

图1 Moore型状态机

        对于这种的寄存器操作,三段式的描述方式清清晰明了地将组合逻辑和寄存器操作分离,所以被广泛接受的,如下所示。

//第一段,下一状态组合逻辑
always@(*) begincase (state)                     ***: next_state = ***;***: next_state = ***;endcase
end//第二段,状态转移时序逻辑
always @(posedge clk, negedge rst_n) beginif (!rst_n)     state <= ***;		             else state <= next_state;			
end//第三段,输出组合逻辑
always@(*) beginif(state == ***)out = ***;elseout = ***;
end

        但对于需要输出寄存的情况,就可能出现两种不同的描述寄存器操作的风格,一种是组合逻辑和寄存器操作分离,就像状态转移一样,另一种是将组合逻辑和寄存器操作混合在一起。下面是一个简单的例子。

//将输出组合逻辑和输出寄存分离
//第一段,下一状态组合逻辑
always@(*) begincase (state)                     ***: next_state = ***;***: next_state = ***;endcase
end//第二段,状态转移时序逻辑
always @(posedge clk, negedge rst_n) beginif (!rst_n)     state <= ***;		             else state <= next_state;			
end//第三段,输出组合逻辑
always@(*) beginif(state == ***)out = ***;elseout = ***;
end//第四段,输出寄存时序逻辑
always @(posedge clk, negedge rst_n) beginif (!rst_n)     out_r <= ***;		             else out_r <= out;			
end
endmodule
​
//将输出组合逻辑和输出寄存融合
//第一段,下一状态组合逻辑
always@(*) begincase (state)                     ***: next_state = ***;***: next_state = ***;endcase
end//第二段,状态转移时序逻辑
always @(posedge clk, negedge rst_n) beginif (!rst_n)     state <= ***;		             else state <= next_state;			
end//第三段,输出寄存时序逻辑
always @(posedge clk, negedge rst_n) beginif (!rst_n)     out_r <= ***;		             else out_r <= ***;			
end
endmodule

        对于状态机简单的输出寄存,可以将输出组合逻辑和输出寄存融合,比如计数器(对计数器而言状态就是输出,所以也可以理解为将状态转移也融合进来了)。同时对于一般简单的寄存器操作比如移位,也可以将输出组合逻辑和输出寄存融合。

//组合逻辑和寄存器操作融合
always@(posedge clk or negedge rst_n) beginif(!rst_n)cnt <= 0;elsecnt <= cnt + 1;
end//组合逻辑和寄存器操作不融合
always@(posedge clk or negedge rst_n) beginif(!rst_n)cnt <= 0;elsecnt <= cnt_pre;
assign cnt_pre = cnt + 1;
end//简单的寄存器操作,组合逻辑和时序逻辑融合
always@(posedge clk or negedge rst_n) beginif(!rst_n)shift <= 0;else if(load)shift <= shift_load;elseshift <= shift << 1;
end//简单的寄存器操作,组合逻辑和时序逻辑不融合
always@(posedge clk or negedge rst_n) beginif(!rst_n)shift <= 0;else if(load)shift <= shift_load;elseshift <= shift_pre;
endassign shift_pre = shift << 1;

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

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

相关文章

听GPT 讲Rust源代码--src/tools(10)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_is_empty_from_len.rs 在Rust源代码中&#xff0c;rust-analyzer是一个Rust语言的IDE插件和代码分析器。其中&#xff0c;generate_is_empty_from_len.rs是rust-analyzer中的一个处理程序&#x…

CentOS7安装Docker,DockerCompose

安装docker 1、卸载docker 查看是否有旧版本docker docker info首先检测我们虚拟机是否已经安装过Docker&#xff0c;如果安装则需卸载。代码中“\”符号为换行符&#xff0c;相当于一行内容分为多行&#xff0c;这是检测docker的各种组件 yum remove docker \docker-clien…

VGG模型

概念&#xff1a; CNN感受野 在卷积神经网络中&#xff0c;决定某一层输出结果中的一个元素所对应的输入层的区域大小&#xff0c;被称作感受野&#xff08;receptive field&#xff09;。通俗的解释是&#xff0c;输出feature map上的一个单元对应输入层上的区域大小。 VGG…

协同过滤算法springboot+java+ssm高校图书馆图书借阅管理系统k32vr

课题主要分为四大模块&#xff1a;即管理员模块&#xff0c;员工模块&#xff0c;教师模块和学生模块&#xff0c;主要功能包括&#xff1a;首页&#xff0c;个人中心&#xff0c;员工管理&#xff0c;学生管理&#xff0c;教师管理&#xff0c;图书分类管理&#xff0c;图书信…

HNU计算机结构体系-实验2:CPU动态指令调度Tomasulo

文章目录 实验2 CPU动态指令调度Tomasulo一、实验目的二、实验说明三、实验内容问题1&#xff1a;问题2&#xff1a;问题3&#xff1a;问题4&#xff1a;问题5&#xff1a; 四、思考题问题1&#xff1a;问题2&#xff1a; 五、实验总结 实验2 CPU动态指令调度Tomasulo 一、实验…

【数据挖掘】国科大苏桂平老师数据库新技术课程作业 —— 第三次作业

part 1 设计一个学籍管理小系统。系统包含以下信息&#xff1a; 学号、学生姓名、性别、出生日、学生所在系名、学生所在系号、课程名、课程号、课程类型&#xff08;必修、选修、任选&#xff09;、学分、任课教师姓名、教师编号、教师职称、教师所属系名、系号、学生所选课…

【算法每日一练]-结构优化(保姆级教程 篇5 树状数组)POJ3067日本 #POJ3321苹果树 #POJ2352星星

目录 今天知识点 求交点转化求逆序对&#xff0c;每次操作都维护一个y点的前缀和 树的变动转化成一维数组的变动&#xff0c;利用时间戳将节点转化成区间 先将y排序&#xff0c;然后每加入一个就点更新求一次前缀和 POJ3067&#xff1a;日本 思路&#xff1a; POJ3321苹…

案例063:基于微信小程序的传染病防控宣传系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

leetcode系列:反转链表的形象表示

反转链表是一道比较简单的题&#xff0c;主要考察的是对链表数据结构的理解和双指针应用&#xff0c;比较容易出错的地方是指针的移动顺序。在练习的过程中想到了一个比较形象的表示方法&#xff0c;于是记录下来。 # Definition for singly-linked list. # class ListNode: #…

地理信息系统概论

地理信息系统概论 第一章导论第二章地理信息系统的数据结构第三章空间数据的处理第四章地理信息系统空间数据库第五章空间分析的原理与方法第六章地理信息系统的应用模型第七章地理信息系统的设计与评价第八章地理信息系统产品的输出与设计 第一章导论 数据与信息的关系&#…

Java基础-java.util.Scanner接收用户输入

目录 1. 导入所需要的jar包2. 编写代码运行3. 输出运行结果 1. 导入所需要的jar包 import java.util.Scanner;2. 编写代码运行 public class ScannerDemo {public static void main(String[] args) {/** 使用Scanner接收用户键盘输入的数据* 1. 导包&#xff1a;告诉程序去JD…

【Python】translate包报错RuntimeError: generator raised StopIteration

根据网上有些教程&#xff0c;使用translate包翻译稍微复杂语句的时候&#xff0c;会报错RuntimeError: generator raised StopIteration 实际测试之后发现&#xff0c;主要是from_lang、to_lang两个参数的设置有问题&#xff0c;比如有人说中文写"Chinese"、"Z…

Mysql、Oracle安全项检查表及操作脚本

软件开发全资料获取&#xff1a;点我获取 Mysql检查表 Oracle检查表

Anaconda建虚拟环境并在jupyter中打开

1.假设要用yaml格式创建虚拟环境 从开始里打开anaconda powersheel 输入以下 conda env create -f environment.yaml conda activate env_name activate以下虚拟环境 修改名称 如果不用yaml也可以用 conda create --name my_first_env python3.6 这个来指定 2.(base)变(…

C语言 位运算符 + 应用

常用的位运算符 按位与 快速判断整数的奇偶性 奇数的二进制表示的最低位为1&#xff0c;偶数的二进制表示的最低位为0。 int num 9; if (num & 1) {// num 是奇数 } else {// num 是偶数 }按位异或 交换两个变量的值 int a 5; int b 7; a a ^ b; b a ^ b; a a ^ …

udemy angular decoration 自存

番外 为什么一个ts文件变成了component,因为它使用了components装饰器 components is just a class,you export it so angular know how to use it 举例&#xff1a;组件装饰器 decoration前总是有一个符号 decoration的作用&#xff08;之一&#xff1f;&#xff09; NgModu…

【漏洞复现】狮子鱼任意文件上传漏洞

漏洞描述 狮子鱼CMS(Content Management System)是一种网站管理系统,旨在帮助用户更轻松地创建和管理网站。它具有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。 狮子鱼CMS使用简单直观的管理界面,使得网站所有者可以方便地进行内容的发布、管理和…

使用 Tailwind CSS 完成导航栏效果

使用 Tailwind CSS 完成导航栏效果 本文将向您介绍如何使用 Tailwind CSS 创建一个漂亮的导航栏。通过逐步演示和示例代码&#xff0c;您将学习如何使用 Tailwind CSS 的类来设计和定制导航栏的样式。 准备工作 在开始之前&#xff0c;请确保已经安装了 Tailwind CSS。如果没…

PyQt6 QTimeEdit时间控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计39条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…

C++新经典模板与泛型编程:将trait类模板用作模板参数

将trait类模板用作模板参数 template<typename T> struct SumFixedTraits;template<> struct SumFixedTraits<char> {using sumT int;static sumT initValue() {return 0;} };template<> struct SumFixedTraits<int> {using sumT __int64;sta…