lesson1:组合逻辑与时序逻辑
1:组合逻辑和时序逻辑对比
组合逻辑 | 时序逻辑 |
---|---|
输出状态直接与输入相关 | 在时钟上升沿触发后输出新的值 |
容易出现竞争冒险现象 | 一般不会出现竞争冒险现象 |
时序较难保证 | 更容易达到时序的收敛,时序逻辑更可控 |
只适合简单的电路 | 适用于大规模的电路 |
竞争冒险:数字电路中的竞争与冒险出现在组合逻辑电路中。
组合逻辑电路中,同一信号经不同的路径传输后,到达电路中某一会合点的时间有先有后,这种现象称为逻辑竞争,而因此产生输出干扰脉冲的现象称为冒险。
组合逻辑
时序逻辑
2:组合逻辑实现
组合逻辑实现方式1:always @(电平敏感信号列表)
在always中可以使用if、case语句
一般使用阻塞赋值语句 =
always模块信号必须定义为reg型,仅仅是语法要求,实际实现仍是wire类型。
例:
这个敏感列表便为x,y其中一个变化遍会被触发
reg z; always@(x or y) z = x&&y; |
---|
组合逻辑实现方式2:assign描述的赋值语句
信号类型只能定义为wire型
wire z; assign z = x&& y; |
---|
3:时序逻辑实现
时序逻辑实现:
always@(posedge clk)begin … end |
---|
注:
1、时序逻辑always块中reg类型都会被综合成reg类型
2、时序逻辑一般使用非阻塞赋值
3、敏感列表只要有时钟沿变化即可,即每次触发变化都是由时钟引起的。
4:组合逻辑与时序逻辑代码设计
异或门z = a ^ b实现 | |
---|---|
组合逻辑 | 时序逻辑 |
input a; input b; output z; assign z = a^b; (不写信号类型,默认为wire类型) | input a; input b; output reg z; always@(posedge clk)begin z <= a^b; end |
注:
异或为a,b不同为1
真值表:
a | b | z |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
波形图:
5:搭建测试平台,同时对两个代码做仿真
a和b同步变化 | a和b不同步变化,有1ns延时 |
---|---|
@(posedge clk); a <= 1; b <= 0; | @(posedge clk); a <= 1; #1; //a和b变化不同步 b <= 0; |
6:分析比对的波形
注:
组合逻辑是立即变化,所以当电路中两个信号由于一些意外因素造成延迟,组合逻辑会立即变化,产生毛刺,但时序逻辑只在时钟上升沿才会变化。
时序逻辑只要在上升沿左边建立时间,右边保持时间保持数据的稳定就可以。