I am trying to learn VHDL prior to returning to school. I have been using the text Digital Design with CPLD Applications and VHDL ISBN-13: 978-1401840303 Other references are: http://www.gmvhdl.com/VHDL.html and http://www.freerangefactory.org/dl/free_range_vhdl.pdf
What I am trying to accomplish is to create a project that will be used to program a cpld to be a standalone digital clock. The clockin pin of the cpld will be driven be a 2hz timebase from a 32768hz crystal divided down by a cmos 14bit ripple counter (HC4020). The cpld outputs will drive seven segment displays.
In order to make sure that I am learning important concepts, I am trying to implement this project as multiple entities that are connected together so that the block diagram is essentially identical to the Fig 8-10 in The TTl Cookbook. I have attempted to start with an example straight out of the Dueck text book and it will not compile:
—— bcd_7seg.vhd
—— BCD-to-seven-segment decoder
ENTITY bcd_7seg IS
PORT(
d3, d2, d1, d0 : IN BIT;
a, b, c, d, e, f, g : OUT BIT);
END bcd_7seg;
ARCHITECTURE seven_segment OF bcd_7seg IS
SIGNAL input : BIT_VECTOR (3 downto 0);
SIGNAL output: BIT_VECTOR (6 DOWNTO 0);
BEGIN
input <= d3 & d2 & d1 & d0;
WITH input SELECT
output <= “0000001” WHEN “0000”,
“1001111” WHEN “0001”,
“0010010” WHEN “0010”,
“0000110” WHEN “0011”,
“1001100” WHEN “0100”,
“0100100” WHEN “0101”,
“1100000” WHEN “0110”,
“0001111” WHEN “0111”,
“0000000” WHEN “1000”,
“0001100” WHEN “1001”,
“1111111” WHEN others;
—— Separate the output vector to make individual pin outputs.
a <= output(6);
b <= output(5);
c <= output(4);
d <= output(3);
e <= output(2);
f <= output(1);
g <= output(0);
END seven_segment;
text comments: Why not simply define d as a vector? If we wish to create a graphic symbol for the seven-segment decoder, the above method creates a symbol shown with four separate in- puts, rather than a single thick line for a 4-bit bus input. The design will work either way.
I am using Altera Quartus II 13.0.1 (an older version) as it supports the EPM7032slc44 which is cheap and plentiful from digikey. I have a logical devices chipmaster 6000xp to program parts. I have tried changing project settings in the ide to switch between vhdl 87 and vhdl 93 and this example still has several syntax errors. It is puzzling to me that the compiler only barks at the first few lines (14-19) of the select statements. I changed the ending commas to semicolons with no effect.
I have three things I wish to get clear on here: A The correct syntax for defining entity ports B The correct syntax for making architecture declarations on those ports C How do I go about making entity and architecture declarations for entity A that can be accessed by entity B regardless whether entity B uses std_logic vector(6 downto 0) or eight discrete lines eg a std_logic, b std_logic etc.
Thank you for your time to read and comment.