Verilog语法学习——LV4_移位运算与乘法

LV4_移位运算与乘法

题目来源于牛客网

[牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page=1&tab=Verilog篇&topicId=301)

题目

题目描述:

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

信号示意图:

在这里插入图片描述

波形示意图:

在这里插入图片描述

输入描述:

输入信号 d, clk, rst
类型 wire
在testbench中,clk为周期5ns的时钟,rst为低电平复位

输出描述:

输出信号 input_grant out
类型 reg

状态机

在Verilog中,可以使用always语句和case语句来实现状态机。

首先,声明一个状态寄存器state_reg,用于存储当前状态的值。状态寄存器通常是一个有限状态机中的关键变量。

reg [2:0] state_reg;

always @(posedge clk) 块中,使用case语句根据当前的状态值执行相应的操作。在时钟的上升沿触发该always块。

always @(posedge clk) begin
    case (state_reg)
        // 根据当前状态执行相应操作
        // 每个状态对应一个case
        // 每个case中描述该状态下的行为
    endcase
end

在每个case中,根据当前的状态值执行相应的操作。每个case对应一个状态,并描述在该状态下的行为。

always @(posedge clk) begin
    case (state_reg)
        // 状态1
        2'd0: begin
            // 在状态1执行的操作
            // 可以包括信号的赋值、状态变迁等
        end
        
        // 状态2
        2'd1: begin
            // 在状态2执行的操作
        end
        
        // 状态3
        2'd2: begin
            // 在状态3执行的操作
        end
        
        default: begin
            // 默认情况下的操作,当状态寄存器的值不匹配任何已定义的状态时执行
        end
    endcase
end

代码

