自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 收藏
  • 关注

原创 Verilog语法之函数function的讲解

Verilog 用关键字 automatic 来对函数进行说明,此类函数在调用时是可以自动分配新的内存空间的,也可以理解为是可递归的。因此,automatic 函数中声明的局部变量不能通过层次命名进行访问,但是 automatic 函数本身可以通过层次名进行调用。在 Verilog 中,一般函数的局部变量是静态的,即函数的每次调用,函数的局部变量都会使用同一个存储空间。若某个函数在两个不同的地方同时并发的调用,那么两个函数调用行为同时对同一块地址进行操作,会导致不确定的函数结果。重复性的行为级设计(就是。

2023-12-12 21:29:38 1216

原创 FPGA巩固基础:秒表的设计

6位8段数码管,低三位显示毫秒计数,最高位显示分钟,其余两位显示秒计数。开始案件与暂停按键,复位按键直接全部归零。扩展部分:每计满一次,led移位一次。

2023-12-12 16:26:46 1125

原创 MDIO读写控制实验

YT8531 芯片的 PHY 地址由 PHYAD0、 PHYAD1 和 PHYAD2 引脚决定,如下图所示: PHY 地址一共有3 位,我们可以通过硬件电路设置 PHYAD[2:0]引脚为上拉或者下拉,即分配为高低电平, 0 或 1,从而表示不同的地址。所以地址为:0000_0100 == 0x04。

2023-12-08 10:53:26 1370

原创 状态机的练习:按键控制led灯

三个按键控制led输出。三个按键经过滤波(消抖),产生三个按键标志信号。三个led数据的产生模块(流水,跑马,闪烁模块),分别产生led信号。这六路信号(三路按键信号,三路led信号),接入state_led_ctrl模块,进行led_out的控制。

2023-12-07 21:07:09 663

原创 整数分频,奇偶分频。

高电平时间占(M/2) * T_sys_clk, 在这个期间有(M>>1)个完整的sys_clk + 半个sys_clk.低电平时间占(M/2) * T_sys_clk, 在这个期间有(M>>1)个完整的sys_clk + 半个sys_clk.高电平时间占(N/2) * T_sys_clk,在这个期间有N/2个sys_clk系统时钟。低电平时间占(N/2) * T_sys_clk,在这个期间有N/2个sys_clk系统时钟。灵活使用计数器,可以进行分频。实现任意整数奇偶分频。

2023-12-02 14:25:20 528

原创 ZYNQ_project:IIC_EEPROM

EEPROM(Electrically Erasable Progammable Read Only Memory, E2PROM)是指带电可擦可编程只读存储器,是一种常用的非易失性存储器(掉电数据不丢失), E2PROM 有多种类型的产品,我们领航者 ZYNQ开发板上使用的是 ATMEL 公司生产的 AT24C 系列的 AT24C64 这一型号。AT24C64 具有高可靠性,可对所存数据保存 100 年,并可多次擦写,擦写次数达一百万次。它的存储容量:256页每页32个字节。

2023-11-28 20:46:19 986

原创 ZYNQ_project:HDMI

它能够同时传输视频和音频,简化了设备的接口和连线;同时提供了更高的数据传输带宽, 可以传输无压缩的数字音频及高分辨率视频信号。版本于 2013 年推出的, 2.0 理论传输速度能达到 18Gbit/s,实际传输速度能达到 14.4Gbit/s;而 2017 年发布的 HDMI 2.1 标准的理论带宽可达 48Gbps,实际速度也能达到 42.6Gbit/s。(与上一个vga显示相比,多了编码模块,串行转并行模块,单端信号转差分信号模块。用的是官方给的编码模块,与原语(就相当于开源的简单IP核心)。

2023-11-27 18:27:19 564

原创 ZYNQ_project:lcd_pic_400x400

在lcd液晶屏上显示400x400像素的图片,像素信息通过电脑的串口调试助手,发送给fpga,存储在例化的双端口ram中,在要显示图像区域,读取ram中的像素信息。

2023-11-21 13:34:01 618

原创 ZYNQ_project:LCD

【代码】【无标题】

2023-11-18 22:08:26 734

原创 uart控制led与beep

【代码】uart控制led与beep。

2023-11-17 21:18:44 653

原创 ZYNQ_project:uart(odd,even)

在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。异步通信:没有时钟端口,发送方和接收方使用各自的时钟控制数据的收发过程。):即通用异步收发器,是一种通用串行数据总线,用于异步通信。半双工通信:数据可以沿两个方向传输,但需要分时进行。全双工通信:数据可以同时进行双向传输。单工通信:数据只能沿一个方向传输。同步通信:带时钟端口的数据传输。

2023-11-17 20:40:05 546

原创 ZYNQ_project:test_fifo_255X8

首先,这个vivado的fifo和quartus有很大不同。用BRAM来实现异步fifo。vivado的fifo有复位,在时钟信号稳定后,复位至少三个时钟周期(读写端口的慢时钟),复位完成后30个时钟周期后再进行写操作(慢时钟)。有两个模式:标准模式和预读模式。标准模式,读出的数据会比读使能延后一个时钟周期,fifo的深度也会比配置的少一个。预读模式,读出的数据会与读使能同步,深度会比配置的多一个。犯下的错误:顶层模块,fifo的复位接到了系统复位上。

2023-11-16 19:13:48 383

原创 ZYNQ_project:ram_dual_port

伪双端口ram:写端口:clk_w,en_A,we_A,addr_A,din_A;读端口:clk_r,en_B,addr_B;dout_B.设计读写模块,写入256个数据,再读出256个数据。输入时钟100Mhz,输出时钟50Mhz。多bit数据,高速时钟域到低速时钟域处理。

2023-11-12 23:43:59 360

原创 ZYNQ_project:IP_ram_pll_test

例化MMCM ip核,产生100Mhz,100Mhz并相位偏移180,50Mhz,25Mhz的时钟信号。例化单口ram,并编写读写控制器,实现32个数据的写入与读出。

2023-11-11 21:16:08 1334

原创 STM32:配置中断初始化函数

【代码】STM32:配置中断初始化函数。

2023-11-09 20:22:45 273

原创 ZYNQ_project:key_breath

因为在组合逻辑中,用了非阻塞赋值的方式赋值信号。组合逻辑自己给自己赋值会产生组合回环,输出不稳定。

2023-11-09 17:25:48 706

原创 ZYNQ_project:key_beep

通过按键控制蜂鸣器工作。

2023-11-08 19:01:43 605

原创 ZYNQ_project:key_led

【代码】ZYNQ_project:key_led。

2023-11-08 18:58:15 314

原创 STM32_project:led_beep

【代码】STM32_project:led_beep。

2023-11-06 22:17:55 440

原创 STM32创建工程步骤

新建一个以led命名的工程(用keil_uVision5)并添加三个组。Library文件夹里放置库函数文件。点亮led灯的程序;新建一个led文件夹。

2023-11-06 18:29:59 612

原创 ZYNQ_project:led

本次实验完成:led流水间隔0.5s闪烁间隔0.25s。

2023-11-06 17:15:42 294

原创 浅谈always@(*)与assign组合逻辑赋值语句

always@(*) : 被赋值的变量应该为reg型,敏感信号列表为always@(*)块内的所有输入信号。所以:如果块内的输入信号没有改变,那么被赋值的变量是不定态,X。就像三元运算符,看似是为了assign赋值而生,但在时序逻辑赋值,always@(*)赋值,也是可以使用的。虽然同为组合逻辑赋值,但是写法不同,定义的变量类型不同。assign :被赋值的变量应该为wire型,持续赋值。在生成的硬件电路上,二者应该是一样的,对网表文件没影响。仿真时只要输入信号是变化的,二者基本也是一样的。

2023-10-24 16:34:27 1019

原创 FPGA project : sdram

设计并实现一个 SDRAM 数据读写控制器,使用 PC 机通过串口向 SDRAM 写入 10 字节数据,并将写入的 10 字节数据读出,通过串口回传至 PC 机,在串口助手上位机上打印显示回传数据。

2023-10-21 21:50:18 1000

原创 FPGA project : IIC_wr_eeprom

在scl为高时,若sda变化,则为起始或终止信号。在scl为低时,(已启动读时隙),sda在scl低电平变化,高电平对sda采样。读时序:分为随机读(单字节读)和顺序读(页读)。写时序:单字节写和页写。

2023-10-19 19:57:56 655

原创 阶段性总结

通用异步收发器 UART(Universal Asynchronous Receiver/Transmitter),是一种串行、异步、全双工的通信协议,将所需传输的数据一位接一位地传输,在UART通讯协议中信号线上的状态位高电平代表’1’,低电平代表’0’。根据SCK的相位(sc_n==0)时(传输数据时),是奇数or偶数沿采样。先定个小目标,在保质保量的前提下完成剩下的实验,争取在月末学完。慢一点没关系,最重要的是理解清楚,清晰的认识硬件,认识时序。看手册,主要看时序图,流程图,指令介绍。

2023-10-16 21:13:43 236

原创 FPGA project : flash_continue_write

本实验学习了通过spi通信协议,驱动flash;完成连续写操作。

2023-10-16 18:11:54 441

原创 FPGA project : flash_write

在之前扇区擦除的代码上改改就行了。加一个功能就是传入数据大于256个时候,mosi一直拉高。本实验:先传写指令,然后进入写锁存周期,然后传页编程指令,+3个地址;因为其他代码和扇区擦除指令是一样的。在写之前要先进行擦除(全擦除和页擦除);然后传数据,奇数传55,偶数传aa。flash的页编程指令pp。

2023-10-15 17:32:20 372

原创 FPGA project : flash_read

接收数据:比如接收8bit的串行数据,通过miso传递。1,先接收高位。那么通过data保存miso传递的数据,把串行数据,转换为并行数据。有两种常用写法:或者或者:写一个cnt_bit,记录保存到第几bit。2,先接收低位。

2023-10-13 20:01:27 521

原创 FPGA project : flash_secter_erase

flash的指定扇区擦除实验。先发写指令,再进入写锁存周期等待500ns,进入写扇区擦除指令,然后写扇区地址,页地址,字节地址。即可完成扇区擦除。

2023-10-13 19:44:45 1127

原创 FPGA project : flash_erasure

公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据。先往板子上固化一个流水灯程序,也就是把生成的.jic文件,写进flash。spi通讯协议有四种模式:模式0和模式3,从设备在sck上升沿采样。重启开发板,流水灯正常工作,说明程序写进了flash。模式0和模式1,在cs_n==1时,sck==0。模式2和模式3,在cs_n==1时,sck==1。,串行外围设备接口)通讯协议,是。模式1和模式2在时钟下降沿采样。比较常用的就是模式0和模式3。

