硬件语言Verilog HDL牛客刷题day10 华W部分 和 DJ部分

news2024/11/16 11:44:52

1. VL63 并串转换

1.题目:

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


2.解题思路

        2.1 计数记录输出的位数。

        2.2 数据 有一个延时。

        2.3 思路就是 搞一个寄存器存储数据,然后根据数据的位数来决定 计数的大小。


3.解题代码

`timescale 1ns/1ns
module huawei5(
	input wire clk  ,
	input wire rst  ,
	input wire [3:0]d ,
	output wire valid_in ,
	output wire dout
	);

//*************code***********//
parameter s0 = 3'd0;
parameter s1 = 3'd1;
parameter s2 = 3'd2;
parameter s3 = 3'd3;
reg[3:0] cnt;
reg[3:0] data;
reg valid;

assign dout = data[3];
assign valid_in = valid;

always@(posedge clk or negedge rst)
	begin
		if(~rst)
			begin
				cnt <=s0;
				valid <=0;
				data <=0;
			end
		else
			begin
				if(cnt == s3)
					begin
						cnt <=s0;
						valid <=1;
						data <= d;
					end
				else
					begin
						cnt <= cnt +1;
						valid<=0;
						data <= {data[2:0],data[3]};
					end
			end
	end


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

endmodule


2.VL64 时钟切换

1.题目:

存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,现在要设计一个切换电路,sel选择时候进行切换,要求没有毛刺。


2.解题思路

        2.1  两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,属于相关时钟,避免切换时毛刺出现,只需要在组合逻辑的基础上添加下降沿触发的DFF。原理图如下:  (专业知识无语)(新手小白我也不是懂,只能查资料)

        链接:手撕代码2 | 无毛刺时钟切换 - 知乎 (zhihu.com)

        

         2.2 我看这个题 需要自己看代码,了解一下。

         2.3 这个问题是关于 时钟的变化。防止出现毛刺, 就是防止信号突然变换。

         2.4 关于信号的突然变化 需要一个信号来决定是否现在输出   一个D 触发器来控制。

         2.5 主要是D触发器  有时钟,可以决定 信号是1/0  ,还有多余的口来输出相反的信号。


3.解题代码

`timescale 1ns/1ns

module huawei6(
	input    wire    clk0    ,
	input    wire    clk1    ,
	input    wire    rst     ,
	input    wire    sel     ,
	output   wire    clk_out
);
    reg q0, q1;
    
    always@(negedge clk0 or negedge rst)
        if(!rst)
            q0 <= 0;
        else 
            q0 <= ~sel & ~q1;
    
    always@(negedge clk1 or negedge rst)
        if(!rst) 
            q1 <= 0;
         else 
            q1 <= sel & ~q0;

    assign clk_out = (q0 & clk0) | (q1 & clk1);
    
endmodule



3.VL65 状态机与时钟分频

1.题目:

题目描述:    

使用状态机实现时钟分频,要求对时钟进行四分频,占空比为0.25


2.解题思路

        2.1  输出时序 1000

        2.1 使用状态机

        


3.解题代码

`timescale 1ns/1ns

module huawei7(
	input wire clk  ,
	input wire rst  ,
	output reg clk_out
);
parameter s0=2'd0;
parameter s1=2'd1;
parameter s2=2'd2;
parameter s3=2'd3;
reg[1:0]cnt;
//*************code***********//
always@(posedge clk or negedge rst)
	begin
		if(~rst)
			begin
				cnt <=s0;
			end
		else
			begin
				case (cnt)
					s0 : cnt <=s1;
					s1 : cnt <=s2;
					s2 : cnt <=s3;
					s3 : cnt <=s0;
				endcase
			end
	end

always@(posedge clk or negedge rst)
	begin
		if(~rst)
			begin
				clk_out <=0;
			end
		else
			begin
				case (cnt)
					s0 : clk_out <=1;
					default: clk_out <=0;
				endcase
			end
	end



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



4.VL66 超前进位加法器

1.题目:


2.解题思路 

        2.1 暴力直接位和位 的对应相加。

        2.2 采用模块化


3.解题代码

暴力方式

`timescale 1ns/1ns

module huawei8//四位超前进位加法器
(
	input wire [3:0]A,
	input wire [3:0]B,
	output wire [4:0]OUT
);
wire[3:0] C; 
//*************code***********//
assign OUT[0]=A[0]^B[0]^1'b0;
assign OUT[1]=A[1]^B[1]^C[0];
assign OUT[2]=A[2]^B[2]^C[1];
assign OUT[3]=A[3]^B[3]^C[2];
assign OUT[4]=C[3];
assign C[0]=A[0]&B[0]|(A[0]|B[0])&1'b0;
assign C[1]=A[1]&B[1]|(A[1]|B[1])&C[0];
assign C[2]=A[2]&B[2]|(A[2]|B[2])&C[1];
assign C[3]=A[3]&B[3]|(A[3]|B[3])&C[2];

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



