【问题标题】:VHDL shift Array elements of an (N+1) x 13 Array(N+1) x 13 数组的 VHDL 移位数组元素
【发布时间】:2019-08-13 04:05:19
【问题描述】:

我似乎在移动矢量数组元素时遇到了问题。当我的 FSM 进入状态时,应在输入的开头添加一个 0,然后将其保存在第 0 个数组位置。其余的数组条目应该再移动一步,所以位置 0 到位置 1 等等。

我尝试在状态机中使用的是

when readAndShift =>
   x(0) <= "0" & x_in;
   for i in N to 1 loop
      x(i)    <=  x(i-1);    
   end loop;

类型和变量声明为:

type    tap_line is array(0 to N) of std_logic_vector(12 downto 0);
.
.
.
signal x    :   tap_line  := (others=>(others=>'0'));

据我了解,在 VHDL 中,for 循环“展开”自身并同时执行 for 循环的每一步,所以一个时钟上升沿就足够了,对吧?我的模拟只显示了第 0 个数组元素的变化。

【问题讨论】:

  • 当然我很乐意分享完整的代码和模拟文件,但我想也许我已经把显示的代码弄错了
  • for i in 1 to N loop
  • @giampietro-seu 而不是。 for i in N downto 1 loop
  • @mfro 有什么区别?
  • @giampietro-seu 关于结果,没有。关于学习效果,很多。

标签: arrays for-loop vhdl


【解决方案1】:

好吧,我想写的是

when readAndShift =>
   x(0) <= "0" & x_in;
   for i in N downto 1 loop
      x(i)    <=  x(i-1);    
   end loop;

我以为方向会自动确定。 感谢您的帮助,现在我可以继续解决其余的逻辑问题

【讨论】:

  • 您应该能够跳过循环,只需执行以下操作:x(N downto 1)
  • x 的类型有升序,Timmy Brolin 的注释不起作用。尝试x &lt;= ('0' &amp; x_in) &amp; x(0 to N - 1);,其中为任何一维数组类型(tap_line)预定义了连接运算符,虽然缺少带有x_in, 声明的minimal reproducible example,但它似乎是与std_logic_vector 兼容的子类型,并且长度为12。
  • 感谢评论,我会尝试一下,但 for 循环对我来说效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2012-09-19
  • 1970-01-01
相关资源
最近更新 更多