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

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

并串转换

描述

题目描述:    

设计一个模块进行并串转换,要求每四位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) begin
	if (!rst) cnt <= 2'b00;
	else cnt <= cnt + 2'b01;
end
②移存器部分
//移位寄存器部分
always @(posedge clk or negedge rst) begin
	if (!rst) begin
		dout_r <= 4'd0;
		valid_in_r <= 1'b0;
	end
	else begin
		if (cnt == 2'b11) begin 
			dout_r <= d;  
			valid_in_r <= 1'b1; 
		end
		else begin 
			dout_r[3:0] <= {dout_r[2],dout_r[1],dout_r[0],dout_r[3]}; 
			valid_in_r <= 1'b0; 

		end
	end
end

assign 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) begin
	if (!rst) cnt <= 2'b00;
	else cnt <= cnt + 2'b01;
end
//移位寄存器部分
always @(posedge clk or negedge rst) begin
	if (!rst) begin
		dout_r <= 4'd0;
		valid_in_r <= 1'b0;
	end
	else begin
		if (cnt == 2'b11) begin 
			dout_r <= d;  
			valid_in_r <= 1'b1; 
		end
		else begin 
			dout_r[3:0] <= {dout_r[2],dout_r[1],dout_r[0],dout_r[3]}; 
			valid_in_r <= 1'b0; 

		end
	end
end

assign dout = dout_r[3];
assign valid_in = valid_in_r;

//*************code***********//

endmodule


http://www.kler.cn/news/328106.html

相关文章:

  • Git | Dockerized GitLab 安装使用(简单实操版)
  • 经典sql题(十四)炸裂函数的恢复
  • 【AIGC】ChatGPT提示词助力自媒体内容创作升级
  • 鸿蒙NEXT开发-ArkTS(基于最新api12稳定版)
  • 梯度检查点技术的使用
  • LINUX-线程
  • MySql基础34题写题记录(3-10)
  • 【tbNick专享】虚拟机域控、成员服务器、降级等管理
  • pip install kaggle-environments ISSUE:Failed to build vec-noise
  • MicoZone-Git
  • 深度剖析IT技术前沿:编织数字世界的未来篇章
  • 怎么通过AI大模型开发一个网站?
  • SQL第11课——使用子查询
  • 1.1.5 计算机网络的性能指标(下)
  • 作文网源码 范文论文网模板 带会员系统+支付接口+整站数据
  • docker_阿里云镜像仓库
  • 代码随想录算法训练营第56天 | 1、冗余连接,2、冗余连接II
  • 【数学分析笔记】第4章第2节 导数的意义和性质(1)
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-29
  • 谷歌发布Imagen 3,超过SD3、DALL・E-3,谷歌发布新RL方法,性能提升巨大,o1模型已证明
  • Python 封装 socket 为 [TCP/UDP/MULTICAST] 客户端
  • powerbi计算销售额同比增长率
  • MySql Explain优化命令使用
  • Vue实战教程:如何用JS封装一个可复用的Loading组件
  • 基于php的律所管理系统
  • leetcode 513 找到左下角的值
  • SQLite3模块使用详解
  • 使用WebClient 快速发起请求(不使用WebClientUtils工具类)
  • 测试面试题:pytest断言时,数据是符点类型,如何断言?
  • 【Python|接口自动化测试】使用requests发送http请求时添加headers