自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 同步FIFO与异步FIFO设计

设计一个深度为512,位宽是10bit的同步FIFO输入端口:CLK,RSTN, RD_EN, WRT_EN, DATA_WRT[9:0]输出端口:FULL, EMPTY, DATA_ED[9:0]fifo其实就是基于ram做的一些扩展,区别一:顺序读写,区别二:防止ram写满溢出以及读空。

2024-07-23 15:23:45 491

原创 8. 建立时间和保持时间

1.建立时间tsu,保持时间thold,传播延时tcq2.建立时间与时钟频率的约束,保持时间与建立时间和传播延时的约束3.添加buffer的情况

2024-07-21 23:28:24 218

原创 7. 乘法器

求无符号数MUL[15:0] = A[9:0] * B[5:0]的结果通过写乘法器了解乘法器原理,了解如何优化乘法器的时序。理论上,对于一个普通的乘法器,我们直接使用a*b就可以得出。但它的时钟频率会很低。

2024-07-20 15:21:09 396

原创 6. 加法器——半加器,全加器,超前进位(CLA)

1. 半加器1.1 原理1.2 代码2. 全加器2.1 原理2.2 代码3. 超前进位加法器3.1 原理3.2 代码

2024-07-19 20:54:30 401

原创 5. 流水线设计

设计要求:输入为两个64bit位宽的操作数(PLUS_A和PLUS_B)。为了达到较快的时钟频率,每两级触发器之间只能实现16bit位宽的加法。该如何实现这个加法。要求每个时钟周期都有一个操作数输入,一个操作数输出。题目意思是:比如我当前的时钟频率为500M(2ns),支持2ns时钟频率的最大位宽加法为16bit(位宽越大,组合逻辑越多,消耗时间越多),而目前有两个64bit位宽的操作数需要相加,所以我需要设计一个流水线,在保证500M时钟频率的情况下实现数据相加。

2024-07-19 11:20:58 345

原创 4. 双端口ram设计

