数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (四)移位运算与乘法

news2025/1/17 21:39:47

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (四)移位运算与乘法


🔈声明:
😃博主主页:王_嘻嘻的CSDN博客
🧨未经作者允许,禁止转载
🔑系列专栏:牛客Verilog习题集
🚩推荐一个IC、FPGA新手入门的好网站:👉快 点 击 进 入 学 习 吧


  继续整理牛客网经典Verilog习题讲解,牛客网里除了最新的Verilog题库还有其它领域的经典笔试、面试题,大家快和我一起刷起来吧 点 击 跳 转



题目


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


在这里插入图片描述


分析:

  本题理解起来应该不难,主要是练习时序电路的控制。需要注意的是out需要连续输出第一拍采集数据的1/3/7/8倍,而在这4拍的输出中,所有的输入是忽略的。根据clk上升沿虚线,可以看出,对输入采样的第一拍就开始out有效

  例如d输入128时,还处于第三个数据的1倍输出。




题解:

  在完成这题时,可能很多新手分析不清时序,其实我们只需要抓住时序的重点,再围绕展开即可
  本题的重点其实在于连续输出4拍数据,且连续不断的输出;至于哪一拍输出grant_vld或是每一拍数据怎么处理都是后话了。

  • 那么是否可以采用一个计数器来记录节拍呢,有了这个节拍,输出数据就好处理了;
  • 如下列代码所示,如果cnt(计数器)复位值为0,那么复位释放后,第一拍有效时cnt=1,所以cnt的周期为1、2、3、0的循环
  • 所以grant_vld永远在cnt=1时有效即可;
  • 并根据cnt值的区别进行不同的数据操作;
  • 而为了忽略输入信号中途改变的影响,需要在每次周期结束后,采样输入d,作为下一周期的数据。

注意:虽然题目描述的是乘法,但其实只有3、7不是2的幂次,且3=4-1,7=8-1。完全可以通过移位加减来完成,不需要使用更费资源的乘法,当然如果倍数过于复杂,采用乘法也是不错的,hhhhh。


