深入探讨FPGA Verilog时序控制

在FPGA设计的世界中,时序控制是确保电路按预期工作的关键。Verilog作为硬件描述语言,提供了丰富的时序控制机制,让设计者能够精确地控制信号的时序关系。

本文将深入探讨Verilog中的时序控制方法,包括时延控制和事件控制,并结合实际代码示例,帮助读者深入理解这些概念。

一、Verilog时序控制概述

Verilog提供了两大类时序控制方法:时延控制和事件控制。

时延控制用于指定语句执行的时间间隔。

事件控制则基于信号或事件的变化来触发语句的执行。

二、时延控制详解

时延控制是Verilog中用于模拟时间延迟的一种方法,需要注意的是这个是不可综合,可用于仿真测试。

它可以分为常规时延和内嵌时延两种形式。

1、常规时延

使用 #delay 语法,表示在执行赋值操作前等待指定的时间。

例如:

reg a, b;
#10 b = a;

这表示等待10个时间单位后,执行赋值语句,将a赋值给b。

也可以分开写:

#10;

b = a;

2、内嵌时延

将延时直接放在赋值操作符之后,表示先计算右侧的表达式,然后等待指定时间后赋值。

例如:
 

reg a, b, c;
c = #10 a & b;

三、事件控制详解

事件控制基于信号的变化来触发操作,主要分为边沿触发事件控制和电平敏感事件控制。

1、边沿触发事件控制

使用 @(posedge signal) 或 @(negedge signal) 来指定在信号的上升沿或下降沿触发操作。

例如:

always @(posedge clk) begin
    q <= d;
end

这表示在时钟信号 clk 的上升沿, q 将被赋予 d 的值。

如果使用 @(signal),未指明跳变方向,则表示不管是上升沿还是下降沿都触发事件。

对于有多个信号变化都会触发事件,那么需要使用敏感信号列表,多个信号之间使用“ or ” 或 “,”来进行分隔。

常用时序逻辑:

always @(posedge clk or posedge reset) begin

    if(reset)

        q <= 0;

    else 

        q <= d;
end

常用组合逻辑:

always @(*) begin

      q = d ^ c;

end

always @(d, c) begin

      q = d ^ c;

end

2、电平敏感事件控制

使用 wait(condition) 来等待某个条件为真后执行操作。

例如:

initial begin
    wait (start_enable);
     data_buf = {data_if[0], data_if[1]};
end

这表示在 start_enable 信号为真(高电平)后,执行更新 data_buf 。

注意,这个语句不能综合,可用勾玉仿真测试。

“时序”最容易联想到就是“时序图”,亦即模块的输出。换句话说“时序”是模块执 行过程的显性记录。一般在仿真上,模块的时序图都是在理想状态下(没有任何物理上 的问题)产生的。时序图里边包含了模块最清洁的执行记录。这些信息对于“细化”模 块来说有很大的帮助。然而影响着这些时序就是Verilog HDL 语言本身。 很多时候,虽然低级建模(建模技巧)已经可以帮助我们完成许多模块设计上的要求, 但是低级建模始终是属于“建模”的层次,亦即“塑造”模块一个大概的形状,而且是 粗糙的东西而已。这粗糙的东西,效果能不能发完全发挥? 我们需要经过“细化”它才 知道结果。 要完成“细化”的过程一点也不可以马虎。早期的建模必须留下可以“细化”的种子。 此外我们还要往模块更深入去了解它,去分析它,如果有模块有问题就调试它。这全部 的工作要求,更进一步挑战我们对Verilog HDL 语言的认识和掌握的程度。有关这一点, 再也不是:了解Verilog HDL 语言相关的语法如何使用?如何使用Verilog HDL 语言建 立一个模块?等这些Verilog HDL 语言“外观的单纯工作”,而是“深入分析”模块执 行时的“内部细节”。关于模块一切的一切过程,我们只能在“时序图”上了解而已。 这就是这本笔记命名的初衷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值