I don't see any errors in your code regarding N.
This demultiplexer could be simplified to:
entity demux is
generic (
M : POSITIVE
);
port (
port (
Sel : in STD_LOGIC_VECTOR(log2(M) - 1 downto 0);
DataIn : in std_logic;
DataOut : out STD_LOGIC_VECTOR(M - 1 downto 0)
DataIn : in std_logic;
DataOut : out STD_LOGIC_VECTOR(M - 1 downto 0)
);
end entity;
architecture rtl of demux
-- Binary-Code to One-Hot-Code
function bin2onehot(value : std_logic_vector) return std_logic_vector is
variable result : std_logic_vector(2**value'length - 1 downto 0);
begin
result := (others => '0');
result(to_index(value, 0)) := '1';
return result;
end function;
function bin2onehot(value : std_logic_vector) return std_logic_vector is
variable result : std_logic_vector(2**value'length - 1 downto 0);
begin
result := (others => '0');
result(to_index(value, 0)) := '1';
return result;
end function;
begin
DataOut <= DataIn and bin2onehot(Sel);
end architecture;
Regards
Patrick
Wissenschaftliche Hilfskraft
Technische Universität Dresden
Fakultät Informatik
Institut für Technische Informatik
Lehrstuhl VLSI-Entwurfssysteme, Diagnostik und Architektur
01062 Dresden, GERMANY
-------- Ursprüngliche Nachricht --------
Von: John Chapple
Datum:21.01.2016 01:39 (GMT+01:00)
An: ghdl-discuss@gna.org
Betreff: [Ghdl-discuss] Two questions ...
The first is how to reply to threads, as I am unable to determine that from the instructions. In any case, thank you Tristan and Patrick for an unexpectedly fast response to my previous question.
Now to the more substantial question: I am having trouble determining the cause of these errors. They are emitted only for the entity decoderNx16, not decoderNx2. As far as I can tell the two entities have the same syntax. I did not see any nonprintable characters that were not white space (blanks, tabs, line feeds) in the file.
$ ghdl -a test.vhdl
test.vhdl:105:22: no declaration for "n"
test.vhdl:105:8: range must be a static discrete range
test.vhdl:107:36: type of prefix is not an array
test.vhdl:109:37: type of prefix is not an array
test.vhdl:110:37: type of prefix is not an array
test.vhdl:111:37: type of prefix is not an array
test.vhdl:112:37: type of prefix is not an array
test.vhdl:113:37: type of prefix is not an array
test.vhdl:114:37: type of prefix is not an array
test.vhdl:115:37: type of prefix is not an array
test.vhdl:116:37: type of prefix is not an array
test.vhdl:117:37: type of prefix is not an array
test.vhdl:118:37: type of prefix is not an array
test.vhdl:119:38: type of prefix is not an array
test.vhdl:120:38: type of prefix is not an array
test.vhdl:121:38: type of prefix is not an array
test.vhdl:122:38: type of prefix is not an array
test.vhdl:123:38: type of prefix is not an array
test.vhdl:124:38: type of prefix is not an array
ghdl: compilation error
$
The contents of test.vhdl are thus, with line numbers added by grep:
1:library ieee;
2:use ieee.std_logic_1164.all;
3:
4:entity decoder1x16 is
5:port(
6: data: in std_logic;
7: y0: out std_logic;
8: y1: out std_logic;
9: y2: out std_logic;
10: y3: out std_logic;
11: y4: out std_logic;
12: y5: out std_logic;
13: y6: out std_logic;
14: y7: out std_logic;
15: y8: out std_logic;
16: y9: out std_logic;
17: y10: out std_logic;
18: y11: out std_logic;
19: y12: out std_logic;
20: y13: out std_logic;
21: y14: out std_logic;
22: y15: out std_logic;
23: address: in std_logic_vector(3 downto 0)
24:);
25:end;
26:
27:architecture struct_decoder1x16 of decoder1x16 is
28:begin
29: with address select y0 <= data when x"0", '0' when others;
30: with address select y1 <= data when x"1", '0' when others;
31: with address select y2 <= data when x"2", '0' when others;
32: with address select y3 <= data when x"3", '0' when others;
33: with address select y4 <= data when x"4", '0' when others;
34: with address select y5 <= data when x"5", '0' when others;
35: with address select y6 <= data when x"6", '0' when others;
36: with address select y7 <= data when x"7", '0' when others;
37: with address select y8 <= data when x"8", '0' when others;
38: with address select y9 <= data when x"9", '0' when others;
39: with address select y10 <= data when x"a", '0' when others;
40: with address select y11 <= data when x"b", '0' when others;
41: with address select y12 <= data when x"c", '0' when others;
42: with address select y13 <= data when x"d", '0' when others;
43: with address select y14 <= data when x"e", '0' when others;
44: with address select y15 <= data when x"f", '0' when others;
45:end;
46:
47:-- For reasons unknown, ghdl appears to ignore the generic definition of N in this and only
48:-- this architecture. Error messages are generated at line 105 onwards. No unusual characters
49:-- found in the file where the first error message is generated.
50:
51:library ieee;
52:use ieee.std_logic_1164.all;
53:
54:entity decoderNx16 is
55:generic(
56: N: positive
57:);
58:port(
59: data: in std_logic_vector((N-1) downto 0);
60: address: in std_logic_vector(3 downto 0);
61: y0: out std_logic_vector((N-1) downto 0);
62: y1: out std_logic_vector((N-1) downto 0);
63: y2: out std_logic_vector((N-1) downto 0);
64: y3: out std_logic_vector((N-1) downto 0);
65: y4: out std_logic_vector((N-1) downto 0);
66: y5: out std_logic_vector((N-1) downto 0);
67: y6: out std_logic_vector((N-1) downto 0);
68: y7: out std_logic_vector((N-1) downto 0);
69: y8: out std_logic_vector((N-1) downto 0);
70: y9: out std_logic_vector((N-1) downto 0);
71: y10: out std_logic_vector((N-1) downto 0);
72: y11: out std_logic_vector((N-1) downto 0);
73: y12: out std_logic_vector((N-1) downto 0);
74: y13: out std_logic_vector((N-1) downto 0);
75: y14: out std_logic_vector((N-1) downto 0);
76: y15: out std_logic_vector((N-1) downto 0)
77:);
78:end;
79:
80:architecture struct_decoder1x16 of decoder1x16 is
81:component decoder1x16 is
82:port(
83: data: in std_logic;
84: address: in std_logic_vector(3 downto 0);
85: y0: out std_logic;
86: y1: out std_logic;
87: y2: out std_logic;
88: y3: out std_logic;
89: y4: out std_logic;
90: y5: out std_logic;
91: y6: out std_logic;
92: y7: out std_logic;
93: y8: out std_logic;
94: y9: out std_logic;
95: y10: out std_logic;
96: y11: out std_logic;
97: y12: out std_logic;
98: y13: out std_logic;
99: y14: out std_logic;
100: y15: out std_logic
101:);
102:end component;
103:
104:begin
105: u1: for i in (N-1) downto 0 generate
106: u: decoder1x16 port map(
107: data ="" data(i),
108: address => address,
109: y0 => y0(i),
110: y1 => y1(i),
111: y2 => y2(i),
112: y3 => y3(i),
113: y4 => y4(i),
114: y5 => y5(i),
115: y6 => y6(i),
116: y7 => y7(i),
117: y8 => y8(i),
118: y9 => y9(i),
119: y10 => y10(i),
120: y11 => y11(i),
121: y12 => y12(i),
122: y13 => y13(i),
123: y14 => y14(i),
124: y15 => y15(i)
125: );
126: end generate u1;
127:end;
128:
129:library ieee;
130:use ieee.std_logic_1164.all;
131:
132:entity decoder1x2 is
133:port(
134: data: in std_logic;
135: selector: in std_logic;
136: y0: out std_logic;
137: y1: out std_logic
138:);
139:end;
140:
141:-- Tested 2015/12/04 with Modelsim. Works.
142:
143:architecture struct_decoder1x2 of decoder1x2 is
144:begin
145: with selector select y0 <= data when '0', '0' when others;
146: with selector select y1 <= data when '1', '0' when others;
147:end;
148:
149:library ieee;
150:use ieee.std_logic_1164.all;
151:
152:entity decoderNx2 is
153:generic(
154: N: positive
155:);
156:port(
157: data: in std_logic_vector((N-1) downto 0);
158: selector: in std_logic;
159: y0: out std_logic_vector((N-1) downto 0);
160: y1: out std_logic_vector((N-1) downto 0)
161:);
162:end;
163:
164:-- tested 2015/12/27 at N = 8 with modelsim. works.
165:
166:architecture struct_decoderNx2 of decoderNx2 is
167:component decoder1x2 is
168:port(
169: data: in std_logic;
170: selector: in std_logic;
171: y0: out std_logic;
172: y1: out std_logic
173:);
174:end component;
175:
176:begin
177: u1: for i in (N-1) downto 0 generate
178: u: decoder1x2 port map(
179: data ="" data(i),
180: selector => selector,
181: y0 => y0(i),
182: y1 => y1(i)
183: );
184: end generate u1;
185:end;
The obvious question is why GHDL is complaining about decoderNx16 and not decoderNx2.
Cheers
John
Now to the more substantial question: I am having trouble determining the cause of these errors. They are emitted only for the entity decoderNx16, not decoderNx2. As far as I can tell the two entities have the same syntax. I did not see any nonprintable characters that were not white space (blanks, tabs, line feeds) in the file.
$ ghdl -a test.vhdl
test.vhdl:105:22: no declaration for "n"
test.vhdl:105:8: range must be a static discrete range
test.vhdl:107:36: type of prefix is not an array
test.vhdl:109:37: type of prefix is not an array
test.vhdl:110:37: type of prefix is not an array
test.vhdl:111:37: type of prefix is not an array
test.vhdl:112:37: type of prefix is not an array
test.vhdl:113:37: type of prefix is not an array
test.vhdl:114:37: type of prefix is not an array
test.vhdl:115:37: type of prefix is not an array
test.vhdl:116:37: type of prefix is not an array
test.vhdl:117:37: type of prefix is not an array
test.vhdl:118:37: type of prefix is not an array
test.vhdl:119:38: type of prefix is not an array
test.vhdl:120:38: type of prefix is not an array
test.vhdl:121:38: type of prefix is not an array
test.vhdl:122:38: type of prefix is not an array
test.vhdl:123:38: type of prefix is not an array
test.vhdl:124:38: type of prefix is not an array
ghdl: compilation error
$
The contents of test.vhdl are thus, with line numbers added by grep:
1:library ieee;
2:use ieee.std_logic_1164.all;
3:
4:entity decoder1x16 is
5:port(
6: data: in std_logic;
7: y0: out std_logic;
8: y1: out std_logic;
9: y2: out std_logic;
10: y3: out std_logic;
11: y4: out std_logic;
12: y5: out std_logic;
13: y6: out std_logic;
14: y7: out std_logic;
15: y8: out std_logic;
16: y9: out std_logic;
17: y10: out std_logic;
18: y11: out std_logic;
19: y12: out std_logic;
20: y13: out std_logic;
21: y14: out std_logic;
22: y15: out std_logic;
23: address: in std_logic_vector(3 downto 0)
24:);
25:end;
26:
27:architecture struct_decoder1x16 of decoder1x16 is
28:begin
29: with address select y0 <= data when x"0", '0' when others;
30: with address select y1 <= data when x"1", '0' when others;
31: with address select y2 <= data when x"2", '0' when others;
32: with address select y3 <= data when x"3", '0' when others;
33: with address select y4 <= data when x"4", '0' when others;
34: with address select y5 <= data when x"5", '0' when others;
35: with address select y6 <= data when x"6", '0' when others;
36: with address select y7 <= data when x"7", '0' when others;
37: with address select y8 <= data when x"8", '0' when others;
38: with address select y9 <= data when x"9", '0' when others;
39: with address select y10 <= data when x"a", '0' when others;
40: with address select y11 <= data when x"b", '0' when others;
41: with address select y12 <= data when x"c", '0' when others;
42: with address select y13 <= data when x"d", '0' when others;
43: with address select y14 <= data when x"e", '0' when others;
44: with address select y15 <= data when x"f", '0' when others;
45:end;
46:
47:-- For reasons unknown, ghdl appears to ignore the generic definition of N in this and only
48:-- this architecture. Error messages are generated at line 105 onwards. No unusual characters
49:-- found in the file where the first error message is generated.
50:
51:library ieee;
52:use ieee.std_logic_1164.all;
53:
54:entity decoderNx16 is
55:generic(
56: N: positive
57:);
58:port(
59: data: in std_logic_vector((N-1) downto 0);
60: address: in std_logic_vector(3 downto 0);
61: y0: out std_logic_vector((N-1) downto 0);
62: y1: out std_logic_vector((N-1) downto 0);
63: y2: out std_logic_vector((N-1) downto 0);
64: y3: out std_logic_vector((N-1) downto 0);
65: y4: out std_logic_vector((N-1) downto 0);
66: y5: out std_logic_vector((N-1) downto 0);
67: y6: out std_logic_vector((N-1) downto 0);
68: y7: out std_logic_vector((N-1) downto 0);
69: y8: out std_logic_vector((N-1) downto 0);
70: y9: out std_logic_vector((N-1) downto 0);
71: y10: out std_logic_vector((N-1) downto 0);
72: y11: out std_logic_vector((N-1) downto 0);
73: y12: out std_logic_vector((N-1) downto 0);
74: y13: out std_logic_vector((N-1) downto 0);
75: y14: out std_logic_vector((N-1) downto 0);
76: y15: out std_logic_vector((N-1) downto 0)
77:);
78:end;
79:
80:architecture struct_decoder1x16 of decoder1x16 is
81:component decoder1x16 is
82:port(
83: data: in std_logic;
84: address: in std_logic_vector(3 downto 0);
85: y0: out std_logic;
86: y1: out std_logic;
87: y2: out std_logic;
88: y3: out std_logic;
89: y4: out std_logic;
90: y5: out std_logic;
91: y6: out std_logic;
92: y7: out std_logic;
93: y8: out std_logic;
94: y9: out std_logic;
95: y10: out std_logic;
96: y11: out std_logic;
97: y12: out std_logic;
98: y13: out std_logic;
99: y14: out std_logic;
100: y15: out std_logic
101:);
102:end component;
103:
104:begin
105: u1: for i in (N-1) downto 0 generate
106: u: decoder1x16 port map(
107: data ="" data(i),
108: address => address,
109: y0 => y0(i),
110: y1 => y1(i),
111: y2 => y2(i),
112: y3 => y3(i),
113: y4 => y4(i),
114: y5 => y5(i),
115: y6 => y6(i),
116: y7 => y7(i),
117: y8 => y8(i),
118: y9 => y9(i),
119: y10 => y10(i),
120: y11 => y11(i),
121: y12 => y12(i),
122: y13 => y13(i),
123: y14 => y14(i),
124: y15 => y15(i)
125: );
126: end generate u1;
127:end;
128:
129:library ieee;
130:use ieee.std_logic_1164.all;
131:
132:entity decoder1x2 is
133:port(
134: data: in std_logic;
135: selector: in std_logic;
136: y0: out std_logic;
137: y1: out std_logic
138:);
139:end;
140:
141:-- Tested 2015/12/04 with Modelsim. Works.
142:
143:architecture struct_decoder1x2 of decoder1x2 is
144:begin
145: with selector select y0 <= data when '0', '0' when others;
146: with selector select y1 <= data when '1', '0' when others;
147:end;
148:
149:library ieee;
150:use ieee.std_logic_1164.all;
151:
152:entity decoderNx2 is
153:generic(
154: N: positive
155:);
156:port(
157: data: in std_logic_vector((N-1) downto 0);
158: selector: in std_logic;
159: y0: out std_logic_vector((N-1) downto 0);
160: y1: out std_logic_vector((N-1) downto 0)
161:);
162:end;
163:
164:-- tested 2015/12/27 at N = 8 with modelsim. works.
165:
166:architecture struct_decoderNx2 of decoderNx2 is
167:component decoder1x2 is
168:port(
169: data: in std_logic;
170: selector: in std_logic;
171: y0: out std_logic;
172: y1: out std_logic
173:);
174:end component;
175:
176:begin
177: u1: for i in (N-1) downto 0 generate
178: u: decoder1x2 port map(
179: data ="" data(i),
180: selector => selector,
181: y0 => y0(i),
182: y1 => y1(i)
183: );
184: end generate u1;
185:end;
The obvious question is why GHDL is complaining about decoderNx16 and not decoderNx2.
Cheers
John
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ Ghdl-discuss mailing list Ghdl-discuss@gna.org https://mail.gna.org/listinfo/ghdl-discuss