I have this VHDL code
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity addDecoder is
port(addrInput : in real;
ROM_sel_n, RAM_sel_n, PIO_sel_n, SIO_sel_n, INT_sel_n : out bit);
end addDecoder;
architecture Behavioral of addDecoder is
begin
AddSelect : process(addrInput) is
begin
if(addrInput <= X'3FFF') then
ROM_sel_n <= '1';
elsif(addrInput > X'3FFF' and addrInput <= X'5FFF') then
RAM_sel_n <= '1';
elsif(addrInput > X'5FFF' and addrInput <= X'8FFF') then
PIO_sel_n <= '1';
elsif(addrInput > X'8FFF' and addrInput <= X'9FFF') then
SIO_sel_n <= '1';
elsif(addrInput > X'9FFF' and addrInput <= X'FFFF') then
开发者_JAVA技巧 INT_sel_n <= '1';
end process AddSelect;
end Behavioral;
What is wrong with it. I'm getting an error with the comparing of the hexadecimal values. Am I not doing this correctly? The error is this: parse error, unexpected INTEGER_LITERAL, expecting OPENPAR or IDENTIFIER
As Philippe already said, don't use std_logic_arith/unsigned. Use numeric_std. I've written about why....
If you want to continue to make comparisons with vectors (as well as using " rather than ' around the values) you should make your addrInput an unsigned vector.
if addrInput < X"1FFF" then
Alternatively make it a natural and compare against integer values:
if addrInput < 8191 then
Also, as you are using elsif, you could simplify your statements thus:
if addrInput <= X"3FFF" then
ROM_sel_n <= '1';
elsif addrInput <= X"5FFF" then
RAM_sel_n <= '1';
-- etc
Finally, drop the ()s around your if conditions, it makes you look like a C-programmer :)
Several syntax errors.
Bit String literals should be written in double quotes: X"0000", not single quotes X'0000'.
You forgot to close the if statement: end if;
Also, I recommend that you'd use ieee.numeric_std.all; instead of the non-standard libraries STD_LOGIC_ARITH and STD_LOGIC_UNSIGNED.
加载中,请稍侯......
精彩评论