设计一个位宽8bit,地址深度为128,可以同时读写的双端口RAM要求:模块名字为RAM_DUAL输入端口:ADDR_W,ADDR_RCLK_R,CLK_W,RSTnADDR_R[6:0],ADDR_W[6:0]DATA_WRT[7:0]RD_EN,WRT_EN输出端口:DATA_RD[7:0]一般大容量的RAM由专门的IP厂商提供,有单口RAM(读写不能同时进行),双口RAM等各种样式。IP厂商会提供behavior model,综合以及后端库文件小容量的RAM可以自己用触发器阵列搭建。属于双口RAM(读

2024-07-18 21:08:22 562

原创 3. 序列生成

生成序列001011,串行循环输出该序列。

2024-07-17 13:04:50 435

原创 2.有限状态机——售货机,序列检测

1.一段代表当前状态赋值;2.一段代表下一个状态如何跳变3.一段代表输出控制一定要带上复位前两段模板集合一样,第三段取决于具体需求。

2024-07-14 20:57:44 343

原创 1. 基础设计流程(以时钟分频器的设计为例)

1. 写有vcs编译命令的run_vcs.csh的shell脚本2. 装有timescale,设计文件以及仿真文件的flish.f(filelist文件,用于VCS直接读取)

2024-06-21 21:16:20 548

原创 18 19 SPI接口的74HC595驱动数码管实验

1. 通过移位寄存器实现串转并:一个数据输入端口可得到四位并行数据。通过给data输送0101数据,那么在经过四个时钟周期后,与data相连的四个寄存器的输出端口得到了0101这样的数据,然后我们将latch信号拉高,在下一个时钟周期,D0, D1, D2, D3同时分别获得了这四个数据1010。(其中DFF指D触发器,LATCH信号也可连接锁存器来控制输出)2. 级联级联:数据输出端口作为另外的移位寄存器数据端的输入。

2024-02-14 23:06:41 2576 1

原创 17 ABCD数码管显示与动态扫描原理

数码管有两种结构,共阴极和共阳极,ACX720板上的是共阳极数码管,低电平点亮。

2024-02-13 21:43:25 2284 1

原创 16 亚稳态原理和解决方案

按键未按下时为高电平,按下后为低电平,我们需要通过检测下降沿来判断按键是否按下,但由于亚稳态的存在,异步信号有可能检测不到,因此此处将分情况进行讨论。2. 如果外部信号转变发生在建立保持时间之内,出现了亚稳态现象,则在亚稳态结束后最终输入与输出有两种情况,输出不确定的0或1。1. 如果外部信号转变发生在建立保持时间之外(非时间上升沿处),则在外部信号变化的下一个时钟沿处,下降沿信号能被正常检测到。1. 由于亚稳态持续时间小于一个时钟周期,使用一级同步后便可检测到下降沿,比原先的下降沿晚了一个时钟周期。

2024-02-12 20:28:24 1605 1

原创 15 ABC基于状态机的按键消抖原理与状态转移图

从按键结构图10-1可知,按键按下时,接点(端子)与导线接通,松开时,由于弹簧的反作用力,接点(端子)与导线断开。从原理图10-2可知,按键按下时为低电平,未按下为高电平。

2024-02-12 00:33:10 1524 1

原创 13. 串口接收模块的项目应用案例

2.修改了uart_byte_rx1串口接收模块代码,修改了rx_data八位数据接收条件,原先是发送了在出现tx_done信号后得到输出八位数据,这样会导致我们在后续模块通过tx_done信号接收数据时接收的是前一个八位数据。LED灯的工作状态:让LED灯按指定的亮灭模式亮灭,亮灭模式未知,由用户指定,8个变化状态为一个循环,每个变化状态的时间值可以根据不同的应用场景来选择。使用串口发送指令到FPGA开发板,来控制第7课中第4个实验的开发板上的LED灯的工作状态。

2024-02-10 21:06:01 1681 1

原创 12 ABC串口接收原理与思路

基本原理:通过数据起始位判断要是否要开始接收的数据,通过采样的方式确定每一位数据是0还是1。如何判断数据起始位到来:通过边沿检测电路检测起始信号的下降沿如何采样:一位数据采多次,统计得到高电平出现的次数,次数多的就是该位的电平值。

2024-02-09 20:13:56 967 1

原创 11 串口发送应用之使用状态机实现多字节数据发送

uart协议规定,发送的数据位只能是6,7,8位,如果数据位不符合,接收者接收不到数据。所以我们需要将40位数据data分为5个字节数据分别发送,那么接收者就能通过uart协议接收到数据了。

2024-02-08 16:59:21 1842

原创 09 AB 10串口通信发送原理

通用异步收发传输器( Universal Asynchronous Receiver/Transmitter, UART)是一种异步收发传输器,其在数据发送时将并行数据转换成串行数据来传输, 在数据接收时将接收到的串行数据转换成并行数据, 可以实现全双工传输和接收。它包括了 RS232、 RS449、 RS423、RS422 和 RS485 等接口标准规范和总线标准规范。 换句话说, UART 是异步串行通信的总称。而 RS232、 RS449、 RS423、 RS422 和 RS485 等

2024-02-07 21:40:02 2493 1

原创 08 (schematic电路图)阻塞赋值与非阻塞赋值详解

阻塞赋值与非阻塞赋值只存在于时序逻辑中。

2024-02-06 13:04:03 850

原创 07 A B 从计数器到可控线性序列机

总结:计数器不仅仅是一个计量整个时间的一个计数器,而且这个计数器里面的每一个计数值,他都可以作为整个这一段时间里面的一个刻度标尺,都可以拿来用。有一个指定亮灭状态的输入端口,控制八种状态的亮灭,如果把亮灭看成1和0,那么就可以设计一个八位的控制亮灭状态的端口。使用case语句时,每种情况的值必须是一个确定值,在这种情况下,我们必须修改代码,使各个状态由确定值来给定,而不是不确定的时间。总结:通过控制en的状态就能控制计数器的计数,通过计数器的计数,来产生不同的序列,即从计数器到可控状态序列机。

2024-02-05 21:45:19 1324 1

原创 05 06 (代码布置引脚,修改参数)Verilog基础语法与应用讲解

计数器实验升级,设计8个LED灯以每个0.5s的速率循环闪烁(跑马灯)

2024-02-04 22:54:43 1000 1

原创 04 时序逻辑计数器设计与相关语法

1.组合逻辑电路:输出只与输入有关,比如二选一多路器,三八译码器。2.时序逻辑电路:输出不仅与输入有关,也与时钟有关(只在时钟边沿发生信号的变化),即使输入D中途跳变为了低电平,但由于不在时间边沿处触发,输出Q仍然为高电平,说明时序逻辑电路具有存储特性。

2024-01-17 16:53:05 552

原创 2. (开发流程)组合逻辑3_8译码器实现与相关语法基础

三八译码器,顾名思义,三位输入,八位输出;即通过三根信号线控制八种输出情况。

2024-01-16 17:10:05 614 1

原创 SV结构体学习

module tb;} pixel_tprint_pixel(pixel_b)//通过索引赋值,数组里也有这个用法end//%x是十六进制endmodule利用typedef将struct定义为一个类型pixel_t后,在函数里就可以引入该类型的形式参数了。

