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

硬件语言Verilog HDL牛客刷题day05 时序逻辑部分

1.VL29 信号发生器

1.题目:

题目描述:

请编写一个信号发生器模块,根据波形选择信号wave_choise发出相应的波形:wave_choice=0时,发出方波信号;wave_choice=1时,发出锯齿波信号;wave_choice=2时,发出三角波信号。


2.解题思路,

 2.1 时序逻辑的题目使用状态机。

 2.2 三角波模式需要设置一个标志位flagflag仅在三角波模式也就是wave_chosie==2时工作。当flag==0时,wave减少;当flag==1时,wave增加。


3. 解题代码

`timescale 1ns/1ns
module signal_generator(input clk,input rst_n,input [1:0] wave_choise,output reg [4:0]wave);reg [4:0] cnt;reg flag;// 方波模式下,计数器控制always@(posedge clk or negedge rst_n) beginif(~rst_n)cnt <= 0;elsecnt <= wave_choise!=0 ? 0:cnt        ==19? 0:cnt + 1;end// 三角波模式下,标志位控制always@(posedge clk or negedge rst_n) beginif(~rst_n)flag <= 0;elseflag <= wave_choise!=2 ? 0:wave       ==1 ? 1:wave       ==19? 0:flag;end// 更新wave信号always@(posedge clk or negedge rst_n) beginif(~rst_n) wave <= 0;else case(wave_choise)0      : wave <= cnt == 9? 20    : cnt ==19? 0     :wave;1      : wave <= wave==20? 0     : wave+1;2      : wave <= flag==0 ? wave-1: wave+1;default: wave <= 0;endcaseend
endmodule


2.VL30 数据串转并电路  (这个容易)

1.题目:

实现串并转换电路,输入端输入单bit数据,每当本模块接收到6个输入数据后,输出端输出拼接后的6bit数据。本模块输入端与上游的采用valid-ready双向握手机制,输出端与下游采用valid-only握手机制。数据拼接时先接收到的数据放到data_b的低位。

电路的接口如下图所示。valid_a用来指示数据输入data_a的有效性,valid_b用来指示数据输出data_b的有效性;ready_a用来指示本模块是否准备好接收上游数据,本模块中一直拉高;clk是时钟信号;rst_n是异步复位信号。


2.解题思路:

 2.1注意开始的时候 和复位 的时候   ready_a = 0; 就行。


3.解题代码

`timescale 1ns/1nsmodule s_to_p(input 				clk 		,   input 				rst_n		,input				valid_a		,input	 			data_a		,output	reg 		ready_a		,output	reg			valid_b		,output  reg [5:0] 	data_b
);
reg[5:0] data;// Data buffer 数据缓存区
reg[3:0] cnt;//  counter  计数器 always@(posedge clk or negedge rst_n)beginif(~rst_n)begindata_b <=6'b0;valid_b <=1'b0;ready_a <=1'b0;cnt <=0;endelsebegin		ready_a <=1'b1;		if(valid_a == 1'b1)begincnt <= cnt +1;data <= {data_a , data[5:1]};valid_b <= 1'b0;if(cnt == 3'd5)begincnt <=0;data_b <= {data_a,data[5:1]};valid_b <=1'b1;endendendendendmodule



3.VL31 数据累加输出

1.题目:

实现串行输入数据累加输出,输入端输入8bit数据,每当模块接收到4个输入数据后,输出端输出4个接收到数据的累加结果。输入端和输出端与上下游的交互采用valid-ready双向握手机制。要求上下游均能满速传输时,数据传输无气泡,不能由于本模块的设计原因产生额外的性能损失。

电路的接口如下图所示。valid_a用来指示数据输入data_in的有效性,valid_b用来指示数据输出data_out的有效性;ready_a用来指示本模块是否准备好接收上游数据,ready_b表示下游是否准备好接收本模块的输出数据;clk是时钟信号;rst_n是异步复位信号。


2.解题思路

2.1  时序逻辑  采用状态机。

2.1  这个题目要注意看细节, 就是计数的条件 和各个 变量 变化的条件。

①ready_a:为高表示我现在没啥事,告诉上游我准备好了,你可以发数据了;

②valid_b:为高表示给下游说我发数据了;

③data_out:给下游发的数据,配合valid_b,只有valid_b为高时,发送的才是有效数据。

那么分别来处理:

①ready_a: 如果下游ready_b拉高,表示下游可以接收模块输出数据,那么此时ready_a应拉高;同时,如果valid_b为低,表示4个数据还没收完,所以也拉高继续接收。

②valid_b: 当和上游正常通讯时(即valid_a和ready_a均为高),数据正常接收,但注意计数了4个就得加起来输出一次,所以data_cnt == 2'd3时拉高valid_b;而等待下游接收,即当ready_a也拉高表示接收完成,则拉低valid_b,保证只有在四个数之和的时候才拉高。

③data_out: 同理,当和上游正常通讯时(即valid_a和ready_a均为高),数据正常接收,数据累加,当计数器data_cnt == 2'd0表示需要从头再加,清零,但注意需要等到ready_b拉高,表示下游接收完成才能清空重新累加