2023-10-10 23:16:19 361

原创 FPGA project : sobel

算出来的Gxy与一个数据T比较大小,大于T则b2像素点赋值为黑色,小于赋值白色。想要沉浸式写代码,就要清清楚楚的画好时序图。在写代码之前就应该想清楚用到的每个信号的时序图应该是什么样的。fpga开发一大部分时间花在整体(顶层)设计上,一部分时间花在如何把想法转换为Verilog语言,一部分时间花在仿真调试上。我认为最重要的就是整体设计,以及画好时序图。或者有流程图或者相关的辅助你把想法转换为代码的图。

2023-10-09 21:24:35 271

原创 FPGA project : FIFO_SUM

在fifo2的写使能拉高后,fifo1的写使能拉高,然后把fifo2此时读出的数据写进fifo1(就是对fifo2读出的数采样)至于为什么fifo1的写使能拉高是在fifo2写使能拉高后。3,第一列的数据传给FIFO1,第二列的数据传给fifo2,第三列的数据到来后,fifo的读使能拉高(fifo1和2公用一个读使能信号)。2,其实这个行与列计数器,就像状态机。在读使能拉高后,fifo2的写使能拉高,然后把第三列的数据写进fifo2;每一行,对应列,相关信号变化是一样的,也就是说和行数没有关系。