//下面是两个子模块

module Add1  //计算 1 位数的C 
(
		input a,
		input b,
		input C_in,
		output f,
		output g,
		output p
		);
		
	assign g = a & b; 
	assign p = a | b;
	assign f = a ^ b ^ C_in;


endmodule






module CLA_4(
		input [3:0]P,
		input [3:0]G,
		input C_in,
		output [4:1]Ci,
		output Gm,
		output Pm
	);
	
endmodule

 模块化的方式

`timescale 1ns/1ns

module huawei8//四位超前进位加法器
(
	input wire [3:0]A,
	input wire [3:0]B,
	output wire [4:0]OUT
);

//*************code***********//
	wire [3:0] G,P,F;
	wire [4:1] C;

	Add1 inst0(
		.a 		(A[0]),
		.b 		(B[0]),
		.C_in 	(1'b0),
		.f 		(F[0]),
		.g 		(G[0]),
		.p 		(P[0])
	);

	genvar i;
	generate 
		for(i=1;i<4;i=i+1) begin:Add1_inst
			Add1 inst(
				.a 		(A[i]),
				.b 		(B[i]),
				.C_in 	(C[i]),
				.f 		(F[i]),
				.g 		(G[i]),
				.p 		(P[i])
			);
		end
	endgenerate

	 CLA_4 inst_cal(
		.P			(P),
		.G			(G),
		.C_in		(1'b0),
		.Ci			(C),
		.Gm			(),
		.Pm			()
	);

	assign OUT = {C[4],F};



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



//下面是两个子模块

module Add1
(
		input a,
		input b,
		input C_in,
		output f,
		output g,
		output p
		);

	assign g = a & b;
	assign p = a | b;
	assign f = a ^ b ^ C_in; //sum

endmodule



module CLA_4(
		input [3:0]P,
		input [3:0]G,
		input C_in,
		output [4:1]Ci,
		output Gm,
		output Pm
	);

	assign Ci[1] = G[0] | P[0] & C_in;
	assign Ci[2] = G[1] | P[1] & (G[0] | P[0] & C_in);
	assign Ci[3] = G[2] | P[2] & (G[1] | P[1] & (G[0] | P[0] & C_in));
	assign Ci[4] = G[3] | P[3] & (G[2] | P[2] & (G[1] | P[1] & (G[0] | P[0] & C_in)));

	assign Gm = G[3] | (P[3]&G[2]) | (P[3]&P[2]&G[1]) | (P[3]&P[2]&P[1]&G[0]);
	assign Pm = P[3]&P[2]&P[1]&P[0];
	
endmodule



5.VL67 十六进制计数器

题目:

请用Verilog设计十六进制递增计数器电路,每个时钟周期递增1。

电路的接口如下图所示。Q[3:0]中,Q[3]是高位。


2. 解题代码

`timescale 1ns/1ns

module counter_16(
   input                clk   ,
   input                rst_n ,
 
   output   reg  [3:0]  Q      
);