2024-01-01 12:23:12 938

原创 UVM实验5

对于状态寄存器stat_reg,刚开始由于是初始阶段reset,desired和mirrored均为默认值,但硬件实际值可能不同,如果此时reg做一个读操作,即reg.read(),那么在前门访问过程中,mirrored监测到硬件实际值与mirrored值不一样,于是更新了mirrored和desired值。在利用寄存器模型对寄存器进行读/写访问时,往往对整个寄存器进行读写的机会不多,更多的是修改某些单独的域,或获得某些域的值。只有继承于uvm类的子类,可以用factory去注册,去创建。

2023-12-30 09:50:12 1036 1

原创 UVM实验4

将generatordriver与test的关系最终移植为sequencesequencerdriver和test的关系,聚焦于sequence和sequencer的使用。

2023-12-20 19:44:06 1354 1

原创 UVM实验3

1.在之前的monitor到checker的通信,以及checker与l之间的通信,都是通过mailbox以及在上层进行其句柄的传递实现的。我们在接下来的实验要求中,需要大家使用TLM端口进行通信,做逐步的通信元素和方法的替换2.涉及到通信的有各个agent里的monitor和的mailbox的通信;以及和里的之间的通信。3.为了熟悉多项通信和通信管道的用法,对于monitor和mailbox,实验里用到的是单向/多向通信;对于refmod和,实验里用到的是通信管道。

2023-12-16 08:50:02 1179 1

原创 DVT学习与使用

3.1在项目编译时(build,可自动增量式触发),会在“problems”窗口出现多处提示(warning/error)在选择某处提示后可快速链接到源代码处,在代码编辑左侧可根据“感叹号”或者“叉号”提示符,选中对应代码,右键——Sorurce——Quick Fix,或者按“Ctrl+13.2为模块添加参数或者端口添加敏感列表给design添加敏感列表,比如always里面有的信号不在敏感列表里,它会给出提示为interface句柄添加virtual关键词。

2023-12-15 20:39:52 2069

原创 1.二选一多路器

编写verilog代码1.定义端口2.I/0端口说明3.功能定义。

2023-12-08 12:35:41 680

原创 UVM实验2

req是通过uvm的type_id::create创建的,在创建时做了域的自动化的声明,所以可以直接用核心基类里的方法,比如clong。但需要注意的是,,所以赋值给子类rsp时需要转化,同时转化可以成功。:调用clong方法会新创建一个对象,复制req到新创建的对象中,并返回新创建对象的句柄)。许多函数都有返回值,比如$cast( ),在进行类型转化的同时会返回1,或者0,表示转化成功或者失败,此时使用void’( )可以把转化值变为空,告诉编译器不用理会返回值;

2023-12-03 22:37:17 1366 1

原创 UVM实验1

只有两种用来注册的宏`uvm_object_utils(T) // T指类型。

2023-11-28 17:23:28 1052

原创 sv对象拷贝

1.将成员**拷贝函数copy_data()

2023-11-23 11:26:02 532 1

空空如也

空空如也

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

TA关注的人

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