FPGA中时序和组合逻辑语法对应的时钟波形

针对时序逻辑电路和组合逻辑电路,如果有信号发生变化,那么它们相对于整个电路的时钟clk是如何的呢?要不要考虑clk呢?
主要仿真了一下几个语句
//时序逻辑电路
always@(posedge clk or negedge rst)
这个是典型的时序逻辑电路,当括号的敏感信号变化时,always的语句块才会执行;这里的执行条件是复位信号有复位 或者 在时钟信号的上升沿到来。是严格和clk信号对齐的。
同步时序电路设计中需要注意的是,当外部有一个异步输入信号发生改变时,如果我们在clk的上升沿去采这个信号,然后保存到寄存器中,那么这个信号至少要保存一个clk的时钟周期。
在这里插入图片描述
如上图所示,最上面的是clk信号,第3行是外部输入的异步信号,信号从1变成0,是在clk的一个随机时刻发生的,在下一个clk的上升沿,保存到寄存器中,也就是下面的波形。

如果信号从1变成0,然后又很快的变成了1,那么再下一个clk的上升沿将不会采集到这个变为0的信号了,如下仿真波形。
在这里插入图片描述
如上图所示,clk的时钟周期是20ns,但是这个变化的低脉冲只持续了5ns,因此在下一个clk上升沿的时候,采集到的电平还是1,就丢失了这个低电平信号。这种就会导致同步信号失败。

//组合逻辑电路
assign
举个例子:assign d = c;
注意这里的赋值表达式,用的是阻塞赋值的“=” ,这个是组合逻辑专用的符号。这里当信号c变化时,d是立即跟着变化的,不会考虑当前的时钟clk在哪里,是不是在上升沿什么的。统统不考虑,只要c变化,d立马跟着变。

//组合逻辑电路
always@(*)
当always后面的敏感信号,只是电平敏感信号时,及输入信号的值发生改变,那么就会执行下面语句块中的内容,同样是不考虑clk到哪里了,这个和assign是一样的

附上测试仿真工程:可自行测试
链接:https://pan.baidu.com/s/1wrGS3jjQ7TMuaqvS0NcgDA
提取码:pa0b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值