我是VHDL編程FPGA的新手,我的模塊(請參閱下面的完整代碼)不起作用。VHDL when else does not work
如果用戶I/O設置基於用戶可用的寄存器(因此可以通過寄存器更改模式而無需觸摸FPGA固件),該模塊應該注意。有8個輸入引腳和8個輸出引腳,以及4種操作模式:1x8,2x8,4x8,8x8。輸出進入延遲/門控發生器模塊,然後輸出。該模塊的另一個功能是轉換32位輸入向量,實際上只分配8個引腳,並將一個值(特定於FPGA板交互)轉換爲更有意義的值。
就像現在一樣,無論clockcontrolREG的值是多少,else都捕獲與1x8模式相對應的所有(00)模式正在工作。 (我正在觀察示波器上的正確輸出),所以引腳分配沒有任何問題。它看起來像是因爲某些原因,我所有的when子句都被忽略了。
我確實將clockcontrolREG的初始值設置爲「00000011」(應將模式設置爲8x8),並且我確實訪問了寄存器並檢查了值確實存在。
我嘗試了2種不同的語法方式來描述相同的行(signalforclkgen(1)),沒有任何效果。
它看起來像我缺少一些非常基礎的東西.....但它是第三天,我坐在它上面沒有結果。感謝您提前提供的所有幫助。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity clkgencontrol is
port(
clockcontrolREG : in std_logic_vector(31 downto 0);
signalinput : in std_logic_vector(31 downto 0);
signalforclkgen : out std_logic_vector(7 downto 0)
);
end clkgencontrol;
architecture rtl of clkgencontrol is
begin
signalforclkgen(0) <= signalinput(31);
signalforclkgen(1) <= signalinput(15) when (clockcontrolREG(0) = '1' and clockcontrolREG(1) = '1') else
signalinput(31);
signalforclkgen(2) <= signalinput(30) when (clockcontrolREG = "00000011") else
signalinput(15) when (clockcontrolREG = "00000010") else
signalinput(31);
signalforclkgen(3) <= signalinput(14) when (clockcontrolREG = "00000011") else
signalinput(15) when (clockcontrolREG = "00000010") else
signalinput(31);
signalforclkgen(4) <= signalinput(19) when (clockcontrolREG = "00000011") else
signalinput(30) when (clockcontrolREG = "00000010") else
signalinput(15) when (clockcontrolREG = "00000001") else
signalinput(31);
signalforclkgen(5) <= signalinput(3) when (clockcontrolREG = "00000011") else
signalinput(30)when (clockcontrolREG = "00000010") else
signalinput(15)when (clockcontrolREG = "00000001") else
signalinput(31);
signalforclkgen(6) <= signalinput(18) when (clockcontrolREG = "00000011") else
signalinput(14) when (clockcontrolREG = "00000010") else
signalinput(15) when (clockcontrolREG = "00000001") else
signalinput(31);
signalforclkgen(7) <= signalinput(2) when (clockcontrolREG = "00000011") else
signalinput(14) when (clockcontrolREG = "00000010") else
signalinput(15) when (clockcontrolREG = "00000001") else
signalinput(31);
end rtl;
我沒有確認所有WHEN子句被忽略,通過修改signalforclkgen(7)分配,通過使捕捉一切0,而不是有效信號(並且爲reg值「00000000」添加一個選項)。實際上輸出是0。 –
這是什麼工具鏈編譯? –
Quartus II v 11.0 Web,FPGA是Cyclone,如果多數民衆贊成你問。 –