【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL63

news/2024/12/21 22:30:20/

并串转换

描述

题目描述:    

设计一个模块进行并串转换,要求每四位d输为转到一位dout输出,输出valid_in表示此时的输入有效。

信号示意图:

clk为时钟

rst为低电平复位

valid_in 表示输入有效

d 信号输入

dout 信号输出

波形示意图:

输入描述:

clk为时钟
rst为低电平复位
d 信号输入

输出描述:

dout 信号输出
valid_in 表示输入有效

 解题思路

并串转换的思路一般是使用移位寄存器的思想——根据并行数据的位数n对应设置n个寄存器,将并行数据依次存入移存器中,并在每个时钟周期下进行移动;

根据题干中波形图的描述(如红色方框所示):

 可以发现,valid_in信号通常在第4个周期为1(有效),在其他三个周期为0;

问题:我感觉这个d[3:0]的数据和dout对不上,看着很奇怪;

设计思路:

①计数器模块

设置一个计数器,循环计数0~3

reg [1:0] cnt;
//计数器cnt部分
/*注意: 此处必须为非阻塞赋值语句*/
always @(posedge clk or negedge rst) beginif (!rst) cnt <= 2'b00;else cnt <= cnt + 2'b01;
end
②移存器部分
//移位寄存器部分
always @(posedge clk or negedge rst) beginif (!rst) begindout_r <= 4'd0;valid_in_r <= 1'b0;endelse beginif (cnt == 2'b11) begin dout_r <= d;  valid_in_r <= 1'b1; endelse begin dout_r[3:0] <= {dout_r[2],dout_r[1],dout_r[0],dout_r[3]}; valid_in_r <= 1'b0; endend
endassign dout = dout_r[3];
assign valid_in = valid_in_r;

完整代码

`timescale 1ns/1ns
module huawei5(input wire clk  ,input wire rst  ,input wire [3:0]d ,output wire valid_in ,output wire dout);//*************code***********//
reg valid_in_r;
reg [3:0] dout_r;reg [1:0] cnt;
//计数器cnt部分
/*注意: 此处必须为非阻塞赋值语句*/
always @(posedge clk or negedge rst) beginif (!rst) cnt <= 2'b00;else cnt <= cnt + 2'b01;
end
//移位寄存器部分
always @(posedge clk or negedge rst) beginif (!rst) begindout_r <= 4'd0;valid_in_r <= 1'b0;endelse beginif (cnt == 2'b11) begin dout_r <= d;  valid_in_r <= 1'b1; endelse begin dout_r[3:0] <= {dout_r[2],dout_r[1],dout_r[0],dout_r[3]}; valid_in_r <= 1'b0; endend
endassign dout = dout_r[3];
assign valid_in = valid_in_r;//*************code***********//endmodule


http://www.ppmy.cn/news/1533247.html

相关文章

SQL_over_partition_by_order_by

在SQL中&#xff0c;OVER子句通常与窗口函数一起使用&#xff0c;用于定义窗口的规则。PARTITION BY用于将数据分成多个独立的分区&#xff0c;而ORDER BY用于在每个分区内定义数据的排序方式。 窗口函数可以对一组行执行计算&#xff0c;并返回计算结果。这些行与当前行有某种…

【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式结构重用

序言&#xff1a; 本文详细讲解了关于我们在页面上经常看到的轮播图在鸿蒙开发中如何用Swiper实现&#xff0c;介绍了Swiper的基本用法与属性&#xff0c;及如何面对大段的重复代码进行封装和重用&#xff08;Extend、Styles、Builder&#xff09;&#xff0c;使代码更加简洁易…

【四】Spring Cloud OpenFeign原理分析

Spring Cloud OpenFeign原理分析 概述 Spring Cloud 微服务实践也有挺多年了&#xff0c;一直想着总结一下这系列的知识点&#xff0c;最近终于下定决心来出一个Spring Cloud 系列文章了。本文主要围绕fegin组件来进行讲解&#xff0c;文中将会给出基础使用的示例&#xff0c;还…

(Linux驱动学习 - 4).Linux 下 DHT11 温湿度传感器驱动编写

DHT11的通信协议是单总线协议&#xff0c;可以用之前学习的pinctl和gpio子系统完成某IO引脚上数据的读与写。 一.在设备树下添加dht11的设备结点 1.流程图 2.设备树代码 &#xff08;1&#xff09;.在设备树的 iomuxc结点下添加 pinctl_dht11 &#xff08;2&#xff09;.在根…

如何选用笔记本进行思路整理

用螺纹圈装订的口袋大小的无格白纸/点状硬皮笔记本有许多优点&#xff0c;适合多种用途&#xff0c;尤其在学习和思路整理方面。 ### 优点 1. **便携性**&#xff1a;口袋大小的设计方便随身携带&#xff0c;适合在任何地方记录灵感。 2. **灵活性**&#xff1a;无格白纸提供…

SpringBoot+Activiti7工作流入门实例

目录 文章目录 目录准备Activiti建模工具1、BPMN-js在线设计器1.1 安装1.2 使用说明1.3运行截图2、IDEA安装Activiti Designer插件2.1安装插件2.2 设置编码格式防止中文乱码2.3 截图简单工作流入门实例1. 新建Spring Boot工程2. 引入Activiti相关依赖添加版本属性指定仓库添加依…

使用yum为centos系统安装软件以及使用(包含阿里云yum源配置)

centos系统配置阿里云yum源 因为centos7官方停止维护&#xff0c;自带yum源用不了了&#xff0c;所以可以更换成阿里云yum源 方法&#xff1a; 使用root权限执行以下语句 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo CentOS…

消费电子制造企业如何使用SAP系统提升运营效率与竞争力

在当今这个日新月异的消费电子市场中&#xff0c;企业面临着快速变化的需求、激烈的竞争以及不断攀升的成本压力。为了在这场竞赛中脱颖而出&#xff0c;消费电子制造企业纷纷寻求数字化转型的突破点&#xff0c;其中&#xff0c;SAP系统作为业界领先的企业资源规划(ERP)解决方…