浅谈: HCL硬件控制语言-情况表达式
HCL情况表达式(case expression)中的项由:
\(\texttt{bool表达式: 对应值}\)
来表示。
比方说,有一个表达式:
word OUT = [
s: A;
1: B;
]
这里,s是一个控制信号。该表达式表示,若s值为1,则OUT为A;否则OUT为B。
注意,若某项的bool表达式为1,则该项为一个默认情况,即前面的项都不满足,则输出为该项(这里理解的关键在于,项中冒号前面的是一个bool表达式,而不是某种赋值行为!)。
再看个例子:
word Out4 = [
!s1 && !s0 : A; #00
!s1 : B; #01
!s0 : C; #10
1 : D; #11
]
这里,信号s1与s0以一个2位二进制数[s1 s0]的形式控制字A、B、C、D的选择。第二项比较反直觉,一般会写为!s1 && s0。要想理解,得从头开始解释:
- 若s1与s0均为0,则输出A;否则有两种可能:至少有一个为1、均为1;
- 若s1=0,则为“至少有一个为1”的情况,此时s0必为1;
- 若s0=0,则为“至少有一个为1”的情况,此时s1必为1;
- 若第2、3项均不满足,则为“均为1”的情况。
最后一个例子:
word Min3 = [
A <= B && A <= C : A;
B <= A && B <= C : B;
1 : C;
]
该选择表达式选出ABC中最小的一个并输出,它用了四个比较表达式来完成该功能。若要让比较表达式的数量缩减为3个,则写为:
word Min3 = [
A <= B && A <= C : A;
B <= C : B;
1 : C;
]
分析一下:
- 如果第一项为假,说明A可能大于B与C的其中任何一个,那么最小值只可能是B、C中的一个;
- 此时只需比较B与C的大小。若B小,输出B;
- 否则输出C。

浙公网安备 33010602011771号