
verilog基础
文章平均质量分 94
bleauchat
证明自己,同时验证你的选择是错误的!
展开
-
verilog-延迟语句
verilog延时原创 2022-09-21 00:21:42 · 10247 阅读 · 0 评论 -
Verilog中条件编译命令`ifdef、`else、`endif
条件编译在针对不同EDA工具,选择不同激励、根据选择才执行一些功能等场合非常有用,本文对常见条件编译指令进行介绍:介绍了条件编译指令的用途、具体用法。条件编译:显而易见,即只有在条件满足的时候才对这部分代码进行编译,也就是对一部分内容指定了编译的条件: 当满足条件时对一组语句进行编译, 当条件不满足时则对另外一组语句进行编译。语法规则:// Style #1: Only single `ifdef`ifdef &l...转载 2020-07-17 17:10:39 · 4597 阅读 · 0 评论 -
按键消抖
用verilog实现按键抖动消除电路,抖动小于15ms,输入时钟12MHz在编写Verilog代码之前,先分析下一些前提问题,首先是几个按键(1个,多个),我们以1个和三个为例;其次是算下按键按下后计数多少后,采样按键值,这个需要简单的运算:输入时钟为12MHz,也就是大约80ns的周期,那么去除15ms的抖动,需要计数多少次呢?经过计算,大约180000次,换成16进制为:2BF20...转载 2019-07-21 09:54:57 · 2030 阅读 · 0 评论 -
N+0.5分频器的verilog实现
先说一种设计思路:通过两个分频时钟的与操作实现。两个分频时钟的占空比均为(N+1)/(2*N+1),对于5.5分频电路来讲,其占空比为6/11,不过这两个分频时钟一个是基于时钟上升沿触发一个是基于时钟下降沿触发,并且时钟的初始化值相反,这样将这两个时钟相与就可以得到5.5分频的电路了.module half_div #(parameter N = 5)(input clk_in,inp...转载 2019-07-21 21:21:43 · 1076 阅读 · 1 评论 -
跨时钟域信号处理——专用握手信号
下图是一个基本的握手通信方式。所谓握手,意即通信双方使用了专用控制信号进行状态指示。这个控制信号既有发送域给接收域的,也有接收域给发送域的,有别于前面的单向控制信号检测方式使用握手协议方式处理跨时钟域数据传输,只需要对双方的握手信号(req和ack)分别使用脉冲检测方法进行同步。在具体实现中,假设req、ack、data总线在初始化时都处于无效状态,发送域先把数据放入总线,随后发送有效的r...转载 2019-07-22 14:46:53 · 5299 阅读 · 3 评论 -
基于减法操作除法器的算法---Verilog实现
除法器在FPGA里怎么实现呢?当然不是让用“/”和“%”实现;在Verilog HDL语言中虽然有除的运算指令,但是除运算符中的除数必须是2的幂,因此无法实现除数为任意整数的除法,很大程度上限制了它的使用领域。并且多数综合工具对于除运算指令不能综合出令人满意的结果,有些甚至不能给予综合。即使可以综合,也需要比较多的资源。对于这种情况,一般使用相应的算法来实现除法,分为两类:基于减法操作和基于乘法...原创 2019-08-09 16:16:11 · 4593 阅读 · 2 评论 -
乘法器的设计
乘法算是基本运算之一,广泛应用在数字信号处理中,滤波器中乘法运算必不可少,实现乘法器的方法很多,各有各的优缺点,常见的有移位相加法,加法树法,查表法,混合法……在我们用语言设计电路时,初学时在实现乘法运算时通常很简单的用*号操作,但是这种方法谈不上设计乘法器,其最终的硬件实现要根据综合器综合的结果,好的综合器可以综合出想要的结果,但是实际上这种粗放的设计通常得到的都是劣等的乘法运算,无法满足对...转载 2019-08-20 10:52:49 · 5283 阅读 · 0 评论 -
使用Verilog HDL语言实现4位超前进位加法器
一、1位半加器的实现1.1 原理半加器由两个一位输入相加,输出一个结果位和进位,没有进位输入的加法器电路。1.2 真值表1.3 逻辑表达式S = A ^ BC = A & B1.4 Verilog 实现module half_adder(input a,input b, output sum,output c_out);assign s...转载 2019-08-11 20:26:43 · 6780 阅读 · 0 评论 -
Verilog语言设计增加延时的正确方法
在设计仿真激励文件时,为了满足和外部芯片接口的时序要求,经常会用到延时赋值语句,由于不同的延时赋值语句在仿真过程中行为不同,会产生不同的激励输出,如果不认真区分不同表达式引起的差异,就可能产生错误的激励,无法保证仿真结果的正确,本文就是区分各种延时赋值语句的差异,并给出比较结果;1:阻塞式左延时赋值语句举例说明如下:module adder_t1 (co, sum, a, b, ci)...原创 2019-08-24 16:29:15 · 10038 阅读 · 0 评论 -
实例解析Verilog综合出锁存器的问题
下面哪种写法会产生latch?为什么?代码如下:A.always @(*)beginif(d)a = b;endBalways @(*)beginif(d) a = b;else a = a;endCalways @ (b or d) case(d) 2’b00: a=b>>1; 2’b11: c=b>...转载 2019-08-25 23:29:48 · 5498 阅读 · 0 评论 -
你问我FIFO有多深?
我们通常需要异步FIFO用作两个不同时钟域的模块之间的数据缓冲,确保不会丢失数据,只有在读速率快,写速率慢的时候,需要使用FIFO才能缓存来不及读取的数据。反之??通常因为读速率慢于写速率,慢的模块来不及读取的数据要被缓存下来,所以说,FIFO的工作模式应该是,数据突发写入的形式,Bursts。也就是隔一段时间突发的写一组数据。如果连续写入的话,因为读速率慢于写速率,FIFO肯定会写满,FIF...原创 2019-08-13 00:17:58 · 1321 阅读 · 2 评论 -
verilog中对浮点数的处理
算法中常常会到浮点数运算,而浮点数的处理常常是Verilog初学中常常遇到的问题。以下将就一个简单的例子说明Verilog中浮点数运算处理。在JPEG图像压缩时遇到色彩空间变换的问题,将YCbCr转换到RGB会遇到浮点数的运算,这个实现复杂,以摄氏温度转换为华氏温度为例 : F = C x 1.8 + 32R = 1.164(Y-16) + 1.596(Cr-128)G = 1....转载 2019-08-22 21:53:31 · 29291 阅读 · 6 评论 -
两个数的最大公约数与最小公倍数
1.最大公约数(最大公因数)就是几个数公有的因数中最大的一个例:12与18 12的因数有1,12,2,6,3,418的因数有1,18,2,9,6,3公有的因数有1,2,3,6, 所以6就是12与18的最大公约数.而求最大公约数的方法可以总结为:①先判断两个数的大小,如果两数相等,则这个数本身就 是就是它的最大公约数。②如果不相等,则用大数减去小数,然后用这个较小数与它们相减...原创 2019-09-03 21:59:52 · 2126 阅读 · 0 评论 -
SPI总线verilog hdl实现
SPI总线传输只需要4根线就能完成,这四根线的作用分别如下: SCK(Serial Clock):SCK是串行时钟线,作用是Master向Slave传输时钟信号,控制数据交换的时机和速率; MOSI(Master Out Slave in):在SPI Master上也被称为Tx-channel,作用是SPI主机给SPI从机发送数据; CS/SS(Chip Select/Slave Se...原创 2019-09-07 11:21:15 · 1316 阅读 · 0 评论 -
FPGA校招笔试题分析
仅仅给出下面一个电路图,让你画出Q1,Q2以及Q3的波形,并描述电路功能第一个触发器的输入是第二个以及第三个触发器的输出的反馈,是Q1与Q2的或非;实际上就是同步三分频电路;只要触发器复位有初值即可,一般触发器复位初值为0,这里也默认为0,那么输入值在复位时应该为1.那么当正常运行(复位无效)时,q0的第一个值为复位值延迟一拍并持续一个时钟,之后q1、q2就简单了。modul...原创 2019-09-27 12:51:23 · 5336 阅读 · 1 评论 -
门控时钟
结构-1这种系统时钟门控的机制算然简单,但是容易使门控后的时钟不完整,甚至产生毛刺结构-2这种门控方法避免了门控时钟的不完整性,也可以避免避免毛刺的产生,但门控后的时钟可能会产生亚稳态结构-3这种结构解决了结构-2的亚稳态问题结构-4这种带测试模式的结构可以在测试时让时钟一直开着结构-5在ASIC进行后端测试的时候,有时候可能会将不同...转载 2019-07-19 21:32:40 · 10272 阅读 · 6 评论 -
glitch-free的两个时钟切换电路
有毛刺的时钟切换电路原理图:这个时钟切换电路是一个纯组合逻辑,输出时钟(OUT CLOCK)由选择信号(SELECT)控制,当SELECT为1时输出CLK1,反之,输出CLK0.看似很简单,实现了时钟的切换,实则存在着很大的隐患,如下图所示:对上图的Verilog描述:assign outclk = (clk1 & select) | (~select &am...转载 2019-07-16 21:43:47 · 10636 阅读 · 4 评论 -
组合逻辑中的竞争与冒险
产生原因 竞争与冒险的定义 竞争:当一个逻辑门的两个输入端的信号同时向相反方向变化,而变化的时间有差异的现象;冒险:两个输入端的信号取值的变化方向是相反时,如门电路输出端的逻辑表达式简化成两个互补信号相乘或者相加, 由竞争而可能产生输出干扰脉冲的现象; 有冒险一定存在竞争,有竞争不一定存在冒险!更现实一点,对于一个与门: 解决方法 (1)修改逻辑设计:...原创 2018-12-27 16:43:02 · 11457 阅读 · 0 评论 -
数字电路中的亚稳态产生原因和处理方法
应用背景 亚稳态发生原因 在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值,这段时间称为决断时间(resolution time...原创 2018-12-27 21:17:52 · 4869 阅读 · 2 评论 -
宏定义(`define),常数(localparam),参数(parameter)三者的区别
在verilog中,好的设计是用符号常量代替固定文本,这使得代码清晰并有助于以后的维护和修改;在verilog中,可以用关键词localparam声明常数,例如声明数据总线的位宽和范围:localparam DATA_WIDTH = 8;DATA_RANGE = 2**DATA_WIDTH;或定义符号端口名称:UART_PORT = 4'b0001;LCD_PORT =...原创 2019-01-07 10:05:31 · 7323 阅读 · 1 评论 -
Verilog中generate语句的用法
在Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计提供了方便,generate语句一般在循环和条件语句中使用,为此,Verilog-2001增加了四个关键字generate,endgenerate, genvar, localparam,genvar是一个新增的数据类型,用在generate的...原创 2019-01-14 20:01:56 · 52850 阅读 · 6 评论 -
移位寄存器示例
这里的移位寄存器不是简单的向左移位将串行输入转换为并行输出,而且要保留最后一个周期的输入数作为下一次输出的最高位,代码如下所示:module shift_reg( clk,rst,din,dout//,ordy ); input clk; input rst; input [7:0] din; output [31:0] dout;//4个周期 //outp...原创 2019-02-25 20:26:01 · 2882 阅读 · 0 评论 -
Verilog读取文本中的数据和输出数据到文本
由于经常要用到,但是每次都要东拼西凑的去回忆如何写代码。所以还是整理下,以后用的时候就直接看这篇文章了;1、读取文本数据读取文本数据都是先将数据写到mem中,然后在通过控制men的地址来一个一个的取数。示例代码如下:reg [11:0] data_src_mem [0:1023] ;//定义一个位宽为12bit,深度为1024的memreg [9:0] mem_add...原创 2019-02-26 15:08:52 · 11607 阅读 · 4 评论 -
verilog的时钟分频与时钟使能
时钟使能电路是同步设计的基本电路,在很多设计中,虽然内部不同模块的处理速度不同,但由于这些时钟是同源的,可以将它们转化为单一时钟处理;在ASIC中可以通过STA约束让分频始终和源时钟同相,但FPGA由于器件本身和工具的限制,分频时钟和源时钟的Skew不容易控制(使用锁相环分频是个例外),难以保证分频时钟和源时钟同相,因此推荐的方法是使用时钟使能,通过使用时钟使能可以避免时钟“满天飞”的情况,进而避...转载 2019-03-26 22:25:14 · 4111 阅读 · 0 评论 -
乒乓操作
“乒乓操作”是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法如图所示。乒乓操作的处理流程为:输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”;在第2个缓冲周期,通过“输入数据选择单元”的切换,...原创 2019-04-08 10:33:44 · 15391 阅读 · 9 评论 -
串并转换
1.并转串module b2c(clk,ain,rst,bout,load,ready);//并转串 input clk,rst,load; input [7:0] ain; output reg bout; output reg ready; reg [7:0] temp; always @(posedge clk or posedge rst) begin ...原创 2019-04-08 15:15:14 · 10264 阅读 · 2 评论 -
边沿检测Verilog实现(包含上升沿,下降沿,双边沿)
思路:设计两个或多个一位的寄存器,用来接收被检测的信号,系统时钟来一次记一次输入信号,如果用了两个寄存器直接异或就可以了;使用高频的时钟对信号进行采样,因此要实现上升沿检测,时钟频率至少要在信号最高频率的2倍以上,否则就可能出现漏检测。具体请参见下面代码:module edge_detect(clk,rst,signal,pos_edge,neg_edge,both_edge); inpu...原创 2018-12-28 15:43:38 · 26650 阅读 · 6 评论 -
Verilog有符号数与无符号数的数值运算
一、无符号数1.高位溢出赋给一个位宽不够的数wire [3:0] a=4'b1111;//15wire [3:0] b=4'b0010;//2wire [3:0] c;assign c = a + b;//17=10001wire [3:0] a=4'b1111;wire [3:0] b=4'b0010;wire [2:0] c;assign c = a + b...原创 2019-04-03 20:30:59 · 6167 阅读 · 0 评论 -
verilog中的任务、函数
目录1.任务1.1任务的定义1.2任务的调用2.函数2.1函数的定义2.2函数的调用2.3常数函数3.系统函数和系统任务3.1显示任务3.1.1显示和写任务(display and write)3.1.2选通任务strobe3.1.3 监控任务monitor3.2文件输入输出任务3.2.1文件的打开和关闭3.2.2输出到...原创 2019-05-01 15:30:21 · 6954 阅读 · 3 评论 -
数字IC面试题
Question D1): You can use just a NAND gate, How many ways can you come up withan inverter ?先列出真值表:即可以将A、B输入相连或者将其中一个输入置为高电平;Question D2): Make an INVERTER using only 2 input NOR gatesQue...原创 2019-07-18 16:45:29 · 6519 阅读 · 0 评论 -
同步复位与异步复位
简介在实际的工程中选择复位策略之前必须考虑许多设计方面的问题,如使用同步复位或者异步复位或者异步复位同步释放(Asynchronous Reset Synchronous Release或者Synchronized Asynchronous Reset),以及是否每一个触发器都需要进行复位。复位的基本目的是使器件进入到可以稳定工作的确定状态,这避免了器件在上电后进入到随机状态导致跑飞了。在实际...转载 2019-07-23 20:24:50 · 13076 阅读 · 0 评论 -
组合逻辑和时序逻辑的区别与联系
根据逻辑电路的不同特点,数字电路可以分为:组合逻辑和时序逻辑 组合逻辑 组合逻辑的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原本的状态无关,逻辑中不牵涉跳变沿信号的处理,组合逻辑的verilog描述方式有两种:(1)always @(电平敏感信号列表)或者always @ *always模块的敏感列表为所有判断条件信号和输入信号,但一定要注意敏感列表的完整性。在alway...原创 2018-12-27 16:03:05 · 7208 阅读 · 3 评论