即使在网上进行了广泛的研究之后,我还没有看到有关如何在带有等待语句的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;
答案 0 :(得分:1)
为了看到信号分配的影响,必须先连续3个条件:
spi_sck
上有一个事件(值更改),新值为'1'
spi_sck
上有一个事件(值更改),新值为'0'
我猜这是失败的最后一个条件,并阻止最后一个分配产生可见效果。在wait for 1 ns;
声明之后添加end loop;
。
答案 1 :(得分:0)
这是让一些人开始使用VHDL时感到困惑的事情之一,特别是那些具有编程语言背景的人。在VHDL中,信号分配不像编程语言那样立即更新。而是预订分配,并在进程暂停时更新信号值。这种情况发生在
因此,在您的情况下,tb_rx_bytes的值将被更新,除了位0,它仅在循环的最后一次迭代中被预订用于更新。但是,在满足上述两个条件之一之前,不会更新该值。