Verilog经典题(一)——边沿检测、格雷码与二进制码的转换

2024-03-02 07:08

本文主要是介绍Verilog经典题(一)——边沿检测、格雷码与二进制码的转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 边沿检测
    • 思路
    • 代码
    • 波形&总结
  • 格雷码与二进制码的转换
    • 思路
    • 代码
    • 波形&总结

边沿检测

实现信号边沿检测功能,输出一个周期宽度的脉冲信号

思路

边沿的两侧信号是相反的。
上升沿 = ~res[0] && res[1]
下降沿 = res[0] && res[1]
边沿 = 上升沿 | 下降沿 = res[0] ^ res[1]
输入信号 clk,rst,din输出 o1,o2,o3。定义寄存器类型res[1:0]

代码

Verilog代码

module edge_detect(input 	clk,input	rst,input 	din,output 	o1,	//上升沿output 	o2,	//下降沿output 	o3	//边沿
);reg	[1:0]res;always @ (posedge clk or negedge rst)	beginif( !rst )res	<= 2'b00;elseres	<= {res[0], din};	endassign o1	= (~ res[1]) && res[0];assign o2	= res[1] && (~ res[0]);assign o3	= res[1] ^ res[0];
endmodule

testbench测试代码

module edge_detect_tb();reg clk;reg rst;reg din;wire pos_edge;wire neg_edge;wire data_edge;initial beginforever #5 clk <= ~clk;endinitial beginclk = 0;rst = 0;din = 0;#10 rst = 1;#20 din = 1;#20 din = 0;endedge_detect tb1(.clk(clk),.rst(rst),.din(din),.o1(pos_edge),.o2(neg_edge),.o3(data_edge));
endmodule

波形&总结

在这里插入图片描述

verilog模块中要定义基本硬件逻辑。
tb文件里需要定义:所有信号是reg还是wire类型,clk的周期,clk和rst以及其他输入信号的初始值,模块连接。

格雷码与二进制码的转换

用函数实现转换,tb调用函数

思路

格雷码的构造方法为:直接排列以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反覆,即可排列出n个位元的格雷码。
在这里插入图片描述
二进制转为格雷码
保留二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。

data_out = (data_in >> 1) ^ data_in ;

格雷码转为二进制
保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。

data_out[WIDTH] = data_in[WIDTH]; //最后一位相同for(i=WIDTH-1; i>=0; i=i-1)data_out[i] = data_out[i+1] ^ data_in[i];  

输入:op控制转换方向,[Width:0]data_in
输出:[Width:0]data_out

代码

module GRAY_tb();parameter WIDTH = 4;parameter ENCODE = 1'b0;parameter DECODE = 1'b1;function [WIDTH:0] data_out(input op,input [WIDTH:0]data_in);integer i;begin if (op == 1'b0) data_out = (data_in >> 1) ^ data_in;else if (op == 1'b1) begin data_out[WIDTH] = data_in[WIDTH];for(i = WIDTH-1; i >=0 ; i = i-1)data_out[i] = data_out[i+1] ^ data_in[i];endendendfunction/* parameter WIDTH = 4;parameter ENCODE = 1'b0;parameter DECODE = 1'b1; */reg clk;reg rst;reg [WIDTH-1:0] data_in;wire [WIDTH-1:0] data_encode;wire [WIDTH-1:0] data_decode;initial beginclk = 0;rst = 0;#5 rst = 1;#50 rst = 0;end initial begin forever #2 clk = ~clk;endalways @(posedge clk or negedge rst)beginif(!rst)data_in = 0;else data_in = data_in + 1'b1;endassign data_encode = data_out(ENCODE,data_in);assign data_decode = data_out(DECODE,data_encode);endmodule

波形&总结

在这里插入图片描述

掌握格雷码的编码原则
掌握二进制和格雷码的转换规律。


此篇文章为本人在学习初期找到的前人的总结做的学习记录,仅供参考。原作者文章如下
https://blog.csdn.net/xvrixingkong/article/details/108803428
https://blog.csdn.net/xvrixingkong/article/details/108803439

也不知道这么说一声算不算不侵权了?可是我真就是学习的时候顺便记录一下,初期学也形不成自己的代码。。如果出问题再说吧,写于2021.2.19

这篇关于Verilog经典题(一)——边沿检测、格雷码与二进制码的转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765301

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.