3.解题代码

`timescale 1ns/1nsmodule valid_ready(input 				clk 		,   input 				rst_n		,input		[7:0]	data_in		,input				valid_a		,input	 			ready_b		,output		 		ready_a		,output	reg			valid_b		,output  reg [9:0] 	data_out
);assign ready_a = ready_b | ~valid_b;reg [1:0] data_cnt;always@(posedge clk or negedge rst_n) beginif(!rst_n)data_cnt <= 2'd0;else if(valid_a && ready_a)data_cnt <= data_cnt +2'd1;elsedata_cnt <= data_cnt;endalways@(posedge clk or negedge rst_n) beginif(!rst_n)valid_b <= 1'b0;else if(valid_a && ready_a && data_cnt == 2'd3)valid_b <= 1'd1;else if(valid_b && ready_b)valid_b <= 1'd0;endalways@(posedge clk or negedge rst_n) beginif(!rst_n)data_out <= 10'b0;else if(valid_a && ready_a && data_cnt == 2'd0 && ready_b) //这里要接收的时候才清零data_out <= data_in; //相当于清零,重新累加else if(valid_a && ready_a)data_out <= data_out + data_in;endendmodule


4.VL32 非整数倍数据位宽转换24to128

1.题目:

实现数据位宽转换电路,实现24bit数据输入转换为128bit数据输出。其中,先到的数据应置于输出的高bit位。

电路的接口如下图所示。valid_in用来指示数据输入data_in的有效性,valid_out用来指示数据输出data_out的有效性;clk是时钟信号;rst_n是异步复位信号。


2.解题思路,

 2.1 定义一个可以存储 128 位的寄存器。

 2.2列出  计数器 对应的每个信号的位数。 (简单,看得出)

 2.3  使用状态机来作, 主要是 15个状态。 因为 24 *16  = 128 *3


3.解题代码

`timescale 1ns/1nsmodule width_24to128(input 				clk 		,   input 				rst_n		,input				valid_in	,input	[23:0]		data_in		,output	reg			valid_out	,output  reg [127:0]	data_out
);
reg[128:0] data;//data duffer   //128 x3 = 24 *16 
reg[3:0] cnt;// counter      16个状态always@(posedge clk or negedge rst_n)
beginif(~rst_n)begincnt <=0;data <=0;endelsebeginif(cnt == 4'd0 && valid_in == 1'd1)begincnt <= cnt+1;data <= data_in;endelse if(cnt == 4'd15 && valid_in == 1'd1)begincnt <= 0;data <={data[119:0],data_in};endelse if(valid_in == 1'd1)begincnt <= cnt +1;data <= {data[119:0],data_in};endend
endalways@(posedge clk or negedge rst_n)beginif(~rst_n)beginvalid_out <=0;data_out <=0;endelsebeginif(cnt == 4'd5)begindata_out <= {data[119:0],data_in[23:16]};valid_out <=1;endelse if(cnt == 4'd10)begindata_out <= {data[111:0],data_in[23:8]};valid_out <=1;endelse if(cnt == 4'd15)begindata_out <= {data[103:0],data_in[23:0]};valid_out <=1;endelsebeginvalid_out <=0;data_out <= data_out;endendendendmodule

相关文章:

硬件语言Verilog HDL牛客刷题day05 时序逻辑部分

1.VL29 信号发生器 1.题目&#xff1a; 题目描述&#xff1a; 请编写一个信号发生器模块&#xff0c;根据波形选择信号wave_choise发出相应的波形&#xff1a;wave_choice0时&#xff0c;发出方波信号&#xff1b;wave_choice1时&#xff0c;发出锯齿波信号&#xff1b;wave…...

Ajax 入门

前端技术&#xff1a;在浏览器中执行的程序都是前端技术。如 html、css、js 等 后端技术&#xff1a;在服务器中执行的长须&#xff0c;使用 Java 等语言开发的后端程序。servlet&#xff0c;jsp&#xff0c;jdbc&#xff0c;mysql&#xff0c;tomacat 等 全局刷新 使用表单…...

半导体器件基础06:发光二极管

说在开头&#xff1a;关于玻尔原子模型&#xff08;1&#xff09; 卢瑟福的模型面临着与经典电磁波理论的矛盾&#xff0c;按照经典电磁波理论&#xff0c;卢瑟福的原子不可能稳定存在超过1秒钟。玻尔面临着选择&#xff1a;要么放弃卢瑟福模型&#xff0c;要么放弃麦克斯韦伟…...

AutoCV第二课:Python基础

目录Python基础前言1.流程控制1.1 条件语句1.2 循环语句1.2.1 while循环语句1.2.2 for循环语句1.3 作业1.4 拓展-try except语法2.函数2.1 函数定义2.2 函数的参数2.2.1 位置参数2.2.2 命名参数2.2.3 默认参数2.2.4 可变参数2.2.5 参数展开2.3 递归函数2.3.1 递归函数定义2.3.2…...

LeetCode算法 打家劫舍 和 打家劫舍II C++

目录题目 打家劫舍参考答案题目 打家劫舍II参考答案题目 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯…...

蓝桥杯刷题冲刺 | 倒计时10天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.有边数限制的最短路2.九进制转十进制1.有边数限制的最短路 题目 链接&#xff1a; 853. 有边数…...

个人练习-Leetcode-剑指 Offer II 109. 开密码锁

题目链接&#xff1a;https://leetcode.cn/problems/zlDJc7/ 题目大意&#xff1a;给出一个四位数字的密码锁&#xff0c;初始状态是0000&#xff0c;目标是targer。每一次转动只能让一个位的轮盘转动一下&#xff08;0往后转是9&#xff09;。有一个vector<string> dea…...

四个常见的Linux面试问题

四个常见的Linux面试问题。 刚毕业要找工作了&#xff0c;只要是你找工作就会有面试这个环节&#xff0c;那么在面试环节中&#xff0c;有哪些注意事项值得我的关注呢&#xff1f;特别是专业技术岗位&#xff0c;这样的岗位询问一般都是在职的工程师&#xff0c;如何在面试环节…...

15、接口(C#)

15.1 什么是接口 接口是指定一组函数成员而不实现它们的引用类型。所以只能类和结构实现接口。 15.2 声明接口 接口声明不能包含以下成员 数据成员静态成员 接口声明只能包含以下类型的费静态成员函数声明&#xff1a; 方法事件索引器属性 这些函数成员的声明不能包含任何实…...

C++中常见的容器类使用方法举例(vector、deque、map、set)

cpp中常见的容器类有vector、list、deque、map、set、unordered_map和unordered_set。 下面将举例直接说明各个容器的使用方法。 文章目录综合示例1. vector&#xff1a;动态数组&#xff0c;支持随机访问2. list&#xff1a;双向链表&#xff0c;支持双向遍历和插入删除3. de…...

什么是强缓存和协商缓存

什么是缓存 浏览器缓存就是把一个已经请求过的Web资源&#xff08;如html页面&#xff0c;图片&#xff0c;js&#xff0c;数据等&#xff09;拷贝一份副本储存在浏览器中。缓存会根据进来的请求保存输出内容的副本。当下一个请求来到的时候&#xff0c;如果是相同的URL&#…...

算法刷题之堆

1. heapq 堆 Python 中只有最小堆&#xff1a; import heapqa [] heapq.heappush(a, 3) # 添加元素 heapq.heappush(a, 2) heapq.heappush(a, 1) while len(a): # 判断堆的长度print(heapq.heappop(a)) # 弹出堆顶元素# 将列表转换为最小堆 nums [2, 3, 1, 4, 5, 6] hea…...

javaweb导师选择系统

本文以JSP为开发技术&#xff0c;实现了一个导师选择系统。导师选择系统分为三大模块&#xff0c;包括管理员&#xff1a;学员信息管理、导师信息管理、导师选择管理、导师分布图、公告信息管理、系统管理&#xff0c;学生&#xff1a;个人资料管理、导师选择管理、导师分布图管…...

LeetCode150 逆波兰表达式求值

题目&#xff1a; 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。每个操作数&#xff08;运算对象&#xff09;都可以…...

【Node.js】项目开发实战(中)

开发用户的注册和登录接口步骤1&#xff0c;打开MySQL Workbench&#xff0c;打开自己的数据库进入创建用户信息表新建 ev_users表安装并配置mysql模块安装mysql模块新建db文件夹下index.js,导入并配置mysql模块安装bcryptjs对密码进行加密处理新建/router_handler/user.js中&a…...

记录一次 New Bing 英语陪练

记录一次 New Bing 英语陪练 Now I start to speak english to chat with you . Help me find the mistake in my word and help me improve my english I’m glad you want to practice your English with me. I can help you find the mistakes in your words and help you i…...

【Python】照片居然能变素描?不会画画但是咱会代码

文章目录前言一、准备二、下载预训练模型总结前言 Photo-Sketching 一个能将照片的轮廓识别出来并将其转化为“速写”型图像的开源模块。 比如&#xff0c;这只小狗&#xff1a; 经过模型的转化&#xff0c;会变成卡通版的小狗&#xff1a; 非常秀&#xff0c;这很人工智能…...

已解决正确配置git环境变量

已解决git没有配置环境变量&#xff0c;抛出异常ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH?&#xff0c;附上正确配置git环境变量的教程 文章目录报错问题报错翻译报错原因解决方法《100天精通Python》专栏推荐白嫖80g Python全栈…...

【逐步剖C】-第十章-自定义类型之结构体、枚举、联合

一、结构体 前言&#xff1a;有关结构体的声明、定义、初始化以及结构体的传参等结构体的基本使用在文章【逐步剖C】-第六章-结构体初阶中已进行了详细的介绍&#xff0c;需要的朋友们可以看看。这里主要讲解的是有关结构体的内存问题。 1. 结构体的内存对齐 &#xff08;1&…...

Windows Server 2016 中文版、英文版下载 (updated Mar 2023)

Windows Server 2016 Version 1607&#xff0c;2023 年 3 月更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2016/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 本站将不定期发布官方原版风格月度更…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...