我正在研究一个辅助项目,我需要能够将数据写入avalon从模块,以便在DE0板上运行的nios系统上从2个不同的输入中选择数据。经过多次努力,我无法将运行在nios核心上的C应用程序的数据写入avalon slave。我已经验证我能够通过使用一些硬编码值从从属设备读取数据。我还验证了我的应用程序正在运行,因为我在jtag uart上看到了我期望的消息,按钮,LED和LED显示屏按预期工作。
我简化了我的奴隶,以便我直接读回写入它的数据。 VHDL代码是:
override func prepareForReuse() {
super.prepareForReuse()
//Reset label to clear color
self.highestBacLabel.textColor = UIColor.clear
}
C代码是
library ieee;
use ieee.std_logic_1164.all;
USE IEEE.NUMERIC_STD.ALL;
entity FIFO_Control is
port (clk : IN std_logic;
reset : IN std_logic;
read : IN std_logic;
readdata : OUT std_logic_vector(7 DOWNTO 0);
write : IN std_logic;
writedata : IN std_logic_vector(7 DOWNTO 0);
din1 : in std_logic_vector(4 DOWNTO 0);
din2 : in std_logic_vector(4 DOWNTO 0)
);
end FIFO_Control;
architecture FIFO_CTRL of FIFO_Control is
signal int_data : std_logic_vector(7 DOWNTO 0) := "00000000"; -- a hard coded test value to check the read works
begin
with (write) SELECT
int_data <= writedata when '1',
"01010101" when others;
readdata <= int_data;
end FIFO_CTRL;
我无法理解为什么我无法向avalon slave&#34; Fifo_control&#34;写任何东西。有人可以建议问题是什么吗?
答案 0 :(得分:1)
如果您查看实体/组件上的端口声明,然后查看代码,您可能已经看到自己做错了,因为您没有使用所有端口。
因此,您的问题表明您要将数据写入Avalon slave。因此,您希望组件记住您编写的数据(即内存)。但是代码中没有内存组件。只有一个组合表达。
在设计Avalon组件时,您应该阅读Avalon Interface Specification。
因此,阅读文档,您会看到您应该拥有写端口的进程/语句和读端口的进程。每个都需要一个时钟周期来处理(如果读取延迟为1)。 E.g。
write_proc: process(clk) begin
if rising_edge(clk) then
if write = '1' then
int_data <= writedata;
end if;
-- reset statement
if reset = '1' then
int_data <= (others => '0');
end if;
end if;
end process;
read_proc: process(clk) begin
if rising_edge(clk) then
if read = '1' then
readdata <= int_data;
end if;
-- reset statement
if reset = '1' then
readdata <= (others => '0');
end if;
end if;
end process;