verilog
文章平均质量分 66
verilog知识点总结
小小verifier
材料转IC验证,分享每天学习笔记和心得...Keep hungry!Keep foolish!
展开
-
I2C的RTL代码设计
文章目录一、简介二、设计架构三、I2C的PAD设计四、寄存器的配置1. Prescale 寄存器( PRElo、PREhi )2. 控制寄存器(CTR)3. Transmit寄存器(TXR)4. Recieve寄存器(RXR)5. 状态寄存器(SR)五、RTL代码实现????:I2C协议介绍请看:I2C协议一、简介I2C是一个低速、多master多slave的单端串行数据总线,有两根线(SCL串行时钟线和SDA串行数据线)构成,高速模式可达到3.4MHz的传输速率,最高支持5MHz传输(utra-原创 2021-09-01 18:28:09 · 4740 阅读 · 3 评论 -
IC验证面试之手撕verilog常用的电路
总结了面试常见的一些需要手撕代码的电路,和一些高频被问到的相关电路:其他精彩:IC验证面试之数电、IC验证面试之UVM、IC验证面试之断言;1. 分频电路2. 序列检测器3. 伪随机码4. 时钟切换无毛刺电路5. 同步FIFO6. 异步FIFO7. 数据累加8. FIR滤波器9. 异步复位、同步释放10. 线性反馈移位寄存器11. CRC校验码产生器【持续更新中…】...原创 2021-07-18 17:14:28 · 11229 阅读 · 4 评论 -
异步FIFO代码及仿真结果(Verilog)
文章目录1.代码截图2.仿真结果3.代码注:代码附于文末注:因为CSDN不支持Verilog高亮,先用截图的代码便于阅读。1.代码截图2.仿真结果仿真结果如下:空满标志生成正常读写地址指针计数器正常数据存取正常格雷码逻辑正常指针跨时钟域同步正常3.代码代码如下:module asy_fifo#( parameter WIDTH=8,//FIFO的位宽 parameter DEEPTH=32,//FIFO的深度 parameter POINTER_WIDTH=原创 2021-08-17 17:40:04 · 3135 阅读 · 8 评论 -
`ifndef 、`define和`endif的理解
你可能与我一样苦恼为什么别人写的代码每个文件中都用`ifndef 、define 和endif宏来定义,不知道为什么需要这几句话。下面将详述这几个的用法。目的使用 ifndef 、define 和endif的目的:为了防止同一个文件在编译时被重复编译,引起多重定义的问题。如下:在文件开头和结尾定义`ifndef APB_MASTER_DRIVER_SV`define APB_MASTER_DRIVER_SVclass apb_master_driver extends uvm_driver#(原创 2021-08-16 21:18:08 · 10079 阅读 · 7 评论 -
计数器(Verilog)
简介计数器的用处很多,比如在设计分频器时,需要用到计数器对每个时钟边沿进行计数,当记到某个数时,时钟翻转。同样在设计FIFO时,读写指针也需要没读或写一次,就需要讲计数器加1。下面我介绍一些简单的8位计数器的Verilog设计,仿真结果在文末。8位计数器计数器的设计如下:在每个时钟商上升沿到来时,计数器就加1。module counter(clk,rstn,dout); input clk,rstn; output [7:0]dout; reg [7:0]dout; wire原创 2021-07-26 14:44:21 · 20809 阅读 · 5 评论 -
RAM和ROM(verilog)
片内存储器(RAM、ROM)片内存储器分为ROM和RAM两大类。RAM是随机存储器,存储单元的内容可以按需随意存入和取出。这种存储器在断电后将丢失所有数据。单端口RAM:只有一套地址总线,读写操作是分开的。双端口RAM:有两套地址总线,一套用于读数据,另一套用于写数据。//单端口RAM//深度为8,位宽为8module single_ram(clk,addr,cs_n,we_n,din,dout); input clk; //时钟信号 input [2:0]addr;//地原创 2021-07-26 13:30:12 · 4536 阅读 · 3 评论 -
超前进位加法器(verilog)
文章目录1.串行进位加法器2.超前进位加法器1.串行进位加法器多位数相加时,直接描述产生串行进位加法器。代码如下://3位半加器module(cout,sum,a,b); output cout; output [2:0]sum; input [2:0]a,b; assign {cout,sum} = a + b;endmodule//3位全加器,有低位向本位的进位module(cout,sum,a,b,cin); output cout; output [2:0]s原创 2021-07-18 18:49:51 · 15341 阅读 · 14 评论 -
序列检测器(verilog)
文章目录简介简单的序列检测器1.采用直接的状态描述方式2.使用移位寄存器稍复杂的序列检测器1.状态机描述2.使用移位寄存器简介序列检测器顾名思义是用于检测一段给定的信号。可以使用状态机来直接描述,也可以采用移位寄存器的方式进行检测。简单的序列检测器这里用最简单的 ”111“序列检测器,当电路输入X出现三个或三个以上为1时,电路输出Z为1,否则输出为0。下面介绍2种代码形式,分别采取:状态机直接描述和使用移位寄存器检测。1.采用直接的状态描述方式首先,需要画出它的状态转移图,如下:状态描述:原创 2021-07-18 16:46:42 · 20015 阅读 · 6 评论 -
伪随机码(verilog)
简介伪随机序列又称为伪随机码,是一种人工生成的周期序列,可以作为数字通信中的一个信号源,用于检测数字通信系统错码的概率,即误码率。产生伪随机码的方式有很多,通常使用线性反馈移位寄存器(LFSR)来产生。所谓线性反馈,是指反馈函数中仅包含模 2 加运算(也就是逻辑异或),而不含非线性运算。由线性反馈寄存器产生的周期最长的二进制序列称为最大长度线线性反馈寄存器序列,简称m序列。如果移位寄存器长度为n,则m序列的周期是(2^n -1),没有全0的状态。伪随机码发生器的初始状态由微处理器通过SEED寄存器发出原创 2021-07-18 16:40:56 · 12739 阅读 · 6 评论 -
同步FIFO
文章目录前言FIFO使用场景FIFO参数同步FIFO异步FIFO请看:异步FIFO…前言FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。FIFO使用场景异步FIFO一般用于不同时钟域之间的数据传输,在两个时钟域之间采用FIFO作为数据缓冲;对于不同宽度的数据接口也可以原创 2021-07-18 14:02:48 · 3070 阅读 · 6 评论 -
FIR滤波器及verilog代码
滤波器:对特定的频率或者特定频率以外的频率进行消除电路。从功能的角度,数字滤波器对输入离散信号的数字代码进行运算处理,以达到滤除频带外信号的目的。有限冲激响应(FIR)滤波器的系统函数:H(z)=y(z)/x(z)=a+b/z1+c/z2H(z)=y(z)/x(z)=a+b/z^1 +c/z^2H(z)=y(z)/x(z)=a+b/z1+c/z2y(z)和x(z)分别表输入和输出信号;a,b,c表示抽头系数;z^1 和z^2 表示延迟,其中z^1 表示延迟一个时钟周期,z^2 表示延迟2个时钟原创 2021-06-15 22:15:56 · 6123 阅读 · 2 评论 -
相邻的数据累加——verilog
例如,相邻16个点的数据累加:数据采用补码形式相加;在做累加之前要提前给数据位宽扩展构造一个与源时钟的相反的反向时钟,将源时钟和反向时钟向与,创建一个采样时钟脉syn_pulse;用计数器计算syn_pulse个数,每当出现syn_pulse,数据就累加一次;计满16次就将数据输出;代码如下://相邻16点相加module sigma_16(clk,rst_n,data_in,syn_in,data_out,syn_out); input clk,rst_n;原创 2021-06-11 21:52:33 · 5636 阅读 · 4 评论 -
分频器——秒分频、三分频、五分频、任意分频和偶数分频
占空比占空比:理想的时钟模型是一个占空比为50%且周期固定的方波。时钟周期为T,TH为高脉冲宽度,TL为低脉冲宽度,T=TH+TL。占空比即为高脉冲宽度与周期之比,即TH / T。秒分频计数假设clk是24MHz系统时钟,秒分频产生s_pulse;秒计数模块对s_pulse计数,计数范围0~9,计数结果s_num的位宽为4 个bit位。代码如下module s_count(clk,rst_n,s_num); input clk,rst_n; output[3:0] s_num;原创 2021-06-11 20:26:31 · 18261 阅读 · 6 评论 -
异步FIFO
文章目录前言FIFO使用场景FIFO参数同步FIFO异步FIFO前言FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。FIFO使用场景异步FIFO一般用于不同时钟域之间的数据传输,在两个时钟域之间采用FIFO作为数据缓冲;对于不同宽度的数据接口也可以用FIFO,例如单片机位原创 2021-06-11 14:19:10 · 6415 阅读 · 5 评论 -
设计高速状态机
设计高速状态机把状态变量直接用作输出,称为“输出编码的状态指定”;采用流水线设计。在输出逻辑后面加一组与时钟同步的寄存器输出流水线寄存器,让所有输出信号在下一个时钟跳变沿同时存入寄存器组,即完全同步地输出。注意:在复杂的状态机设计时,应该将状态变化与输出开关的控制分为两个部分来考虑,方便调试注:查阅《Verilog数字系统设计教程》P168...原创 2021-06-04 23:31:34 · 606 阅读 · 0 评论 -
case、casex、casez的区别 — Verilog
作用:提供了一种描述真值表的描述方式可以描述有限状态机区别:case是一一对应,即0、1、x、z分别对应0、1、x、z;当执行到对应项后,case就会退出casex是将高阻值(z)和不定值(x)都视为不关心的状态,即出现x或z会匹配任意0、1、x、z状态;casez是将高阻值(z)视为不关心的状态,即出现z会匹配任意0、1、x、z状态;真值表如下:case01xz0100010100x0010z0001原创 2021-06-04 23:24:27 · 4901 阅读 · 0 评论 -
glitch free时钟切换无毛刺
如何设计一个时钟切换电路,在切换时没有毛刺产生?会产生毛刺的电路?如下,是纯组合逻辑实现的时钟切换电路代码:assign cik_out = select ? clk0 : clk1 ;电路图如下:这种设计会在时钟切换时产生毛刺,波形图如下:这种设计产生毛刺的原因在于选通信号select可以相对于源时钟随时改变。也就是当select拉高时,输出时钟立刻发生变化。此时out_clk会选择clk1,而此时clk1仍然为低,就会产生一小段毛刺。 当选择信号sel发生变化时,这样纯组合逻辑输出得到原创 2021-06-03 19:04:55 · 3234 阅读 · 5 评论 -
亚稳态的产生与消除
一、亚稳态的产生与后果产生:亚稳态是指触发器无法在某个规定的时间段内到达一个可以确认的状态。所有的数字器件(如FPGA)中的寄存器都定义了一个信号时序要求,满足这一要求的寄存器才能在输入端捕获数据在输出端输出数据。为了确保可靠的操作,寄存器输入端的数据必须在时钟上升沿到来之间保持一个最小的稳定时间(寄存器的建立时间 tsu)以及在时钟沿之后保持一个最短时间(寄存器保持时间tH)。寄存器在经过一定得时钟到输出延迟(tco)之后输出有效。如果信号传输违反了tsu以及tH的要求,寄存器的输出很可能会进入亚稳原创 2021-05-23 13:16:55 · 7662 阅读 · 0 评论