通过for循环分配VHDL记录
我在过程中有一个for循环,它在std_逻辑数组中运行良好,但在记录数组中运行不好。我使用Xilinx ISE和ISIM,代码是vhdl-93。目标是斯巴达3 以下是记录定义:通过for循环分配VHDL记录,vhdl,Vhdl,我在过程中有一个for循环,它在std_逻辑数组中运行良好,但在记录数组中运行不好。我使用Xilinx ISE和ISIM,代码是vhdl-93。目标是斯巴达3 以下是记录定义: TYPE spi_rx_t IS RECORD CS : std_logic; MOSI : std_logic; CLK : std_logic; END RECORD; constant SYNC_LATCHES : integer := 2; 以下是数组定义和声明: type spi_
TYPE spi_rx_t IS RECORD
CS : std_logic;
MOSI : std_logic;
CLK : std_logic;
END RECORD;
constant SYNC_LATCHES : integer := 2;
以下是数组定义和声明:
type spi_rx_array_t is array (0 to SYNC_LATCHES) of spi_rx_t;
signal spi_in_array : spi_rx_array_t;
以下是过程:
spi_in_array(0).MOSI <= SPI_MOSI;
spi_in_array(0).CLK <= SPI_CLK;
spi_in_array(0).CS <= SPI_CS;
sync_p: process (clk_100)
begin
if rising_edge(clk_100) then
-- for I in 1 to SYNC_LATCHES loop
-- spi_in_array(I) <= spi_in_array(I - 1);
-- end loop;
spi_in_array(1) <= spi_in_array(0);
spi_in_array(2) <= spi_in_array(1);
end if;
end process;
_数组(0)中的spi_MOSI正如所评论的,这是由于VHDL概念“最长静态前缀”。这与我的问题类似
在我的例子中,解决问题的最简单方法是将数组第一个元素的赋值移动到与for循环相同的进程中。我还必须将SYNC_locks常量从2减少到1,因为_数组(0)中的spi_现在使用clk_100锁存
sync_p: process (clk_100)
begin
if rising_edge(clk_100) then
spi_in_array(0).MOSI <= SPI_MOSI;
spi_in_array(0).CLK <= SPI_CLK;
spi_in_array(0).CS <= SPI_CS;
for I in 1 to SYNC_LATCHES-1 loop
spi_in_array(I) <= spi_in_array(I - 1);
end loop;
end if;
end process;
sync\u p:进程(时钟100)
开始
如果上升沿(clk_100),则
spi_in_数组(0)。MOSI如果使用注释掉的行,是否有任何警告或错误消息?我不知道是否相关,但在模拟时使用的VHDL标准是什么?可能重复的是VHDL-2002的属性,如“12.6.1驱动程序”一节所述;因此,这不是ISIM的一个缺陷。请参阅我的建议中对这一点的引用,以重复的形式结束这个问题。我已经添加了一个答案。非常感谢莫滕·齐默:)