Verilog规范告诉我们:negedge 事件指的是如表43所示的跳变,发生negedge事件时才会执行操作。那么0时刻,是如何执行操作的呢?
鸽子在Verilog标准中并没有找到0时刻赋值明确的说明。如下代码中,0时刻,rst_n为0,clk 处于低电平,那么cfg_mode的数值是多少呢?
always@(posedgeclkornegedgerst_n) if (!rst_n) begin cfg_mode <= 1'b0; end else begin cfg_mode <= cfg_mode_in ; end
实际电路中:
在芯片上电之前,芯片的chip_reset一直处于复位状态,因此导致芯片内部的rst_n一直为0,且芯片内部PLL还没有工作,也没有产生clk,此时没有任何信号的跳变,即clk没有跳变,rst_n一直为0也没有跳变。在实际电路中,从D触发器的结构图可以看到,当复位R一直是1时,即使时钟信号不跳变,Q端输出也是0。
VCS在0时刻赋值
VCS 在0时刻会执行一次always块的赋值,而不是等到信号跳变。
module zero_time_test; reg rst_n; initial begin rst_n = 0; #20 rst_n = 1; end always@(posedge rst_n) begin: always_case1 $display("The always case1 executed @Time %f", $time()); end always@(negedge rst_n) begin: always_case2 $display("The always case2 executed @Time %f", $time()); end always@(rst_n) begin: always_case3 $display("The always case3 executed @Time %f", $time()); end endmodule
module zero_time_test; reg rst_n; initial begin rst_n = 1; #20 rst_n = 0; end always@(posedge rst_n) begin: always_case4 $display("The always case4 executed @Time %f", $time()); end always@(negedge rst_n) begin: always_case5 $display("The always case5 executed @Time %f", $time()); end always@(rst_n) begin: always_case6 $display("The always case6 executed @Time %f", $time()); end endmodule
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
寄存器
+关注
关注
30文章
5042浏览量
117766 -
D触发器
+关注
关注
2文章
147浏览量
47385 -
CLK
+关注
关注
0文章
122浏览量
16912 -
PLL电路
+关注
关注
0文章
91浏览量
6283 -
Verilog语言
+关注
关注
0文章
113浏览量
8162
原文标题:异步复位寄存器:0时刻赋值
文章出处:【微信号:IP与SoC设计,微信公众号:IP与SoC设计】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
寄存器reg延迟问题
各位看官好,最近小弟遇到了一个寄存器延迟的问题,虽然不是特别重要,但还是想弄明白,请各位看官指导。具体如下: 对于一个只有clk、reset、data_in、data_out的模,当我们用如下
发表于 11-14 10:10
寄存器赋值问题
P1.5 P1.4 P1.3 P1.2 P1.1 P1.0上面的0X开头的数,是以4个“位”为一个单位进行计算,以8421码进行相加计算即可。举个例子就明白了。你可以做一个这样的表格:从上表看出,把
发表于 11-23 16:08
简谈同步复位和异步复位
关键,必须要按住一会会。 那下面咱们就来详细聊聊这三种类型。 一、无复位 没见过这样写代码的,竟然没有复位,老师都说数字电路离不开复位的,没有复位,
发表于 01-30 11:01
如何给CC2650的寄存器赋值
Hello, all!
由于在CCSv6.1中未能找到类似CC2650.h的头文件,所以无法在main函数中直接给CC2650的寄存器进行赋值。
问:如何给CC2650的寄
发表于 06-21 09:35
为什么SSI通信接口的数据寄存器不能直接赋值?
在学SSI的通信接口,试着通过寄存器直接控制,可是调试时发现,对SSI的数据寄存器直接赋值根本就不能赋值,换句话说赋值是无效的。这是什么情况
发表于 09-04 06:11
寄存器组R0-R12R0-R12相关资料推荐
寄存器组R0-R12R0-R12,通用寄存器;R0-R12都是32位通用寄存器,用于数据操作;但是绝大多数16位Thumb指令只能访问R
发表于 12-09 07:48
寄存器是怎么封装的呢
最近对嵌入式中的地址有了更深入的认识,简单记录一下。以STM32F103为例,在寄存器模板中我们都知道只要对寄存器简单地进行赋值就可以完成流水灯等操作,那么这些
发表于 01-20 07:06
什么样的寄存器不需要复位呢?哪些寄存器是CPU能够访问的
地址。当CPU发一个0x46018000的地址下来,那么硬件会自动根据它的基地址判断它是去访问I2C的。然后根据偏移地址便可以知道是访问I2C的哪一个寄存器了。3、寄存器的复位需不需要
发表于 07-08 17:43
评论