`timescale 1ns/1ns
	module multi_sel(
	input [7:0]d ,
	input clk,
	input rst,
	output reg input_grant,
	output reg [10:0]out
);
//*************code***********//
/*代码思路:使用状态机,进行逻辑跳转。可以借此题来练习状态机
1.声明状态寄存器
2.状态之间的转换
3.每个状态执行的操作
	将乘法改为移位来计算,可以节省资源*/

//声明参数,状态寄存器
	parameter	IDLE	= 3'd0;		//空状态
	parameter	M1		= 3'd1;		//M1时,输入有效(input_grant=1)
	parameter	M3		= 3'd2;
	parameter	M7		= 3'd3;
	parameter	M8		= 3'd4;
	
	reg [2:0]	current_state;
	reg [2:0]	next_state;
	reg [7:0]	d_tool;	//此变量是存储输入有效时d的值
	
//状态之间的转换
	always @(posedge clk or negedge rst) begin
		if(!rst)
			current_state <= IDLE;
		else 
			current_state <= next_state;
	end
//不同状态所要执行的操作
	always @(*) begin	//和时钟、复位无关
		case (current_state)
			IDLE : begin
				input_grant <= 0;
				out <= 0;
				next_state <= M1;
			end
			M1 : begin
				input_grant <= 1;
				out <= d_tool;
				next_state <= M3;
			end
			M3 : begin
				input_grant <= 0;
				out <= (d_tool << 2'd2) - d_tool;
				next_state <= M7;
			end
			M7 : begin
				input_grant <= 0;
				out <= (d_tool << 2'd3) - d_tool;
				next_state <= M8;
			end
			M8 : begin
				input_grant <= 0;
				out <= (d_tool << 2'd3);
				next_state <= M1;
			end
			default : begin
				input_grant <= 0;
				out <= 0;
				next_state <= IDLE;
			end	
		endcase	
	end
//输入有效数据 d_tool 和实际的输入 d 的关系
	always @(posedge clk or negedge rst) begin
		if(!rst)
			d_tool <= 0;
		else begin
			if(current_state == IDLE)
				d_tool <= d;
			else if(current_state == M8)
				d_tool <= d;
			else 
				d_tool <= d_tool;
		
		end
	end

//*************code***********//
endmodule

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python爬取IP归属地信息及各个地区天气信息

一、实现样式 二、核心点 1、语言&#xff1a;Python、HTML&#xff0c;CSS 2、python web框架 Flask 3、三方库&#xff1a;requests、xpath 4、爬取网站&#xff1a;https://ip138.com/ 5、文档结构 三、代码 ipquery.py import requests from lxml import etree # 请求…

了解Unity编辑器之组件篇Miscellaneous(九)

一、Aim Constraint&#xff1a;是一种动画约束&#xff0c;用于使一个对象朝向另一个对象或一个指定的矢量方向 Activate按钮&#xff1a;用于激活或停用Aim Constraint。当Aim Constraint处于激活状态时&#xff0c;其约束效果将应用于目标对象。 Zero按钮&#xff1a;用于将…

Spring Boot单元测试入门指南

Spring Boot单元测试入门指南 JUnit是一个成熟和广泛应用的Java单元测试框架&#xff0c;它提供了丰富的功能和灵活的扩展机制&#xff0c;可以帮助开发人员编写高质量的单元测试。通过JUnit&#xff0c;开发人员可以更加自信地进行重构、维护和改进代码&#xff0c;同时提高代…

Skin Shader 使用自动生成的Thickness

Unity2023.2的版本&#xff0c;Thickness 自动化生成&#xff0c;今天测试了一把&#xff0c;确实不错。 1.Render 设置 在Project Settings->Graphics->HDRP Global Settings中 Frame Setting->Rendering->Compute Thickness 打开 2.Layer设置 2.1添加Layer&…

如何提高自己的软件测试水平之bug定位

同学们在面试投简历的时候会经常看到人家公司JD上写的要求之一&#xff0c;如下&#xff1a; 这句话大家不要以为随便写写的&#xff0c;在我工作的十几年过程中起码见过10个以上试用期没过的公司新人&#xff0c;公司在衡量一个测试工程师是否专业的标准之一就是&#xff1a;…

Kotlin基础(八):泛型

前言 本文主要讲解kotlin泛型&#xff0c;主要包括泛型基础&#xff0c;类型变异&#xff0c;类型投射&#xff0c;星号投射&#xff0c;泛型函数&#xff0c;泛型约束&#xff0c;泛型在Android中的使用。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 泛型基…

opencv-28 自适应阈值处理-cv2.adaptiveThreshold()

什么是自适应阈值处理? 对于色彩均衡的图像&#xff0c;直接使用一个阈值就能完成对图像的阈值化处理。但是&#xff0c;有时图像的色彩是不均衡的&#xff0c;此时如果只使用一个阈值&#xff0c;就无法得到清晰有效的阈值分割结果图像。 有一种改进的阈值处理技术&#xff…

Mybatis-Plus学习笔记,包含mybatis-plus基本使用,各种插件使用等等

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 Mybatis-Plus笔记1、简介2、Mybatis-Plus Demo 程序3、Mybatis-Plus 常见注解4、Mybatis-Plus 条件构造器 Wrapper5、Mybatis-Plus 插件5.1、乐观锁插件5.2、分页插件5.3、逻辑删除插件…

OJ练习第145题——并行课程 III

力扣链接&#xff1a;2050. 并行课程 III 题目描述 给你一个整数 n &#xff0c;表示有 n 节课&#xff0c;课程编号从 1 到 n 。同时给你一个二维整数数组 relations &#xff0c;其中 relations[j] [prevCoursej, nextCoursej] &#xff0c;表示课程 prevCoursej 必须在课…

Python(四十七)列表对象的创建

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

脚手架(vue-cli)的安装详细教程

首先要下载node.js 下载 | Node.js 中文网 (nodejs.cn)https://nodejs.cn/download/ 大家根据自己的系统来选择哪个&#xff0c;我是Windows系统&#xff0c;所以选择红色箭头所指的安装包去安装&#xff01;&#xff01;&#xff01; 接下来双击安装&#xff01;&#xff01;…

面试之CurrentHashMap的底层原理

首先回答HashMap的底层原理? HashMap是数组链表组成。数字组是HashMap的主体&#xff0c;链表则是主要为了解决哈希冲突而存在的。要将key 存储到&#xff08;put&#xff09;HashMap中&#xff0c;key类型实现必须计算hashcode方法&#xff0c;默认这个方法是对象的地址。接…

【深度学习笔记】Softmax 回归

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a; 神经网络和…

C++数据结构笔记(11)二叉树的#号创建法及计算叶子节点数

首先分享一段计算叶子节点数目的代码&#xff0c;如下图&#xff1a; 不难发现&#xff0c;上面的二叉树叶子节点数目为4。我们可以采用递归的方式&#xff0c;每当一个结点既没有左结点又没有右节点时&#xff0c;即可算为一个叶子结点。 int num0; //全局变量&#xff0c;代…

会议OA系统会议管理模块开发思路(layui搭建)

目录 一.为什么要进行开发 1.开发目的 2.项目流程 A.发起会议请求过程 1.首先实现我们的多选下拉框功能&#xff01; 2.时间组件功能&#xff0c;并且提交我们新增加的会议内容 3.在进行发起会议编码时遇到的问题&#xff0c;BUG 3.1.有点时候js访问不到路径 3.2在增加…

Mac/win开发快捷键、vs插件、库源码、开发中的专业名词

目录 触控板手势&#xff08;2/3指&#xff09; 鼠标右键 快捷键 鼠标选择后shift⬅️→改变选择 mac command⬅️&#xff1a;删除←边的全部内容 commadtab显示下栏 commandshiftz向后撤回 commandc/v复制粘贴 command ⬅️→回到行首/末 commandshift3/4截图 飞…

C语言每日一题:4.消失的数字+数字在升序数组中出现的次数+整数转换

消失的数字&#xff1a; 思路1&#xff1a;排序遍历 1.使用qsort排序数组判断当前数值1是否是数组下一个元素的数值。 2.如果是一直循环注意数组越界&#xff0c;如果不是那么当前的数组的数值1就是消失的数。 3.存在0——n的数字是第n个数没有了。循环过程中从头到尾也找不到这…

适用于虚拟环境的免费企业备份软件

多年来&#xff0c;许多行业严重依赖物理服务器提供计算资源——你可以想象到巨大的服务器机房和笨重的服务器的场景。 然而&#xff0c;随着业务快速增长&#xff0c;许多组织发现物理服务器已经无法有效利用计算资源。因此&#xff0c;为了节省成本&#xff0c;引入了虚拟服…

SQL-每日一题【627. 变更性别】

题目 Salary 表&#xff1a; 请你编写一个 SQL 查询来交换所有的 f 和 m &#xff08;即&#xff0c;将所有 f 变为 m &#xff0c;反之亦然&#xff09;&#xff0c;仅使用 单个 update 语句 &#xff0c;且不产生中间临时表。 注意&#xff0c;你必须仅使用一条 update 语句…

c++数据锁链

题目描述&#xff1a; 创建一个结构体为Node&#xff0c;具有value , next 两个属性&#xff1b; value为整型&#xff0c;用来储存结构体数值&#xff1b; next为Node类型指针&#xff0c;用来指向下一组数据地址&#xff1b; 第1组数据value 5&#xff1b; 第2组数据value …