【问题标题】:Changing IF statements, saving some code更改 IF 语句,节省一些代码
【发布时间】:2013-11-12 06:39:34
【问题描述】:

你好朋友和专业程序员,我是这个 VHDL 世界的新手,我有这个问题。 我想做这个:

   if counter >= 0 and counter <=95 then
    aux_Hs <= '0';
   else
    aux_Hx <= '1';
   end if;

在这样的情况下:

   aux_Hs <= (counter >= 0 and counter <=95);

这个错误出现了:

第 73 行。aux_Hs 的类型与 and 的类型不兼容。

aux_Hs 是一个信号STD_Logic

有没有办法保存 IF 语句?伪“?:”指令?

提前谢谢你:)

【问题讨论】:

  • 您的两个代码示例是否正确?他们似乎做相反的事情

标签: if-statement vhdl


【解决方案1】:

作为并发代码,没有 VHDL-2008:

   aux_Hs <= '1' when (counter >= 0 and counter <=95) else '0' ;

使用 VHDL-2008:

   aux_Hs <= counter ?>= 0 and counter ?<=95 ;

【讨论】:

  • 你可以在进程内使用它们吗?据我所知,在进程内你需要使用 IF,而在进程外你可以执行“when”语句。
  • 这是一个很好的规则。 Jim 上面写的那行代码是为了在进程之外执行。您在初始示例中的代码属于时钟进程。
  • 在 VHDL-2008 之前,条件分配,也就是“何时”,需要在进程之外。使用 VHDL-2008,您还可以在进程中使用它们。第二个代码 sn-p 中的 2008 代码可以在任何地方使用(假设该工具支持它)。请记住,VHDL-2008 的大部分合成仍处于最前沿 - 当您有迫切需要时使用,但始终测试和报告错误 - 这就是我们优先考虑新功能的方式。
【解决方案2】:

如果你需要在进程中做这件事,你可以像这样保存一行代码:

aux_Hs <= '0';
if not (counter >= 0 and counter <=95) then
   aux_Hx <= '1';
end if;

或者您可以使用 VHDL-2008(如果不支持 VHDL2008,请查找编译器上的开关并记录错误!)它允许在进程内进行条件分配:

aux_Hs <= '0' when (counter >= 0 and counter <=95) else '1' ;

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 2014-05-12
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多