At the bottom of this post is the code.
First, let me say that I have run this "program" through a TBW, and it seems to simulate correctly.
Second, I'll describe what this module does (or at least, should do).
8 bytes (along with 5 address bits that are carried). When 8 bytes come in, it outputs all 8 at once in a 64 bit value (again, along with the carried 5 bit address).The latch line is mostly simply passed through, except that it is additionally used to reset the buffer pointer.
Am I making this task overly complex? If not, what's going on with it?
When I run the "implement design" task, I get the following warnings / errors:
=========================================================================
- HDL Analysis
- ========================================================================= Analyzing Entity (Architecture ). WARNING:Xst:790 - "C:/xilinx/tutorial/queue.vhd" line 46: Index value(s) does not match array range, simulation mismatch. INFO:Xst:1433 - Contents of array may be accessed with an index that exceeds the array size. This could cause simulation mismatch. ERROR:Xst:827 - "C:/xilinx/tutorial/queue.vhd" line 23: Signal DATA_OUT cannot be synthesized, bad synchronous description.
I'm indeed new to VHDL, and I'm just not clear on what the problem is here. Any help would be greatly, greatly appreciated. I can supply a zip of the project to anyone interested in helping enough for that.
Thanks!
Alex McHale
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity queue is Port ( DATA_IN : in STD_LOGIC_VECTOR (7 downto 0); LATCH_IN : in STD_LOGIC; CLOCK_IN : in STD_LOGIC; ADDRESS_IN : in STD_LOGIC_VECTOR (4 downto
0); DATA_OUT : out STD_LOGIC_VECTOR (63 downto 0); LATCH_OUT : out STD_LOGIC; CLOCK_OUT : out STD_LOGIC; ADDRESS_OUT : out STD_LOGIC_VECTOR (4 downto 0)); end queue;architecture Behavioral of queue is type ram_type is array (0 to 7) of STD_LOGIC_VECTOR (7 downto
0); signal data_buffer : ram_type := ("00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000"); signal buffer_write_offset : STD_LOGIC_VECTOR (3 downto 0) := "0000"; signal address_buffer : STD_LOGIC_VECTOR (4 downto 0) := "00000"; begin process (CLOCK_IN, LATCH_IN) begin if rising_edge( LATCH_IN ) then buffer_write_offset