`timescale 1ns/1ns
module multi_sel(
input [7:0]d ,
input  clk,
input  rst,
output input_grant,
output reg [10:0]out
);
//*************code***********//
reg [1:0]   cnt;   //用来计数连续输出的4次数据
reg [7:0]   d_tmp; //第一拍数据采集并保存

always @(posedge clk or negedge rst)begin
    if(!rst)
        d_tmp[7:0] <= 8'b0;
    else if(cnt[1:0]==2'b00)
        d_tmp[7:0] <= d[7:0];
end

always @(posedge clk or negedge rst)begin  //由于复位为0,所以input_grant有效在cnt=1时,如果需要在cnt=0时,可以自行调整复位值
    if(!rst)
        cnt[1:0] <= 2'b0;
    else
        cnt[1:0] <= cnt[1:0] + 2'b1;
end

assign input_grant = cnt[1:0]==2'b01;

always @(*)begin
    case(cnt[1:0])
        2'b01: out[10:0] <= d_tmp[7:0];
        2'b10: out[10:0] <= (d_tmp[7:0]<<2'd2) - d_tmp[7:0];
        2'b11: out[10:0] <= (d_tmp[7:0]<<2'd3) - d_tmp[7:0];
        2'b00: out[10:0] <= d_tmp[7:0]<<2'd3;
    endcase

end

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


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

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

相关文章

C++:函数对象:Lambda:Lambda详解(三)

1&#xff1a;定义 lambda表达式就是一个函数&#xff08;匿名函数&#xff09;&#xff0c;也就是一个没有函数名的函数。为什么不需要函数名了&#xff1f; 因为我们直接&#xff08;一次性的&#xff09;用它&#xff0c;不需要其他地方调用它。lambda表达式也叫闭包&#x…

K8s部署前后端分离项目(二)

K8s容器部署两个项目&#xff08;主节点操作&#xff09; 1、创建yaml文件 master节点上创建todo-list.yaml文件&#xff0c;两个jar包设置了两个副本&#xff0c;vue设置了一个副本&#xff0c;端口号固定配置。 当前文件目录为&#xff1a;/home/docker 创建yaml文件命令为&…

数学建模----图与网络模型

目录 一.图的基本概念与数据结构 1.基本概念 2.图与网络的数据结构 1.邻接矩阵表示法 2.关联矩阵 3.Matlab工具箱简介 1.图的生成 4.问题讨论 1.最短路问题 2.最小生成树问题 一.图的基本概念与数据结构 1.基本概念 点对应于研究对象&#xff0c;根据关系将一些点对应相…

第14章 多数据库支持之MySql

对于一个工程性程序而言&#xff0c;是否支持对多数据库的CURD操作&#xff0c;不是必须的&#xff0c;只是为了预防程序部署和运行过程中如果因为版权问题而产生的额外成本而预留的退路。对于移动设备的前后端分离程序而言&#xff0c;如果数据库需要部署到移动设备中&#xf…

【UE4 第一人称射击游戏】42-消耗和重新装载“M4A1”弹药

上一篇&#xff1a;【UE4 第一人称射击游戏】41-让“M4A1”拥有独立的弹药系统本篇效果&#xff1a;可以看到当玩家拾取了“M4A1”后&#xff0c;实现了重新装弹的功能&#xff0c;与“AK47”的弹药系统是相互独立的。步骤&#xff1a;打开“ThirdPersonCharacter”&#xff0c…

PHP session反序列化漏洞原理解析

什么是session 官方Session定义&#xff1a;在计算机中&#xff0c;尤其是在网络应用中&#xff0c;称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。主要有以下特点&#xff1a; session保存的位置是在服务器端 session通常是要配合cookie使用 因为HTTP…

Docker Swarm NFS 数据持久化存储

目录一、Swarm 集群部署二、NFS 服务部署三、Swarm 使用 NFS3.1 通过 Volume3.1.1 创建 Volume3.1.2 使用 Volume3.1.3 验证数据共享特性3.2 通过 Docker Stack3.2.1 创建 YAML 文件3.2.2 使用 YAML 文件3.2.3 验证数据共享特性一、Swarm 集群部署 可参考我前面的博客《基于 L…

从数据到价值,DataOps精益数据运营概述

作者&#xff1a;陈荣耀 阿里云全球技术服务团队 一、背景&挑战 数字化时代&#xff0c;企业希望借助数字化的技术能力来提升企业的经营能力&#xff0c;从最终业务目标上来看&#xff0c;一般分三类&#xff1a; 1. 增加收入&#xff1a;基于经营数据的智能分析来提升产…

24、TORCH.UTILS.DATA

PyTorch 数据加载实用程序的核心是 torch.utils.data.DataLoader 类。它代表一个可在数据集上迭代的 Python&#xff0c;支持map-style and iterable-style datasets,customizing data loading order,automatic batching,single- and multi-process data loading,automatic mem…

CTK Plugin Framework插件框架学习--服务追踪

文章目录一、前言二、新建插件PluginA三、新建插件PluginB四、测试一、前言 服务追踪&#xff1a;如果想在B插件里使用A服务&#xff0c;可以专门写一个类继承ctkServiceTracker&#xff0c;在这个类里完成对A服务的底层操作&#xff0c;然后在B插件里通过这个类提供的接口来使…

重庆市市长胡衡华会见深兰科技董事长陈海波一行

1月9日&#xff0c;重庆市市长胡衡华会见了赴渝考察调研的深兰科技集团创始人、董事长陈海波一行&#xff0c;双方就开展互利合作进行了深入交流。胡衡华市长会见深兰科技考察团重庆市委常委、副市长陈鸣波&#xff0c;市政府秘书长、办公厅主任欧顺清&#xff0c;市政府副秘书…

ResT: An Efficient Transformer for Visual Recognition

文章地址: https://arxiv.org/pdf/2105.13677.pdf codeResT: An Efficient Transformer for Visual Recognition一、引言二、ResT一、Transformer模块的再思考二、Efficient Transformer Block三、Patch Embedding四、Positional Encoding五、整体架构三、实验一、分类二、目标…

go import package 入门lib1 is not in GOROOT

main.go:4:2: package lib1 is not in GOROOT (/usr/local/go/src/lib1)├── 5-init│ ├── lib1│ │ └── lib1.go│ └── lib2│ └── lib2.go├── const.go├── firstVar.go├── go.mod├── helloGolang.go├── main.go└── test3function.gogo env …

Java学习之单例设计模式

目录 设计模式 单例模式 一、饿汉式 二、懒汉式 三、饿汉式VS懒汉式 总结 设计模式 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。就像是经典的棋谱&#xff0c;不同的棋局&#xff0c;我们用…

连接查询之外连接(左外链接和右外连接)

内连接&#xff1a; 假设A表和B表进行连接查询&#xff0c;使用内连接的话&#xff0c;凡是A表和B表能够匹配上的记录被查询出来&#xff0c;这就是内连接。A、B两张表没有主副之分&#xff0c;两张表是平等的。 外连接&#xff1a; 假设A表和B表进行连接查询&#xff0c;使用…

对于html中div标签height属性的个人理解

对于没有系统学习过css的程序员来说&#xff0c;在编写css样式的时候&#xff0c;div的height属性值确实是个玄学的东西&#xff0c;我也感觉css确实挺玄学的&#xff0c;本文将介绍我对div标签height属性的个人理解&#xff0c;如有问题请指正。 在html中&#xff0c;div标签属…

xilinx srio ip学习笔记之srio example

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之srio example前言IP的配置例程前言 前面对SRIO的理论有了初步的理解&#xff0c;现在急需要通过理解例程并且修改例程来建立自信心了。 学东西确实…

Java版本TransH代码的学习

主要讲和TransE代码的区别&#xff0c;TransE文章的链接 Java版本TransE代码的学习 关于范数的概念 什么是0范数、1范数、2范数&#xff1f;区别又是什么 初始化向量 初始化关系平面的向量Wr&#xff0c;初始化向量relation_vec,初始化节点向量entity_vec Wr_vec new doub…

富豪酒店集团全新体验「METAGREEN」上线!边玩边赚,了解可持续发展!

富豪酒店集团推出 MetaGreen 以提高大众对可持续发展的认识&#xff0c;并创造一个多元化的绿色生态系统。 体验将包涵盖数个独特的互动地标&#xff0c;包括环保富豪酒店、大华银行艺术空间、恒生银行元宇宙分行&#xff0c;以及 citysuper、LOG-ON 和 The Mills 等零售商。 …

擎创技术流 | ClickHouse实用工具—ckman教程(9)

哈喽~大家好&#xff0c;时间倏然&#xff0c;上一次ckman分享还是在2022&#xff0c;这一期分享就已经是2023了。由于前段时间小编“成功加入羊群”&#xff0c;导致拖更一周&#xff0c;实在抱歉。希望新的一年大家都可以身体健健康康&#xff0c;事业红红火火&#xff0c;生…