在测试平台中进行vhdl信号分配

时间:2015-10-27 15:02:28

标签: signals vhdl

即使在网上进行了广泛的研究之后,我还没有看到有关如何在带有等待语句的vhdl测试平台中发生信号分配的清晰解释。

请有人详细说明它是如何运作的?

例如在这个过程中我有这样的事情:

wait until spi_sck = '1';
wait until spi_sck = '0';
tb_rx_bytes(7) <= spi_mosi;

如何确保tb_rx_byte分配发生?

更具体地说,我的问题是最后tb_rx_bytes未设置为spi_mosi作业。

for j in 31 downto 0 loop
  wait until spi_sck = '1';
  wait until spi_sck = '0';
  tb_rx_bytes(j) <= spi_mosi;
end loop;

2 个答案:

答案 0 :(得分:1)

为了看到信号分配的影响,必须先连续3个条件:

  1. spi_sck上有一个事件(值更改),新值为'1'
  2. spi_sck上有一个事件(值更改),新值为'0'
  3. 经过一些物理时间,使得作业具有明显的效果
  4. 我猜这是失败的最后一个条件,并阻止最后一个分配产生可见效果。在wait for 1 ns;声明之后添加end loop;

答案 1 :(得分:0)

这是让一些人开始使用VHDL时感到困惑的事情之一,特别是那些具有编程语言背景的人。在VHDL中,信号分配不像编程语言那样立即更新。而是预订分配,并在进程暂停时更新信号值。这种情况发生在

  1. 该过程运行到最后,然后等待其敏感列表中的一个信号发生变化。或
  2. 遇到等待声明时。
  3. 因此,在您的情况下,tb_rx_bytes的值将被更新,除了位0,它仅在循环的最后一次迭代中被预订用于更新。但是,在满足上述两个条件之一之前,不会更新该值。