2023-10-07 16:33:17 257

原创 FPGA project : fifo_sum

第一行存进fifo1,第二行存进fifo2.当输入第三行第一个数据的时候,从fifo1和ffo2中读数据,并于当前输入数据相加,并输出结果与标志信号。2,数据与标志信号在设计的时候,要注意时序上的对齐。这种小工程,仿真时,时序没问题没问题,上板子后出错,我觉得应该不是时序上的问题(亚稳态)。3,大于2的数字,尽量用参数parameter定义。1,这个fifo,读写信号同时拉高,我进行功能仿真时,它是写满后,同时拉高,讲写不尽数据。所以我设计的时序图,fifo1和fifo2都是先读出数据,然后再写数据。

2023-10-06 23:11:14 306

原创 FPGA project : TFT_LCD

显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备,其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备的显示器。有效图像,与行场同步信号时序上要对齐。需要对行场同步信号打一拍,或者直接使用时序逻辑赋值。在时序图上有更直观的说明。驱动TFT_LCD显示十色彩条。

2023-10-03 18:12:34 549

原创 FPGA project :HDMI

1在本实验与官方的编码模块代码,那么在通过功能方正,验证自己编写的编码模块代码是否正确时,可以把官方的模块例化进工程,然后仿真对比波形是否一致,即可判断自己编写的代码是否正确。先不要着急看去检查哪些信号会直接影响这个输出信号赋值,因为前面的一些信号,会间接影响输出信号赋值。1注意数据与解析数据的信号(比如传入的数据中0或者1的个数),要在时序上与数据进行对齐。那么此时应该先检查一些直接受输入信号影响的信号,是否正确,是否和官方给的代码波形一致;3实在检查不出来,看看自己的代码和官方的代码编写的差在哪里。

