Vhdl fpga可以';无法获得简单的寄存器输出
我知道这是基本的,但我很难让它发挥作用。我正在“读取”IO引脚,我希望将这些位“保存”在一个简单的缓冲区中。由于某种原因,我在输出中没有得到任何东西。这是我正在运行的代码和lattice的网表分析器,以及我通过运行测试台得到的波形。我试着应用我在其他代码中看到的东西,但没有成功Vhdl fpga可以';无法获得简单的寄存器输出,vhdl,fpga,lattice,Vhdl,Fpga,Lattice,我知道这是基本的,但我很难让它发挥作用。我正在“读取”IO引脚,我希望将这些位“保存”在一个简单的缓冲区中。由于某种原因,我在输出中没有得到任何东西。这是我正在运行的代码和lattice的网表分析器,以及我通过运行测试台得到的波形。我试着应用我在其他代码中看到的东西,但没有成功 library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity InputBuffer is generic( n: natural := 4 ); Port (
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity InputBuffer is
generic( n: natural := 4 );
Port (
clk : in STD_LOGIC;
CLK65 : IN STD_LOGIC;
En : in STD_LOGIC;
STRT : OUT STD_LOGIC;
Ipin : in STD_LOGIC_VECTOR (n-1 downto 0);
Output : out STD_LOGIC_VECTOR (n-1 downto 0)
);
end InputBuffer;
architecture Behavioral of InputBuffer is
signal temp : STD_LOGIC_VECTOR(n-1 downto 0);
SIGNAL CLK2 : STD_LOGIC;
begin
-- invert the signal from the push button switch and route it to the LED
process(clk, En)
begin
if( En = '1') then
temp <= B"0000";
elsif rising_edge(clk) then
temp <= Ipin;
end if;
end process;
Output <= temp;
STRT <= CLK65;
end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体输入缓冲区为
一般(n:自然:=4);
港口(
clk:标准逻辑中;
CLK65:标准逻辑中;
En:标准逻辑;
STRT:输出标准逻辑;
Ipin:标准逻辑向量(n-1向下至0);
输出:输出标准逻辑向量(n-1到0)
);
终端输入缓冲区;
InputBuffer的行为体系结构是
信号温度:标准逻辑向量(n-1向下至0);
信号CLK2:STD_逻辑;
开始
--反转按钮开关的信号并将其发送至LED
过程(clk,En)
开始
如果(En='1'),则
temp将测试台添加到您的问题中提供了一个解决方案
对于那些无法准确解释波形显示的人,彩色版本以及光标(显示移动到波形关键部分的值)可能有助于:
在这个波形显示中,我们看到标量信号(clk等)显示为“X”,就像在晶格工具链中显示为“X”的红色矩形一样(上面的波形是用gtkwave和ghdl完成的)
时钟在“X”和“0”之间变化,这表明测试台上有两个clk驱动程序,当两个驱动程序都驱动“0”时,“0”显示
驱动程序是通过在一个过程中分配给一个信号而创建的
并行信号分配详细说明为等效过程(IEEE Std 1076-2008 11.6并行信号分配声明
“并发信号分配语句表示为信号分配值的等效过程语句。“其灵敏度列表由10.2 Wait语句确定”此规则还用于为并发过程调用语句(11.4)在等效过程语句中构造等待语句的灵敏度集、并发断言语句(11.5)和并发信号分配语句(11.6)。”
具有多个驱动器的信号值按照14.7.3.2驱动值的规定确定:
e) 如果S是基本信号:
…
-如果S是一个解析信号,并且有一个或多个源,则检查S源的驱动值。如果这些驱动值中的任何一个是复合的,其中一个或多个子元素值由空事务确定(见10.5.2.2),而一个或多个子元素值不由空事务确定,则为错误。如果S是信号类型寄存器,并且S的所有源都具有由null事务确定的值,则S的驱动值与其以前的值相同。否则,通过执行与S相关联的解析函数来获得S的驱动值,其中该函数使用由S源的驱动值的串联组成的输入参数来调用,但其当前值由null事务确定的任何S源的值除外
其中,类型std_逻辑的解析函数可在IEEE软件包std_逻辑_1164中找到
那么,clk(和clk64)的两个驱动程序在哪里
En除了您的问题不清楚之外,如果您的读者使用一个简单的测试台来复制波形中显示的输入,他们将以30 ns()的速度从所有“U”输出到所有“0”,这表明你要么有工具问题,要么没有显示出复制结果的能力。对不起,我不明白为什么我没有得到任何输出。我将“InputBuffer”设置为top,并尝试运行我添加的测试台。
En <= '0';
clk <= '0';
clk65 <= '0';
Ipin <= B"0000";
-- *** Test Bench - User Defined Section ***
tb : PROCESS
BEGIN
wait for delay;
clk <='1';
clk65 <='1';
wait for delay;
clk <='0';
wait for delay;
clk <='1';
clk65 <='0';
wait for delay;
clk <='0';
--wait; -- will wait forever
END PROCESS;