EDA 技术实用基础学习(Verilog HDL版)
文章平均质量分 92
张明阳.
电子信息工程专业大学生
展开
-
Sobel边沿检测
边缘检测,针对的是灰度图像,顾名思义,检测图像的边缘,是针对图像像素点的一种计算,目的是标识数字图像中灰度变化明显的点,图像的边缘检测,在保留了图像的重要结构信息的同时,剔除了可以认为不相关的信息,大幅度减少了数据量,便于图像的传输和处理。基于查找,零穿越的方法,Sobel算法准确率较低,效率高,基于Sobel算子。原创 2024-09-06 23:38:28 · 865 阅读 · 0 评论 -
FIFO求和实验
现有一5行4列数据矩阵FIFO求和,对该矩阵数据,N = 5,M = 4,使X = 3进行列求和运算,得到S(3,4)新矩阵,则S(0,0)=D(0,0)+D(1,0)+D(2,0),S(0,1)= D(0,1)+D(1,1)+D(2,1),S(0,2)=D(0,2)+D(1,2)+D(2,2),S(0,3)=SD(0,3)+D(1,3)+D(2,3),S(1,0)=D(1,0)+D(2,0)+D(3,0)...S(2,0)=D(2,0)+D(3,0)+D(4,0)。原创 2024-09-04 20:08:22 · 1065 阅读 · 0 评论 -
基于DS18B20的温度检测
每个DS18B20的片内ROM都存有一个独一无二的64位编码。在该ROM编码的低8位保存有DS18B20的分类编码:28h;中间的48位是独一无二的序列号;最高8位是前面56位的CRC循环冗余校验码 (CRC=X8+X5+X4+1)。因为每个DS18B20的序列号都不一样,所以一条总线上可以控制多个DS18B20。温度测量方法:DS18B20中的温度传感器可完成对温度的测量,他的温度转换精度用户可自定义为9、10、11、12位,精度分别为0.5℃、0.25℃、0.125℃、0.0625℃分辨率。原创 2024-08-31 22:09:17 · 2665 阅读 · 0 评论 -
基于RS232的VGA显示
使用PC机通过RS232(50Mhz)连接FPGA开发板,通过RS232向FPGA发送图片数据,FPGA将图片数据缓存到RAM,使用FPGA的VGA接口驱动屏幕,将传入的数据进行读取,从而完成基于RS232的VGA显示。(640*480*60hz)(25.1Mhz)这里利用RAM进行跨时钟域进行数据处理,并存储数据。ip核PLL使用的时钟输入为开发板载时钟,当使用锁相环时,系统时钟只能用在锁相环输入,不建议将系统时钟再做其他模块的驱动模块时钟,其他模块时钟可以使用锁相环输出。原创 2024-08-29 21:30:43 · 747 阅读 · 0 评论 -
基于ROM的VGA显示
首先需要将目标图片数据转化为基于RGB的颜色数据,这里使用一张像素为100*100的图片作为演示,100*100,使用RGB332编码方式数据宽度为8bit,数据深度10000;使用matlab进行数据提取WIDIH = 8;1 :bb;2 :bb;3 :bb;4 :bb;5 :bb;6 :bb;7 :bb;8 :bb;9 :bb;10 :bb;11 :bb;12 :bb;13 :bb;14 :bb;15 :bb;原创 2024-08-28 21:46:14 · 791 阅读 · 0 评论 -
TFT_LCD屏幕显示设计验证
液晶显示(LCD,Liquid Crystal Display)技术是一种常见的显示技术,其工作原理主要涉及液晶材料的光学特性和电场控制。以下是液晶显示的基本原理:液晶材料是一种介于固体和液体之间的物质,它们的分子排列在不同的电场作用下会发生变化。液晶显示器常用的液晶材料有两类:向列型(Nematic)和光束型(Smectic)。液晶显示器通常由两个偏振片(一个在前面,一个在后面)组成。偏振片能够只允许特定方向的光通过,从而控制光线的传播方向。在两个偏振片之间,液晶层是显示器的核心部分。原创 2024-08-27 17:31:04 · 724 阅读 · 0 评论 -
频率检测计
误差不大于10ns,1/(10ns/10^9)=100Mhz,需要完成目标精度需要标准时钟为100Mhz。常用频率测量法:频率测量法、周期测量法、等精度测量法。频率测量法:在时间T内对被测时钟信号的时钟周期N进行计数,然后求出单位时间内的时钟周期数,即为被测时钟信号的时钟频率。(在T时间内记N个周期,F= N/T,不能保证周期的整数倍,因而产生一个周期的误差,当T较小时,误差对测量精度影响较大,因此在低频信号测量下误差较大,常用于高频信号测量)原创 2024-08-17 21:01:19 · 1160 阅读 · 0 评论 -
红外遥控设计验证
红外遥控编码协议NEC协议:采用的是PPM(Pulse Position Modulation,脉冲位置调制)进行编码。当我们按下遥控器的一个按键时,会发送一帧的数据。这一帧数据由引导码、地址码、地址反码、数据码、数据反码以及一位结束位(可忽略)组成。RC-5协议:它通过脉冲宽度调制技术,使用曼彻斯特编码的方式传输数据,确保了数据传输的准确性和可靠性。RC-5协议的数据包包括起始位、地址位和命令位,能够识别不同的设备并发出具体的操作指令。原创 2024-08-18 22:51:44 · 984 阅读 · 0 评论 -
HDMI接口驱动设计验证
在hdmi的规格书中规定了4种接口类型,即 Hdmi a type接口, Hdmi b type 接口, Hdmi c type接口, Hdmi d type接口。B type只出现在规格书中,市面上未使用,市面上经常使用acd接口,a接口较多。三种接口都使用19片引脚,三种接口不同于线序,其中体积最小的是 D type接口。对hdmi引脚,有19片引脚总共分为4类, Tmds类:进行音频视频数据传输和一些辅助数据;原创 2024-08-26 19:15:29 · 1096 阅读 · 0 评论 -
UART通信实现与验证(RS485)
RS-485是双向、半双工通信协议,信号采用差分传输方式,允许多个驱动器和接收器挂接在总线上,其中每个驱动器都能够脱离总线。适合远距离传输(最远1200米,最快10MB/s),RS232适合一主机一从机,RS485允许多主机和多从机的连接,抗干扰能力强。RS485工作时,通过差分信号线检测传输到来的电平信号,通常检测该电平信号有专用的RS485收发器芯片,该类芯片可以检测到低至200MV的电平信号,不同于RS232收发器芯片的是该芯片需要有一使能信号进行数据传入/传出使能。原创 2024-08-16 22:19:35 · 1593 阅读 · 0 评论 -
UART通信实现与验证(RS232)
常用的三种低速数据总线:UART,SPI,IIC,UART 通用异步收发传输器,全双工通信,UART是一种通用的数据通信协议,也是异步串行通信口(串口)的总称,它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。包括RS232、 RS499、 RS423、 RS422和RS485等接口标准规范和总线标准规范。SPI 串行外围接口,是一种用于串行数据传输的协议,用于微控制器和外围设备之间的通信。原创 2024-08-15 23:15:40 · 2071 阅读 · 0 评论 -
VGA显示字符
VGA驱动原理请参考:VGA接口驱动设计验证本章讲解如何显示字符: 首先需要一取字模的工具,这里使用PCtoLCD2002(资料私信1发送)输入需要取模的字符,设置字符大小:这里设置单个字母的空间,为字符画区域这里设置单个字母大小,设置字符的高矮胖瘦以上需要自行设置,在下方对话框中输入需要显示的字符,先另存为.BMP文件,再次使用该软件打开保存的.BMP文件。点击选项,进行如下图配置点击确定,点击生成字模,保存字模,以下为字模提取结构。原创 2024-08-14 21:54:18 · 992 阅读 · 0 评论 -
VGA接口驱动设计验证
首先我们看一下 VGA 接口的电路原理图VGA_VS是场脉冲信号,VGA_HS是行脉冲信号,VGA_R/G/B对应颜色数据。FPGA芯片直接与 VGA 接口相连,并没有特殊的外部芯片,也就是说,唯一要关注的可能就是它的显示原理和时序了。那么接下来我们具体来看一下 VGA 的扫描原理是什么。原创 2024-08-03 20:51:36 · 1062 阅读 · 0 评论 -
简易电压表设计验证
模数转换器即AD转换器,或简称ADC(Analog to DigitalConver),通常是指一个将模拟信号转变为数字信号的电子元件或电路。将经过与标准量比较处理后的模拟量转换为以二进制数值表示的离散信号。模拟信号向数字信号的转换过程一般分为四个步骤:采样、保持、量化、编码。通常量化,编码在ADC芯片中进行,常用ADC芯片有积分型、逐次逼近型、闪烁型、流水线型本实验的数据采集需要借助于AD转换模块,该模块使用芯片AD9280,是一款并行8位宽,采样率32M,电压范围+5V,到-5V。原创 2024-08-19 20:25:04 · 1039 阅读 · 0 评论 -
DDS载波发生器
假设已经将正弦波数据(256个)存储到rom中,假设利用驱动时钟控制rom地址一个时钟周期变换一次,那么产生的正弦波频率为:1/256*20(ns) =195.3125khz。如果不能改变驱动时钟频率,如果将产生的正弦波频率增大,控地址在每一次变化加2,只能怪读取128个数据,产生的正弦波频率为:390.625khz,在不改变驱动时钟频率,同时也不能丢失正弦波数据,控制地址两个驱动时钟周期变化一次,那么产生的正弦波频率为:(1/256*20(ns))/ 2 = 97.656khz;原创 2024-07-27 21:05:57 · 1074 阅读 · 0 评论 -
调用IP实现数据加速
双端口RAM:拥有两个独立的读写端口,可同时进行读写操作。提供了更高的数据吞吐量和更低的访问延迟,适用于需要并行处理的应用场景。异步FIFO:通过内部的读写指针和状态标志位,实现了数据的无缝缓冲和处理,有效解决了数据传输中的速率不匹配问题。是一种先进先出(FIFO)的数据缓存器,能够跨时钟域进行数据传输。RAM(Random Access Memory,随机访问存储器):RAM是一种易失性存储器,即断电后存储的数据会丢失。它支持随机读写,这意味着可以跳过前面的内存地址,直接对任何地址上的数据进行访问。原创 2024-08-02 19:42:39 · 1200 阅读 · 0 评论 -
移位寄存器
这里可以使用Shift_register的ip核来实现功能In[7:0]是从rom中读出的数据,用一个计数器作为rom的地址,每次地址加1,将移位寄存器比作“fifo”在计数器记到16时,in[7:0]当前数据为地址16的数据此时在Shiftout0[7:0]输出该数据,在Shiftout1[7:0]输出地址为8的数据,Shiftout2[7:0]输出地址为0的数据。在后续计数会依次输出1、9、17地址上的数据,直到扫描完整个rom。原创 2024-08-07 17:03:37 · 1704 阅读 · 0 评论 -
IP核FIFO调用及验证(2)
异步FIFO(先进先出)的读写逻辑是为了在两个不同时钟域之间可靠地传输数据。由于写操作和读操作使用不同的时钟信号,因此需要特别的逻辑来处理这些异步时钟之间的数据传输。下面是异步FIFO的读写逻辑的基本工作原理:写操作:当写使能信号有效(通常是高电平)时,写指针会在写时钟信号的上升沿或下降沿更新。数据会被写入FIFO存储区中由写指针指定的位置。写指针在写入数据后会递增,循环回到FIFO的起始位置(即实现循环缓冲)。读操作:当读使能信号有效时,读指针会在读时钟信号的上升沿或下降沿更新。原创 2024-08-01 20:51:29 · 890 阅读 · 0 评论 -
IP核FIFO调用及验证(1)
fifo有同步和异步之分,同步fifo表示写入的控制时钟和读取的控制时钟为相同的时钟信号;异步fifo表示写入的控制时钟和读取的控制时钟为不同的时钟信号;同步fifo就可以将其作为一个在相同时钟域下缓存器;异步fifo可以用来进行跨时钟域数据信号处理。本章节只进行同步FIFO验证同步fifo验证:可以控制将256个数据写入到fifo中,当写满时再控制从fifo中将数据读取出来。原创 2024-07-29 19:44:57 · 733 阅读 · 0 评论 -
IP核RAM调用及验证(2)
在IP核RAM调用及验证(1)中初步使用ip核RAM进行数据写入与输出,用到单端口RAM进行实验。既然提到单端口,则有双端口与之对应,单端口RAM和双端口RAM都是用于存储数据的内存类型,但它们在设计和功能上有一些不同。下面总结二者异同之点:单端口RAM: 单端口RAM只有一个读写端口,通常是一个读端口和一个写端口的组合。在同一时刻,它只能进行读取或写入操作,而不能同时进行两者。也就是说,在任何给定时刻,你只能读取数据或者写入数据,但不能同时进行。设计相对简单,成本较低。原创 2024-08-01 00:07:56 · 1259 阅读 · 0 评论 -
IP核RAM调用及验证(1)
在写入时需要根据写地址控制数据写入到该地址上,地址和数据需要保持同拍,在同一个时钟周期下,同时也需要写使能信号wren进行控制写入。在读取时需要根据读地址读取当前地址上的数据,在对读使能信号rden没有进行设置时,默认读使能信号一直有效。单端口ram只有一个地址变量,那么地址变量就包含两层含义:写地址含义,读地址含义;在写使能和读使能同时有效时,地址变量既是写地址,同时也表示读地址。将Ip核rom中的数据写入到单端口ram中,并全部读取出来,在写入时不进行数据的读取。原创 2024-07-28 16:37:28 · 1040 阅读 · 0 评论 -
IP核ROM调用及验证
只读存储器(Read-Only Memory,ROM)以非破坏性读出方式工作,只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。ROM所存数据通常是装入整机前写入的,整机工作过程中只能读出,不像随机存储器能快速方便地改写存储内容。ROM所存数据稳定 ,断电后所存数据也不会改变,并且结构较简单,使用方便,因而常用于存储各种固定程序和数据。ROM是"Read-Only Memory"的缩写,意为只读存储器。原创 2024-07-26 23:07:24 · 823 阅读 · 0 评论 -
IP核锁相环调用及验证
调用ip核,在工具栏找到tools 点击其目录下megawizard plug-ln manager (创建ip核向导)勾选create a new custom ...点击next ,跳出一个新页面上图左边installed plug ins目录下是该版本软件支持的ip核目录,本项目选择在IO目录下的ALTPLL,后选择使用的语言,这里勾选verilog HDL ,路径放在prj文件夹下,(也可以在prj中新建ip文件夹),命名IP名字,这里用my_pll.原创 2024-07-25 22:32:32 · 953 阅读 · 0 评论 -
数码管进阶设计验证
驱动部分请参考简易数字钟本章节重在介绍如何使数码管显示正负号于小数点:对于在之前做的数码管驱动模块有很多不足:输入数据为BCD码,并且只能输入BCD码,输入数据如果是二进制数据,数码管显示是错误的。input clk,input [23:0] data_in,//接收数字时钟信号output reg [2:0] sel,//位选信号output reg [7:0] seg//段选信号。原创 2024-08-24 22:04:31 · 1249 阅读 · 0 评论 -
二进制数转BCD码
在本设计中,使用逐步移位法来实现二进制数向BCD码的转换,在设计之前,先来了解一下二进制数向BCD码转换的原理——逐步移位法。1.变量定义• B:需要转换的二进制数位宽。• D:转换后的BCD 码位宽。其中BCD码的位宽计算如下:根据二进制数的位宽。求出它的无符号数能表示的最大值和最小值,如数据位宽是8位,则数据范围大小就是0~255,我们取最大值255,每一个数字对应4位BCD码,三个数字就对应3×4=12位的BCD码。• N:需要转换的二进制数位宽加上转换后的BCD码位宽。原创 2024-08-04 15:11:11 · 1421 阅读 · 0 评论 -
串行并行数据转换
并转串的设计思想:首先准备好一组寄存器,把需要发送的数据(并行数据)放到这个寄存器组里面,然后通过位拼接的移位方式把这个并行数据一位一位地发送给接收端,同时拉高标志信号en,当全部数据发送完之后,再把标志信号en拉低。串转并的设计思想:准备好一组寄存器,接收串行数据,将数据按位移入寄存器组,然后将整个寄存器组的数据组合成一个完整的并行数据字。使用一组寄存器暂时存储数据,然后逐位将数据移出至串行输出端,同时使用标志信号指示何时数据转换完成。原创 2024-08-06 21:36:34 · 1567 阅读 · 0 评论 -
可调数字时钟
利用三个独立按键实现调时功能,第一个独立按键实现控制调节模式选择功能,其对应的调节模式包含:调节小时十位,调节小时个位,调节分钟十位,调节分钟个位,调节秒十位,调节秒个位;利用另外两个按键实现加减功能。利用有限状态机进行设计描述,根据调节模式的设置,将对时功能实现设置为7个状态,分别为:1: 正常显示状态,对加减按键进行操作时产生的标志信号无效。原创 2024-07-24 23:35:44 · 966 阅读 · 0 评论 -
简易数字钟
数码管驱动电路讲解需要6个八段数码,下面介绍一位数码管怎么驱动:1.静态驱动方式led静态显示时,其公共端接地(共阴极)或接电源(共阳极),各段选线分别与I/O口接线相连。要显示字符,直接在I/O线发送相应的字段码。优点: 静态显示结构简单,显示方便,要显示某个字符直接在IO线上发送相应的字段码缺点: 一根数码管需要8根IO线,数码管比较多时候,非常占用IO线。2.动态驱动方式动态驱动方式是将所有的数码管的段选线并接在一起,用一个IO接口。原创 2024-07-23 20:50:23 · 761 阅读 · 0 评论 -
可乐机的设计验证
使用 `parameter` 定义了三个状态:`wit`(等待状态),`one`(状态一),`two`(状态二)。设置状态寄存器:`stater` 是一个 3 位宽的寄存器,用于存储当前状态。在时钟上升沿或复位信号的下降沿触发时,状态机根据当前状态和 `po_money` 的值决定状态转移。`wit` 状态下,若收到投币信号,则转到 `one` 状态,否则保持在 `wit`。`one` 状态下,若再次收到投币信号,则转到 `two` 状态,否则保持在 `one`。原创 2024-08-13 11:29:38 · 680 阅读 · 0 评论 -
呼吸灯设计验证
使用三个计数器(cnt_1uscnt_1ms和cnt_1s)来生成一个较慢的时钟信号。这些计数器分别用于微秒、毫秒和秒级别的时间计算。cnt_1us计数器用于生成1微秒的时间脉冲,cnt_1ms计数器用于生成1毫秒的时间脉冲,cnt_1s计数器用于生成1秒的时间脉冲。cnt_1s计数器在cnt_1ms达到最大值时更新,达到最大值时重置为0。cnt_1ms计数器在cnt_1us达到最大值时更新,达到最大值时重置为0。cnt_1us计数器在每个时钟周期上升沿更新,达到最大值时重置为0。呼吸灯控制:在。原创 2024-08-12 22:16:42 · 640 阅读 · 0 评论 -
独立按键控制LED灯
独立按键控制LED灯项目旨在通过简单的电路设计和基础编程,实现按键对LED灯的开关控制。这个项目帮助你理解LED灯的工作原理和基本电路连接,同时提高你对电子元件的认识和实践技能。通过搭建电路并进行调试,你将掌握如何独立控制LED灯,从而为进一步学习电子技术打下坚实基础。 通过开发板外设独立按键和led,利用独立按键控制led依次循环点亮,Led的变化方式为:1234321,对独立按键操作有一次Led灯点亮往左或者往右移动。 本项目结合前两期工程进行设计,Led的变化方式为:123原创 2024-07-22 16:12:05 · 1194 阅读 · 0 评论 -
独立按键消抖
将对按键进行一次操作划分为四个状态,分别为:空闲状态,下抖动状态,稳定状态,上抖动状态。空闲到下抖动状态的条件为:检测到按键的电压值变化为0。下抖动状态到稳定状态的条件为:延时计数器cnt计数到最大值:假设我们对按键进行检测的时钟频率为1khz,那么最大值为:9;稳定状态到上抖动状态的条件为:检测到按键的电压值变化为1。上抖动状态到空闲状态的条件为:延时计数器cnt计数到最大值。状态执行动作空闲表示对按键没有操作下抖动表示刚开始对按键进行操作稳定标志信号flag只拉高一个驱动时钟周期。原创 2024-07-20 15:54:38 · 846 阅读 · 0 评论 -
简易流水灯
假设LED灯高电平点亮,利用有限状态机理论,设计验证将开发板上集成的led外设依次点亮,从左到右依次点亮(12341234)。将每点亮一个Led灯作为一个状态,那么依次点亮一次可以划分为4个状态,每一个状态执行的动作(输出)点亮对应的led灯,每一个状态持续的时间为:设置为1秒钟。状态之间跳转的条件为:延迟计数器计时到1秒钟。什么是状态机?状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作,完成特定操作的控制中心。原创 2024-07-19 22:00:27 · 934 阅读 · 0 评论 -
计数器分频设计
计数器是数字系统中常用的基本逻辑器件,用于统计输入时钟脉冲的个数,并可以实现分频、定时、产生节拍脉冲和脉冲序列等功能。计数器的设计原理涉及多个方面,包括计数器的类型、结构和工作原理。本文介绍基于FPGA设计的简易计数器。原创 2024-07-18 17:18:44 · 1199 阅读 · 0 评论 -
可编程逻辑设计原则
面积指FPGA逻辑器件的逻辑资源。在逻辑器件资源有限,设计规模庞大的情况下,必须采用牺牲速度以减少资源消耗,节约面积。例如,减少实例化模块数量,分时复用模块。以上是用一个查找表ROM模块在7个周期内实现4组十六进制数转换为十进制数的程序,下面是在4个周期内实现4组十六进制数转换为十进制数的程序。原创 2024-08-09 22:00:08 · 969 阅读 · 0 评论 -
软件使用及安装(2)
在理解和掌握EDA技术及相关工具的基础知识后,设计和验证半导体芯片、FPGA设计、电路板和微芯片等复杂硬件系统的工程师们可以更加高效地工作。这些工具可以覆盖从高层次设计到物理实现的所有步骤,包括代码的编辑、综合、仿真、逻辑综合、布局与布线以及后续的修正和优化。EDA工具具有内置的调试和优化功能,可以在设计阶段就发现问题和潜在的性能瓶颈,并能够帮助工程师在设计进入昂贵的原型阶段之前就加以解决。EDA之所以被广泛采用,正是因为它能够显著提高设计的质量和可靠性,而减少设计时间和成本。原创 2024-07-18 10:52:50 · 1184 阅读 · 0 评论 -
软件使用及安装(1)
fpga开发工具Quartus II 13.1安装:下载准备:由于安装软件需要进行软件解锁,在下载文件时需要关闭电脑病毒和威胁保护,未关闭会导致部分文件缺失。原创 2024-07-17 22:00:12 · 3040 阅读 · 4 评论 -
Verilog基础语法
是一种硬件描述语言,用于描述数字电路的行为和结构。它通过模块化的方式来组织设计,每个模块包含输入、输出端口和内部逻辑。Verilog 提供了丰富的语法结构,可以描述从简单的逻辑门到复杂的处理器架构的各种数字电路设计。对于其格式也有一定的规范(如下图,该实例为一简易分频器),下面对其语法进行具体介绍。原创 2024-07-17 17:54:30 · 815 阅读 · 0 评论 -
Verilog HDL介绍
Verilog HDL(简称 Verilog )是一种硬件描述语言,用于数字电路的系统设计。可对算法级、门级、开关级等多种抽象设计层次进行建模。Verilog 继承了 C 语言的多种操作符和结构,与另一种硬件描述语言 VHDL 相比,语法不是很严格,代码更加简洁,更容易上手。Verilog 不仅定义了语法,还对语法结构都定义了清晰的仿真语义。因此,Verilog 编写的数字模型就能够使用 Verilog 仿真器进行验证。原创 2024-07-17 11:42:23 · 918 阅读 · 1 评论