2023-10-02 18:04:58 445

原创 FPGA project : uart232_ram_vga

1,代码设计中,一些大于10的数字,尽量用parameter设定一些可以重传的参数来代替。读数据:在时钟上升沿,读使能拉高,与此同时给出地址,然后数据就都出来了。值得一提的是,数据会滞后一个时钟周期(相对于读使能与地址),说明ram内部用的时序逻辑嘛。写数据:在时钟上升沿,写使能拉高,与此同时要有对应的地址与数据。其实signal port ram,它的输入口和输出口分别用不同的时钟,也可以解决这个问题。2,在vga_pic模块中模拟产生的ram,读完数据后,ram里面的数据并没有消失,还在。

2023-09-26 18:35:36 516

原创 FPGA project : rom_vga_jump

只有vga_pix 模块代码与rom_vga不同,所以只上传了这个模块的代码与仿真代码。

2023-09-24 23:54:21 273

原创 FPGA project : ROM_VGA

所以还要把“数据输出信号”提前一个时钟周期的同时,把输出信号的采样点也提前一个时钟周期,这样输出信号才能完全和坐标对齐。尤其输出信号用reg,对某个“数据输出信号”采样。虽然“数据输出信号”和坐标对齐了。在之前彩条显示工程中增添一个rom模块,在中心显示100 X 100 的一个图像。读数据拉高,并输入地址。如果输出口不加reg寄存一下,数据只会滞后一个时钟周期输出(相对于读使能)。在设计这个实验中,还重点考察了,坐标与数据,在时序上要对齐。但是真正要输出的信号,还是滞后了一个时钟周期(相对于坐标)。

2023-09-24 17:09:04 177

原创 FPGA project : HCSR04

1,由于使用cnt_base 做echo回响信号高电平时间的测量,它的数据应该很大,位宽也很大。因为这个add_cnt_base信号是我写代码时后加上去的,没有画它的时序图。这样循环往复,每次触发变化的时间,是几乎可以忽略不计的。一旦敏感变量触发组合电路的赋值,便会不断地,触发--赋值--触发---赋值。具体,就是避免在敏感变量A所触发的逻辑块中,再次对敏感变量A进行赋值操作。作为敏感变量,只要变化,就会触发组合逻辑块的赋值,而赋值又会立马让敏感变量变化,然后再触发组合逻辑块赋值。

2023-09-23 22:46:12 139

原创 FPGA project : DHT11

在Quartus中,使用/*synthesis noprune*/,/*synthesis preserve*/等语句,注意,这些语句如果是用于信号的定义时,需要放在定义的语句尾部。在Vivado中,使用(* keep="true" *),(* keep_hierarchy="yes" *)语句。

2023-09-23 13:10:15 178

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除