verilog学习笔记4——竞争和冒险、verilog延时语句、timescale


前言

2023.8.10
2023.9.8


一、竞争和冒险

1、定义

竞争:由于信号经不同路径达到同一点的时间有先后顺序
冒险:由于竞争现象的存在导致输出发生瞬间的错误

有竞争不一定有冒险,有冒险一定有竞争

2、判断方法

  • 卡诺图:卡诺图相切处没有其他卡诺圈
  • 代数法:存在相反变量就有可能存在竞争和冒险
  • 实验法:通过示波器进行观察

3、消除方法

  • 修改逻辑设计,增加冗余项
  • 输出端并联电容进行滤波
  • 使用格雷码
  • 信号同步处理
  • 信号延迟:延迟较小的支路加上毛刺宽度的延迟可以进行消除

4、滤除毛刺的方法

  • 小于一个周期的毛刺:把信号打两拍,把打一拍后的和两拍后信号相或
  • 一个周期到两个周期之间的毛刺:打三拍,把打拍后的信号相或

二、延时语句分类

1、阻塞赋值左侧延时

在10ns后,把10ns时刻的b+c值赋值给a,a拿到的是b+c的最新值

always@(*)
	#10 a = b + c;

2、阻塞赋值右侧延时

先把0时刻的b+c值暂存起来,在10ns后,把0时刻的b+c值赋值给a

always@(*)
	a = #10 b + c;
等效于
always@(*)
	temp = b + c;
	#10 a = temp;

如果0-10ns之间b、c的值发生了改变,那么不会影响a的值

3、非阻塞赋值左侧延时

在10ns后,把10ns时刻的b+c值赋值给a,a拿到的是b+c的最新值(和第一种情况相同)

always@(*)
	#10 a <= b + c;   //拿到的是最新值

4、非阻塞赋值右侧延时

只要b或c发生改变,引起always触发,就会把当前触发时刻的b+c赋值给a
如果b和c在0-10ns之间发生改变,改变也会体现在从改变时刻开始往后的10ns
也就是输出会随着输入变化,只是有10ns的延时

always@(*)
	a <= #10 b + c;

三、比较及举例说明

1、阻塞右侧延时和非阻塞右侧延时的区别

前者会忽略中间变量的改变,后者输入随输出改变

2、举例

第一个:

a = 0;
b = 0;
q = 0;
#5 a <= 1;
b <= 1;
q <= a & b;

在5ns时刻,三个非阻塞赋值并行运行,q的值为0
如果改成如下方式,则6ns时刻,q的值为1

#1 q <= a & b;

第二个:
前者会分别暂存此刻的a和b,等到5ns后再分别赋值给a和b
后者则在5ns分别给a和b赋值,会发生竞争冒险

fork
	a = #5 b;
	b = #5 a;
join
fork
	#5 a = b;
	#5 b = a;
join

三、timescale 时间单位/时间精度

  • 时间精度要小于时间单位
  • 两者都必须为整数,1,10,100等数值
  • 单位是s、ms、us、ns、ps、fs

1、作用范围

声明之后会影响后面所有模块的延时值

例1:时间单位1ns,延迟时间可以是三位小数的实数
如#1.5565,就会变成1.557ns

`timescale 1ns/1ps  

例2:10us/100ns=100,延迟时间可表示为两位小数的实数

`timescale 10us/100ns
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它能够在电路中实现各种数字逻辑功能。Verilog语言则是一种硬件描述语言,用于描述数字系统的行为和结构。本文将通过基于Altera EP4CE10(一款FPGA芯片)进行的FPGA Verilog开发实战指南,向读者介绍如何使用Verilog语言开发FPGA应用。 首先,选择合适的开发工具,例如Altera Quartus Prime软件。在Quartus中,创建一个新的工程,并添加Verilog源文件,用于编写FPGA应用的逻辑代码。在编写代码时,需要了解基本的Verilog语法和模块化设计的原则。 接下来,将FPGA芯片选项设置为Altera EP4CE10,并进行引脚分配。引脚分配是将逻辑信号与FPGA芯片引脚相连接的过程。确保正确地将输入和输出信号与特定引脚相连接,以实现所需的功能。 然后,进行逻辑编译和映射。逻辑编译将Verilog代码转换为低级逻辑网表,并进行逻辑优化。映射阶段将逻辑网表映射到FPGA芯片中的逻辑单元和开关资源。 在映射之后,进行时序分析和布线。时序分析用于验证设计在时序要求下的正确性,以确保信号传输的稳定性和准确性。布线是将逻辑资源与FPGA芯片中的物理资源相互连接的过程。 最后,进行编程和调试。将生成的比特流文件下载到FPGA芯片中,并进行信号调试和性能优化。通过使用逻辑分析仪等工具,可以检查信号的波形和逻辑的正确性,并根据需要进行调整和改进。 在进行FPGA Verilog开发实战时,需要具备较好的数字电路基础和Verilog语言掌握程度。通过实践和经验积累,不断提升对FPGA开发的理解和技能,才能开发出高效和可靠的FPGA应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值