繁体   English   中英

为什么我的VHDL无法在我的FPGA上正常运行?

[英]Why won't my VHDL run properly on my FPGA?

我正在编写一些VHDL,以便可以将字符LCD与我的FPGA接口。

内容如下:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity Parallel_Interface_Main is

    port(
    Clock               : in            std_logic;
    Read_Write      : out           std_logic;
    Register_Select: out            std_logic;
    Enable          : out           std_logic;
    Busy                : buffer    std_logic;
    Data_In         : buffer        std_logic_vector(7 downto 0);
    Data_Line       : buffer        std_logic_vector(7 downto 0)
    );

end Parallel_Interface_Main;

architecture ParallelBehaviour of Parallel_Interface_Main is

signal initialized: std_logic := '0';

begin

Enable <= Clock;

initialize: process(Clock)
begin

if(Clock'event and Clock = '1') then

        Register_Select <= '0';
        Read_Write <= '1';
        Busy <= Data_Line(7);

        if(Busy = '0' and initialized = '0') then

            Register_Select <= '0';
            Read_Write <= '0';

            case Data_Line is

                    when "UUUUUUUU" => 
                            Data_Line <= "00111100";
                    when "00111100" => 
                            Data_Line <= "00001110";
                    when "00001110" => 
                            Data_Line <= "00000110";
                    when "00000110" => 
                            Data_Line <= "00000001";
                            initialized <= '1';
                    when others =>
                            Data_Line <= "ZZZZZZZZ";
            end case;

        end if;

        if(Busy = '0' and initialized = '1') then

            Register_Select <= '1';
            Read_Write <= '0';

            case Data_In is
                when "UUUUUUUU" =>
                    Data_In <= "01010010";
                when "01010001" =>
                    Data_In <= "01010000";
                when others =>
                    Data_In <= "ZZZZZZZZ";
            end case;

            Data_Line <= Data_In;

        end if;
end if;

end process;

end ParallelBehaviour;

基本上,LCD在处理一条指令时会发回一个忙标志,因此我编写了仅在忙标志为0时才执行的代码。由于我还没有将LCD连接到我的FPGA,因此需要测试此代码我将忙碌信号映射到板上的一个按钮,并将“数据线”的最低有效4位映射到几个LED上,这样我就可以看到该板是否正在循环浏览这8位代码。

现在,当我将编程文件上传到FPGA并按下映射到“ Busy”的按钮时,Data_Line位的状态没有变化。 这是VHDL错误的结果吗? 还是在FPGA时钟频率为125 MHz时将Busy映射到按钮的事实。 我对FPGA的经验不足,无法确切了解发生了什么。

我正在使用Altera Arria V GX FPGA。

这应该是一条评论,但我的代表不够高。

首先进行一些清理。

你真的是说缓冲吗? 您是否真的要制作Data_In和Data_Line双向端口? 如果您不想要双向/三态端口,请改用“ in”和“ out”,不要使用Z。

Read_Write只是忙碌的延迟版本,是故意的吗?

我对Data_in感到困惑。 我认为Data_in应该是输入,而Data_Line应该是输出。 或者它们是双向端口,为什么会有两个?

为您提供一个整洁的提示U将在综合中映射为“ 0”,我建议您不要将其用于可综合的模块

无论哪种方式,我都认为您无法查看芯片上的更改的问题可能是发生得很快。 您是否谴责过您(请查看防抖器)。 然后通过上升/下降沿检测将其反馈(将信号与自身的延迟版本进行比较)。 没有这些步骤,更改将很快发生,以供您查看。 使用该步骤,您应该能够在每次单独更改时按下按钮一次。

基本上我想说的是我需要更多信息(如果我有足够的代表,这将是评论)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM