Verilog:如何在case语句中将值的范围定义为单个条件?

Verilog:如何在case语句中将值的范围定义为单个条件?,verilog,Verilog,我想描述超过200个案例的大型多路复用器,每个案例包含数十个值。一些例子: 9000 - 9029 : addr <= 0; 9030 - 9065 : addr <= 1; 9066 - 9131 : addr <= 2; ... 9000-9029:addr您不能在Verilog中使用case语句来执行此操作。您必须使用一系列的if…else语句 if ((value >=9000) && (value<=9029)) addr <=

我想描述超过200个案例的大型多路复用器,每个案例包含数十个值。一些例子:

9000 - 9029 : addr <= 0;
9030 - 9065 : addr <= 1;
9066 - 9131 : addr <= 2;
...

9000-9029:addr您不能在Verilog中使用
case
语句来执行此操作。您必须使用一系列的
if
else
语句

if ((value >=9000) && (value<=9029))
  addr <= 0;
else if ((value >=9030) && (value<=9065))
  addr <= 0;
else if ((value >=9066) && (value<=9131))
  addr <= 0;
else ...

if((值>=9000)和(值感谢您的快速回答。这是否意味着verilog中的两个语句都推断出优先级路由网络?这是我希望避免的大小。是的。verilog
case
语句的分支不必相互排斥。因此,存在优先级:匹配的第一个分支获胜。因此,您的逻辑合成器将同步使用case语句来确定优先级逻辑。如果不希望这样做,则必须在注释中嵌入synthesizer命令(例如
//synopsys parallel\u case
。然而,在SystemVerilog中,有一个内置的关键字强制实现了相互的排他性:
unique
。好的,这就清楚了。我想我会尝试使用单独的和并行的比较器以及结果的总和。如果这不符合我的预期,那么我将使用合成器命令。谢谢你的帮助.为了完整起见,在system verilog中,您还可以在[9000:9092]中的
case in
语句中使用标签范围:
case(sel):添加我想在这里添加一点,很难说你会合成相同的东西。如果你的情况是完整的情况,那么你会有一个大的mux,但是如果你的情况不是完整的情况,你会有一堆两个输入mux。如果你有任何方法,请注意这里,你会连接200个mux,并且是ca反驳说,每个多路复用器都有自己的延迟时间,这取决于技术,这可能会影响系统的最大频率。最后,为什么不编写Python脚本来为您编写此代码?这里我指的是完整的案例
if ((value >=9000) && (value<=9029))
  addr <= 0;
else if ((value >=9030) && (value<=9065))
  addr <= 0;
else if ((value >=9066) && (value<=9131))
  addr <= 0;
else ...