首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VHDL信号模拟简化

VHDL信号模拟简化
EN

Stack Overflow用户
提问于 2016-10-28 08:59:04
回答 1查看 127关注 0票数 1

我对VHDL很陌生,我有个愚蠢的问题。

我的代码中有一个巨大的case语句,只有1种情况下是一个值(例如“1”),而在所有其他情况下都是“0”。我想避免在所有情况下都编写th my_signal <= '0‘,但只写到1(代码可读性/密度/复制)

为了便于阅读,我想在这个过程中保持这个信号的矫揉造作。

我想做的是

代码语言:javascript
复制
my_signal <='0';  
case  
case0  
....  
case1  
....  
case2  
my_signal <='1';  
....  
case3  
....  
case4  
....  

避免

代码语言:javascript
复制
case  
case0  
my_signal <='0';  
....  
case1  
my_signal <='0';  
....  
case2  
my_signal <='1';  
....  
case3  
my_signal <='0';  
....  
case4  
my_signal <='0';  
....  

但在我看来这是一个多驱动的信号。要做到这一点,清洁的方法是什么?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-28 09:17:08

你有两个选择:

( i)缺省转让

代码语言:javascript
复制
....
my_signal <='0';
case ...
  when case2 =>
    my_signal <='1';
    ....
end case;

(二)其他分支:

代码语言:javascript
复制
case ...
  when case2 =>
    my_signal <='1';
    ....
  when others =>
    my_signal <='0';
end case;
....

选择(ii)可能更有用,因为VHDL中的case语句要求包含所有的可能性,因此对于选择(i),您可能需要一个when others =>分支来满足该条件,即(i)必须:

代码语言:javascript
复制
....
my_signal <='0';
case ...
  when case2 =>
    my_signal <='1';
    ....
  when others =>
    null;         -- do nothing
end case;

你最初的建议和我的建议都没有“多驱动”的信号。您可以从一个进程中任意次数地驱动(分配)一个信号,而且它从来不是一个“多驱动”信号。进程中对信号的任何分配都会在该信号上产生驱动程序。只有当您将来自多个进程的信号分配给多个进程时,才会得到“多驱动”信号,而您并没有这样做。当执行带有信号分配(<=)的代码行时,实际发生的是将事件放在事件队列中(模拟器“要做列表”)。该事件将在下一个增量周期(或模拟周期)上发生,这是仿真的下一个迭代。如果在相同的模拟周期内执行多行信号赋值,则删除事件队列中的任何事件,并由上一次信号分配生成的事件替换(稍微过于简化,但现在可以)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40301547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档