【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;

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

设计思路:

①计数器模块

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

cpp 复制代码
reg [1:0] cnt;
//计数器cnt部分
/*注意: 此处必须为非阻塞赋值语句*/
always @(posedge clk or negedge rst) begin
	if (!rst) cnt <= 2'b00;
	else cnt <= cnt + 2'b01;
end
②移存器部分
cpp 复制代码
//移位寄存器部分
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;

完整代码

cpp 复制代码
`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
相关推荐
芯路行者12 小时前
7 HDLBits —— 验证:编写测试激励文件
fpga开发·verilog·fpga·hdlbits
启雀AI12 小时前
培训平台移动端离线学习方案设计与实现:视频缓存、断点续传与进度同步的工程实践
android·学习·缓存·音视频·企业lms
芯路行者13 小时前
4.1 HDLBits —— 时序逻辑电路之锁存器与触发器
fpga开发·verilog·fpga·hdlbits
Bruce_Liuxiaowei15 小时前
从零到可运行:基于 Vue3 + FastAPI + DeepSeek-V3 的 AI 英语单词学习系统全栈实战
人工智能·python·学习·fastapi·全栈·智能体
芯路行者16 小时前
5 HDLBits —— 构建更大的电路
fpga开发·verilog·fpga·hdlbits
雪的季节16 小时前
OPENCV学习(补充1)
人工智能·opencv·学习
1560820721917 小时前
直流耦合采集卡前端电路调试
嵌入式硬件·fpga开发
芯路行者17 小时前
4.3 HDLBits —— 时序逻辑电路之移位寄存器
fpga开发·verilog·fpga·hdlbits
zjnlswd17 小时前
C#学习笔记2 刘铁锰
笔记·学习
zyf10441617 小时前
暑期实践日志 Day29:检核视频导出,准备素材上交
学习·计算机网络·剪辑·暑期实践·课题任务