always@(posedge clk or negedge rst_n)
    begin
        if(~rst_n)
            begin
                Q <=0;
            end
        else
            begin
                if(Q == 4'd15)
                    begin
                        Q<=0;
                    end
                else
                    begin
                        Q <= Q+1;
                    end
            end
    end

endmodule



6.VL70 序列检测器(Moore型)

1.题目:

请用Moore型状态机实现序列“1101”从左至右的不重叠检测。
电路的接口如下图所示。当检测到“1101”,Y输出一个时钟周期的高电平脉冲。

接口电路图如下:


2. 解题思路

        2.1 主要是我们采用 状态机

        2.2 注意一个 不重叠检测。 (当我们检测到不对时,直接重新开始)

        2.3 注意 检测是连续的, 数据输出需要一个延时,不是当时满足直接输出。


3.解题代码

`timescale 1ns/1ns

module det_moore(
   input                clk   ,
   input                rst_n ,
   input                din   ,
 
   output	reg         Y   
);
//状态机 (先设置状态)
parameter s0 = 5'b00000;
parameter s1 = 5'b00001;
parameter s2 = 5'b00011;
parameter s3 = 5'b00110;
parameter s4 = 5'b01101;
reg[4:0] flag;


always@(posedge clk or negedge rst_n)
    begin
        if(~rst_n)
            begin
                flag <=s0;
            end
        else
            begin
                case (flag)
                    s0 : flag <= din ? s1 : s0;
                    s1 : flag <= din ? s2 : s0;
                    s2 : flag <= din ? s0 : s3;
                    s3 : flag <= din ? s4 : s0;
                    s4 : flag <= din ? s1 : s0;
                endcase
            end
    end

always@(posedge clk or negedge rst_n)
    begin
        if(~rst_n)
            begin
                Y <=0;
            end
        else
            begin
                if(flag == s4)
                    begin
                        Y <= 1;
                    end
                else
                    begin
                        Y <=0;
                    end
            end
    end


endmodule



7.VL71 乘法与位运算

1.题目:

进行一个运算单元的电路设计,A[7:0]*11111011,尽量用最少的资源实现,写出对应的 RTL 代码。

 


2. 解题思路

       2.1 一个简单的 乘法运算, 9'd1000_0000_0 =  8'b1111_1011 + 3'b100 + 1'b1;

        2.2 换算过来: 8'b1111_1011  =       9'd1000_0000_0  -  3'b100   -  1'b1;             

        2.2 再转换思维  数据* 8’b1111_1011 =  左移8位  - 左移 2位   - 数据*1;


3.解题代码

`timescale 1ns/1ns

module dajiang13(
    input  [7:0]    A,
    output [15:0]   B
	);
wire[15:0] A1;
//*************code***********//

// 9'b1000_0000_0 = 3'b100 + 1'b1 + 8'b1111_1011
assign A1 = {8'b0000_0000,A};
assign B = (A1<<8) - (A1 <<2)  -A1; 


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

endmodule

             


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

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

相关文章

【蓝桥系列】为什么不会「输入输出」,你一道题都做不出来?(输入输出模板)

欢迎各位旅行者&#xff0c;来到小蓝の蓝桥城&#xff01; 全文目录 &#x1f4d6;第一幕 「藏宝地图」 &#x1f33c; 输入 &#x1f331;输入一行 &#x1f331;输入多行 &#x1f33c; 输出 &#x1f331;输出 一个数 &#x1f331;输出 一维列表 &#x1f331;输出…

TCP知识

计算机网络模型 OSC(Open System Interconnect)采用分层的结构化技术&#xff0c;共分七层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&#xff0c;表示层&#xff0c;应用层。 TCP/IP模型共分四层&#xff1a;链路层&…

干货分享 | 图解如何写出优秀的项目总结?

不论是公司&#xff0c;还是个人&#xff0c;要不断地提升&#xff0c;就要不断地进行总结与改进&#xff0c;再总结再改进&#xff0c;如此循环&#xff0c;通过不断地总结与改进&#xff0c;改善我们的工作方法、优化工作流程、提升工作效率。 ​这就是PDCA基本思路&#xf…

ROS 教程之 vision : 用笔记本摄像头获取图像

如何用笔记本自带的摄像头采集图像 尝试一&#xff1a;安装Webcam 驱动 参考 大神白巧克力亦唯心博客&#xff1a; 链接: ROS 教程之 vision : 用各种摄像头获取图像. sudo apt-get install git-core cd ~/catkin_ws/src #catkin_ws/src对应你自己建立的catkin工作空间…

区间动态规划

区间DP 石子合并&#xff1a;前缀和动态规划最长合法子序列环形石子合并石子合并 II城镇国王超级括号序列炸弹人 区间DP&#xff1a; 状态&#xff1a;区间左右端点 dp[i][j]阶段&#xff1a;区间长度转移&#xff1a;由外到内 石子合并&#xff1a;前缀和动态规划 问题特征&…

第3章 数据科学的5个步骤

第3章 数据科学的5个步骤 文章目录 第3章 数据科学的5个步骤3.1 数据科学简介3.2 5个步骤概览3.2.1 提出有意思的问题3.2.2 获取数据3.2.3 探索数据3.2.4 数据建模3.2.5 可视化和分享结果3.3.1 数据探索的基本问题3.3.2 数据集1&#xff1a;Yelp点评数据DataFrameSeries定性数据…

Steam无法载入网页 - 解决方案

前言 用户在使用Steam客户端时经常会遇到无法载入网页的情况&#xff0c;如下图。下文介绍解决方案。 解决方案 检查防火墙 打开Windows设置&#xff0c;选择更新和安全&#xff0c;选择Windows安全中心 - 防火墙和网络保护&#xff0c;如下图&#xff1a; 点击允许应用通…

提升业务韧性的最佳路径,亚马逊云科技帮您打开成本优化的路径

众所周知&#xff0c;当你想要从头开始建立一个云财务管理计划似乎是稍有难度的。因此&#xff0c;亚马逊云科技解构了4个云财务管理CFM原则——查看、节省、计划和运营——并分享可以实施的操作指南&#xff0c;帮助您在云上取得成功。 云成本管理工具 亚马逊云科技提供一系…

学生信息管理系统(student information manage system, SIMS)

一、前言 本项目为学生信息管理系统&#xff0c;使用C语言编写。 ★★★项目详见本人gitee仓库&#xff0c;地址 https://gitee.com/omnipotent-brother/student-information-manage-system.git ★★★ 二、项目介绍 开发环境&#xff1a; 基于windows 11系统下的Visual Studio…

SQL Server 服务器安装配置和使用

目录 一、SQL Server概述 1、SQL Server 环境需求 2、SQL Server的特点和组成 &#xff08;1&#xff09;SQL Server 特点 &#xff08;2&#xff09;SQL Server 基本组成 3、SQL Server 安装需注意 &#xff08;1&#xff09;数据文件的存储位置 &#xff08;2&#xf…

【Visual Studio Code】编码速度提升小技巧

简言 用了这么久的vscode。在此记录下我常用的快捷键和小技巧。 小技巧 这个是vscode的工作界面。 值得一提的是&#xff0c;界面下边一行是快捷显示信息和快捷操作。可以快速了解打开文件的描述信息。 使用扩展 在使用vscode的时候&#xff0c;一定要安装相应的扩展包。 扩…

08 - 智能编程语言

一、为什么需要智能编程语言 1. 语义鸿沟 传统C/C++等是以面向通用计算的加、减、乘、除等基本标量操作为基础的,通常不具有和具体任务及应用场景相关的高层语义。例如:使用纯标量计算的C++语言编写的卷积运算包含7重循环,而采用向量语义的Python语言编写的卷积运算只需要…

PowerToys——免费、强大、高效的微软官方效率提升工具集,办公学习宝藏软件

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——宋苏轼 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、简单介绍1、PowToys是什么&#xff1f;2、它的功能有哪些&#xff1f; 二、下载安装三、功能示例1、始终置顶2、…

弱算法MD5、SHA1、DES、AES CBC-修复建议

一、修复原则 修复原则上2条走&#xff1a; 1、新产品、新业务 不应使用弱算法&#xff0c;如果使用应及时修复 2、已经产品 【金融类】业务应自行根据涉及广度 排期修复 【非金融】 类&#xff0c;在修复难度大、涉及面广的情况下 可以暂时不修复&#xff0c;择机修复。 …

线程等待其他线程执行同步类CountDownLatch

文章目录 前言核心原理源码解析同步源码分析await源码分析countDown源码分析 实战演示1、创建演示代码2、创建测试用例3、测试结果演示 写在最后 前言 大家都知道多线程在我们实际编码过程中运用很多&#xff0c;很多情况我们需要靠多线程来提升系统性能。但是有些时候我们需要…

Flink系列-7、Flink DataSet—Sink广播变量分布式缓存累加器

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址&#xff1a;https://flink.apache.org/ 学习资料&#xff1a;https://flink-learning.org.cn/ 目录 数据输出Da…

图的简单处理(C/C++)

目录 1 存图方法 1.1 邻接矩阵 1.2 邻接表 1.3 链式前向星 2 树形DP 2.1 简介 2.2 例题1&#xff1a;公司聚会 2.3 例题2&#xff1a;士兵部署 2.4 例题3&#xff1a;强力党逗志芃 2.5 例题4&#xff1a;作物杂交&#xff08;不确定树的结构&#xff09; …

N1盒子使用U外挂HomeAssistant

目录 感谢1.准备工作2.将固件写入U盘&#xff08;32G&#xff09;3.将N1设为U盘启动4.将U盘插入到HDMI旁边的USB接口上5.网页打开HomeAssistant 感谢 HomeAssistant智能家居方案 配套教程 视频 源码 硬件 智能家庭HomeAssistant N1 4月全集成固件 小米米家涂鸦HASS nodered m…

Python图像处理【12】基于小波变换执行图像去噪

基于小波变换执行图像去噪 0. 前言1. 小波变换基础2. 小波变换去噪原理3. 使用 pywt 执行小波变换图像去噪4. 使用 scikit-image 执行小波变换图像去噪4.1 循环旋转技术4.2 改进图像去噪质量 小结系列链接 0. 前言 小波 (wavelets) 变换是表示和分析多分辨率图像的通用方法&am…

上海震坤行工业超市建设数字化采购供应链的实践

上海震坤行工业超市建设数字化采购供应链的实践 对客户而言&#xff0c;MRO工业用品采购一直存在着SKU繁杂、紧急需求多、计划性不强、库存难以管理等特点。有企业统计&#xff0c;MRO零星采购金额占其全类目采购总金额的2%&#xff0c;但是用于管理的时间精力却占到了总体的6…