我是 VHDL 编程 FPGA 的新手,我的模块(见下面的完整代码)不起作用。
该模块应该根据用户可用的寄存器来处理用户 I/O 设置(因此可以通过寄存器更改模式,而无需接触 FPGA 固件)。有 8 个输入引脚和 8 个输出引脚,以及 4 种操作模式:1x8、2x8、4x8、8x8。输出进入延迟/门发生器模块,然后输出。该模块的另一个功能是转换 32 位输入向量,实际上只有 8 个引脚被分配并携带一个值(特定于 FPGA 板交互)到更有意义的东西。
就像现在一样,无论clockcontrolREG 的值是多少,对应于1x8 模式的else catch all (00) 模式都在工作。(我在示波器上观察到正确的输出),所以引脚分配没有问题。由于某种原因,我的所有 when 子句似乎都被忽略了。
我确实将clockcontrolREG 的初始值设置为“00000011”(应该将模式设置为8x8),并且我确实访问了寄存器并检查了该值确实存在。
我尝试了 2 种不同的语法方式来描述相同的内容( line: 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;