浅谈: 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。
posted @ 2022-08-05 19:21  elexenon  阅读(151)  评论(0)    收藏  举报