1. VHDL信号赋值的基本概念
1.1 非阻塞赋值(<=
)
- 信号赋值:在VHDL中,
<=
用于信号的非阻塞赋值。这意味着赋值操作不会立即改变信号的值,而是将新的值调度到当前时钟周期结束后生效。 - 变量赋值:相对的,
:=
用于变量的阻塞赋值,仅在进程内部使用,且立即生效。
1.2 进程(Process)与并发语句(Concurrent Statements)
- 进程内部:一组顺序执行的语句,受到敏感列表或触发条件(如时钟边沿)的控制。
- 进程外部:并发语句,始终处于活动状态,类似于硬件中的并行逻辑。
2. 进程内部与进程外部的 <=
操作符
2.1 进程内部的 <=
操作
process(clk)
begin
if rising_edge(clk) then
a <= b;
c <= a;
end if;
end process;
特点:
- 顺序执行:语句按顺序执行,模拟顺序逻辑。
- 非阻塞赋值:
a <= b;
和c <= a;
都是非阻塞赋值,意味着c
会在本时钟周期结束后接收a
的旧值,而不是新赋值的b
。 - 时序行为:
a
被调度为b
的值,但在本时钟周期内,a
仍然保持旧值。c
被赋值为a
的旧值。
仿真示例:
时钟周期 | b | a (更新后) | c (更新后) |
---|---|---|---|
1 | 0 | 0 | 0 |
2 | 1 | 1 | 0 |
3 | 0 | 0 | 1 |
4 | 1 | 1 | 0 |
… | … | … | … |
2.2 进程外部的 <=
操作
a <= b;
c <= a;
特点:
- 并发执行:这些赋值语句始终处于活动状态,类似于组合逻辑电路。
- 非阻塞赋值:每当
b
变化时,a
会立即跟随b
的变化;同时,c
会立即跟随a
的变化。 - 时序行为:
a
始终等于b
。c
始终等于a
,也即等于b
。
仿真示例:
时钟周期 | b | a (赋值后) | c (赋值后) |
---|---|---|---|
1 | 0 | 0 | 0 |
2 | 1 | 1 | 1 |
3 | 0 | 0 | 0 |
4 | 1 | 1 | 1 |
… | … | … | … |
3. 关键区别总结
特性 | 进程内部 <= | 进程外部 <= |
---|---|---|
执行方式 | 顺序执行,受进程的触发条件控制 | 并发执行,始终处于活动状态 |
赋值时机 | 信号在时钟周期结束后更新 | 信号随输入变化立即更新 |
信号赋值的依赖性 | 后续赋值语句读取的是赋值前的旧值 | 后续赋值语句读取的是赋值后的新值 |
应用场景 | 顺序逻辑,如寄存器、状态机 | 组合逻辑,如加法器、多路复用器 |
赋值影响范围 | 赋值仅在进程内部影响其他语句 | 赋值对所有并发语句可见 |