1 |
2 |
trurl |
------------------------------------------------------------------
|
2 |
|
|
--!
|
3 |
|
|
--! PDP-8 Processor
|
4 |
|
|
--!
|
5 |
|
|
--! \brief
|
6 |
|
|
--! CPU Arithmetic Logic Unit (ALU) Register
|
7 |
|
|
--!
|
8 |
|
|
--! \details
|
9 |
|
|
--! The ALU 'owns' the Link Register (L) and Accumulator
|
10 |
|
|
--! Register (AC). This device performs every operation
|
11 |
|
|
--! that manipules either the Link Register or Accumulator.
|
12 |
|
|
--!
|
13 |
|
|
--! This code operates on the Link Register and Accumulator
|
14 |
|
|
--! as if it were a single 13-bit wide register. The Link
|
15 |
|
|
--! Register is LAC(0) while the Accumlator is LAC(1 to 12).
|
16 |
|
|
--!
|
17 |
|
|
--! \todo
|
18 |
|
|
--! Although the CPU is knitted together with a 'rats nest'
|
19 |
|
|
--! of interconnections, this file is 'rattier' than most.
|
20 |
|
|
--! It could stand a good cleanup. Any cleanup should also
|
21 |
|
|
--! address EAE and how that fits with the ALU.
|
22 |
|
|
--!
|
23 |
|
|
--! \file
|
24 |
|
|
--! alu.vhd
|
25 |
|
|
--!
|
26 |
|
|
--! \author
|
27 |
|
|
--! Rob Doyle - doyle (at) cox (dot) net
|
28 |
|
|
--!
|
29 |
|
|
--------------------------------------------------------------------
|
30 |
|
|
--
|
31 |
|
|
-- Copyright (C) 2009, 2010, 2011, 2012 Rob Doyle
|
32 |
|
|
--
|
33 |
|
|
-- This source file may be used and distributed without
|
34 |
|
|
-- restriction provided that this copyright statement is not
|
35 |
|
|
-- removed from the file and that any derivative work contains
|
36 |
|
|
-- the original copyright notice and the associated disclaimer.
|
37 |
|
|
--
|
38 |
|
|
-- This source file is free software; you can redistribute it
|
39 |
|
|
-- and/or modify it under the terms of the GNU Lesser General
|
40 |
|
|
-- Public License as published by the Free Software Foundation;
|
41 |
|
|
-- version 2.1 of the License.
|
42 |
|
|
--
|
43 |
|
|
-- This source is distributed in the hope that it will be
|
44 |
|
|
-- useful, but WITHOUT ANY WARRANTY; without even the implied
|
45 |
|
|
-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
46 |
|
|
-- PURPOSE. See the GNU Lesser General Public License for more
|
47 |
|
|
-- details.
|
48 |
|
|
--
|
49 |
|
|
-- You should have received a copy of the GNU Lesser General
|
50 |
|
|
-- Public License along with this source; if not, download it
|
51 |
|
|
-- from http://www.gnu.org/licenses/lgpl.txt
|
52 |
|
|
--
|
53 |
|
|
--------------------------------------------------------------------
|
54 |
|
|
--
|
55 |
|
|
-- Comments are formatted for doxygen
|
56 |
|
|
--
|
57 |
|
|
|
58 |
|
|
library ieee; --! IEEE Library
|
59 |
|
|
use ieee.std_logic_1164.all; --! IEEE 1164
|
60 |
|
|
use ieee.numeric_std.all; --! IEEE Numeric Standard
|
61 |
|
|
use work.cpu_types.all; --! Types
|
62 |
|
|
|
63 |
|
|
--
|
64 |
|
|
--! CPU Arithmetic Logic Unit (ALU) Register Entity
|
65 |
|
|
--
|
66 |
|
|
|
67 |
|
|
entity eALU is port (
|
68 |
|
|
sys : in sys_t; --! Clock/Reset
|
69 |
|
|
acOP : in acOP_t; --! AC Operation
|
70 |
|
|
BTSTRP : in std_logic; --! Bootstrap Flag
|
71 |
|
|
GTF : in std_logic; --! Greater Than Flag
|
72 |
|
|
HLTTRP : in std_logic; --! Hlttrp Flag
|
73 |
|
|
IE : in std_logic; --! Interrupt Enable Flip-Flop
|
74 |
|
|
IRQ : in std_logic; --! Interrupt Request flag
|
75 |
|
|
PNLTRP : in std_logic; --! Panel Trap Flag
|
76 |
|
|
PWRTRP : in std_logic; --! Power-on Trap Flag
|
77 |
|
|
DF : in field_t; --! DF Input
|
78 |
|
|
EAE : in eae_t; --! EAE Input
|
79 |
|
|
INF : in field_t; --! INF Input
|
80 |
|
|
IR : in data_t; --! IR Input
|
81 |
|
|
MA : in addr_t; --! MA Input
|
82 |
|
|
MD : in data_t; --! MB Input
|
83 |
|
|
MQ : in data_t; --! MQ Input
|
84 |
|
|
PC : in addr_t; --! PC Input
|
85 |
|
|
SC : in sc_t; --! SC Input
|
86 |
|
|
SF : in sf_t; --! SF Input
|
87 |
|
|
SP1 : in addr_t; --! SP1 Input
|
88 |
|
|
SP2 : in addr_t; --! SP2 Input
|
89 |
|
|
SR : in data_t; --! SR Input
|
90 |
|
|
UF : in std_logic; --! UF Input
|
91 |
|
|
LAC : out ldata_t --! ALU Output
|
92 |
|
|
);
|
93 |
|
|
end eALU;
|
94 |
|
|
|
95 |
|
|
--
|
96 |
|
|
--! CPU Arithmetic Logic Unit (ALU) Register RTL
|
97 |
|
|
--
|
98 |
|
|
|
99 |
|
|
architecture rtl of eALU is
|
100 |
|
|
|
101 |
|
|
signal lacREG : ldata_t; --! Link and Accumulator Register
|
102 |
|
|
signal lacMUX : ldata_t; --! Link and Accumulator Multiplexer
|
103 |
|
|
|
104 |
|
|
--!
|
105 |
|
|
--! ALU Operations
|
106 |
|
|
--!
|
107 |
|
|
|
108 |
|
|
signal opIAC : ldata_t; --! Increment accumulator
|
109 |
|
|
signal opBSW : ldata_t; --! Byte swap
|
110 |
|
|
signal opRAL : ldata_t; --!
|
111 |
|
|
signal opRTL : ldata_t; --!
|
112 |
|
|
signal opR3L : ldata_t; --!
|
113 |
|
|
signal opRAR : ldata_t; --!
|
114 |
|
|
signal opRTR : ldata_t; --!
|
115 |
|
|
signal opSHL0 : ldata_t; --!
|
116 |
|
|
signal opSHL1 : ldata_t; --!
|
117 |
|
|
signal opLSR : ldata_t; --!
|
118 |
|
|
signal opASR : ldata_t; --!
|
119 |
|
|
signal opUNDEF1 : ldata_t; --! Undefined Operation #1
|
120 |
|
|
signal opUNDEF2 : ldata_t; --! Undefined Operation #2
|
121 |
|
|
signal opPC : ldata_t; --! Undefined Operation #1,2
|
122 |
|
|
signal opCML : ldata_t; --!
|
123 |
|
|
signal opCMA : ldata_t; --!
|
124 |
|
|
signal opCMACML : ldata_t; --!
|
125 |
|
|
signal opCLL : ldata_t; --!
|
126 |
|
|
signal opCLLCML : ldata_t; --!
|
127 |
|
|
signal opCLLCMA : ldata_t; --!
|
128 |
|
|
signal opCLLCMACML : ldata_t; --!
|
129 |
|
|
signal opCLA : ldata_t; --!
|
130 |
|
|
signal opCLACML : ldata_t; --!
|
131 |
|
|
signal opCLACMA : ldata_t; --!
|
132 |
|
|
signal opCLACMACML : ldata_t; --!
|
133 |
|
|
signal opCLACLL : ldata_t; --!
|
134 |
|
|
signal opCLACLLCML : ldata_t; --!
|
135 |
|
|
signal opCLACLLCMA : ldata_t; --!
|
136 |
|
|
signal opCLACLLCMACML : ldata_t; --!
|
137 |
|
|
|
138 |
|
|
--!
|
139 |
|
|
--! KM8E
|
140 |
|
|
--!
|
141 |
|
|
|
142 |
|
|
signal opRDF0 : ldata_t; --! RDF0 (HD6120)
|
143 |
|
|
signal opRIF0 : ldata_t; --! RIF0 (HD6120)
|
144 |
|
|
signal opRIB0 : ldata_t; --! RIB0 (HD6120)
|
145 |
|
|
signal opRDF1 : ldata_t; --! RDF1 (PDP8)
|
146 |
|
|
signal opRIF1 : ldata_t; --! RIF1 (PDP8)
|
147 |
|
|
signal opRIB1 : ldata_t; --! RIB1 (PDP8)
|
148 |
|
|
|
149 |
|
|
--!
|
150 |
|
|
--! EAE
|
151 |
|
|
--!
|
152 |
|
|
|
153 |
|
|
signal opEAELAC : ldata_t; --! LAC <- EAE(0 to 12)
|
154 |
|
|
signal opEAEZAC : ldata_t; --! LAC <- '0' & EAE(1 to 12)
|
155 |
|
|
|
156 |
|
|
--!
|
157 |
|
|
--! Flags
|
158 |
|
|
--!
|
159 |
|
|
|
160 |
|
|
signal opPRS : ldata_t; --!
|
161 |
|
|
signal opGTF1 : ldata_t; --!
|
162 |
|
|
signal opGTF2 : ldata_t; --!
|
163 |
|
|
signal opGCF : ldata_t; --!
|
164 |
|
|
|
165 |
|
|
--!
|
166 |
|
|
--! MD operations
|
167 |
|
|
--!
|
168 |
|
|
|
169 |
|
|
signal opSUBMD : ldata_t; --! LAC <- LAC - MD
|
170 |
|
|
signal opADDMD : ldata_t; --! LAC <- LAC + MD
|
171 |
|
|
signal opADDMDP1 : ldata_t; --! LAC <- LAC + MD + 1
|
172 |
|
|
signal opANDMD : ldata_t; --! LAC <- L & (AC and MD)
|
173 |
|
|
signal opORMD : ldata_t; --! LAC <- L & (AC or MD)
|
174 |
|
|
|
175 |
|
|
--!
|
176 |
|
|
--! MQ Operations
|
177 |
|
|
--!
|
178 |
|
|
|
179 |
|
|
signal opMQSUB : ldata_t; --! LAC <- MQ - AC
|
180 |
|
|
signal opMQ : ldata_t; --! LAC <- L & MQ
|
181 |
|
|
signal opZMQ : ldata_t; --! LAC <- '0' & MQ
|
182 |
|
|
signal opMQP1 : ldata_t; --! LAC <- MQ + 1
|
183 |
|
|
signal opNEGMQ : ldata_t; --! LAC <- -MQ
|
184 |
|
|
signal opNOTMQ : ldata_t; --! LAC <- not(MQ)
|
185 |
|
|
signal opORMQ : ldata_t; --! LAC <- L & (AC or MQ)
|
186 |
|
|
|
187 |
|
|
--!
|
188 |
|
|
--! SC Operations
|
189 |
|
|
--!
|
190 |
|
|
|
191 |
|
|
signal opSCA : ldata_t; --! LAC <- L & (AC or SC)
|
192 |
|
|
|
193 |
|
|
--!
|
194 |
|
|
--! SP Operations
|
195 |
|
|
--!
|
196 |
|
|
|
197 |
|
|
signal opSP1 : ldata_t; --! LAC <- '0' & SP1
|
198 |
|
|
signal opSP2 : ldata_t; --! LAC <- '0' & SP2
|
199 |
|
|
|
200 |
|
|
--!
|
201 |
|
|
--! SR Operations
|
202 |
|
|
--!
|
203 |
|
|
|
204 |
|
|
signal opOSR : ldata_t; --! LAC <- L & (AC or SR)
|
205 |
|
|
signal opLAS : ldata_t; --! LAC <- L & SR
|
206 |
|
|
|
207 |
|
|
begin
|
208 |
|
|
|
209 |
|
|
-- group1 sequence 4 operations
|
210 |
|
|
opIAC <= std_logic_vector(unsigned(lacREG) + "1");
|
211 |
|
|
opBSW <= lacREG(0) & lacREG(7 to 12) & lacREG(1 to 6);
|
212 |
|
|
-- rotate lefts
|
213 |
|
|
opRAL <= lacREG( 1 to 12) & lacREG(0);
|
214 |
|
|
opRTL <= lacREG( 2 to 12) & lacREG(0 to 1);
|
215 |
|
|
opR3L <= lacREG( 3 to 12) & lacREG(0 to 2);
|
216 |
|
|
-- rotate rights
|
217 |
|
|
opRAR <= lacREG(12) & lacREG(0 to 11);
|
218 |
|
|
opRTR <= lacREG(11 to 12) & lacREG(0 to 10);
|
219 |
|
|
-- shift lefts
|
220 |
|
|
opSHL0 <= lacREG( 1 to 12) & '0';
|
221 |
|
|
opSHL1 <= lacREG( 1 to 12) & '1';
|
222 |
|
|
-- shift rights
|
223 |
|
|
opLSR <= '0' & lacREG(0 to 11);
|
224 |
|
|
opASR <= lacREG(1) & lacREG(1) & lacREG(1 to 11);
|
225 |
|
|
-- undefs
|
226 |
|
|
opUNDEF1 <= lacREG(0) & (lacREG(1 to 12) and IR);
|
227 |
|
|
opUNDEF2 <= lacREG(0) & MA(0 to 4) & IR(5 to 11);
|
228 |
|
|
opPC <= lacREG(0) & PC;
|
229 |
|
|
-- group 1 operations
|
230 |
|
|
opCML <= not(lacREG(0)) & lacREG(1 to 12);
|
231 |
|
|
opCMA <= lacREG(0) & not(lacREG(1 to 12));
|
232 |
|
|
opCMACML <= not(lacREG(0)) & not(lacREG(1 to 12));
|
233 |
|
|
opCLL <= '0' & lacREG(1 to 12);
|
234 |
|
|
opCLLCML <= '1' & lacREG(1 to 12);
|
235 |
|
|
opCLLCMA <= '0' & not(lacREG(1 to 12));
|
236 |
|
|
opCLLCMACML <= '1' & not(lacREG(1 to 12));
|
237 |
|
|
opCLA <= lacREG(0) & o"0000";
|
238 |
|
|
opCLACML <= not(lacREG(0)) & o"0000";
|
239 |
|
|
opCLACMA <= lacREG(0) & o"7777";
|
240 |
|
|
opCLACMACML <= not(lacREG(0)) & o"7777";
|
241 |
|
|
opCLACLL <= '0' & o"0000";
|
242 |
|
|
opCLACLLCML <= '1' & o"0000";
|
243 |
|
|
opCLACLLCMA <= '0' & o"7777";
|
244 |
|
|
opCLACLLCMACML <= '1' & o"7777";
|
245 |
|
|
-- KM8E ops
|
246 |
|
|
opRDF0 <= lacREG(0 to 6) & DF & lacREG(10 to 12);
|
247 |
|
|
opRIF0 <= lacREG(0 to 6) & INF & lacREG(10 to 12);
|
248 |
|
|
opRIB0 <= lacREG(0 to 5) & SF;
|
249 |
|
|
opRDF1 <= lacREG(0 to 12) or ("0000000" & DF & "000");
|
250 |
|
|
opRIF1 <= lacREG(0 to 12) or ("0000000" & INF & "000");
|
251 |
|
|
opRIB1 <= lacREG(0 to 12) or ("000000" & SF);
|
252 |
|
|
-- Flags
|
253 |
|
|
opPRS <= lacREG(0) & BTSTRP & PNLTRP & IRQ & PWRTRP & HLTTRP & '0' & "000" & "000";
|
254 |
|
|
opGTF1 <= lacREG(0) & lacREG(0) & GTF & IRQ & PWRTRP & '1' & '0' & SF(1 to 3) & SF(4 to 6);
|
255 |
|
|
opGTF2 <= lacREG(0) & lacREG(0) & GTF & IRQ & '0' & IE & SF(0) & SF(1 to 3) & SF(4 to 6);
|
256 |
|
|
opGCF <= lacREG(0) & lacREG(0) & GTF & IRQ & PWRTRP & IE & '0' & INF & DF;
|
257 |
|
|
-- EAE
|
258 |
|
|
opEAELAC <= EAE(0 to 12);
|
259 |
|
|
opEAEZAC <= '0' & EAE(1 to 12);
|
260 |
|
|
-- MD
|
261 |
|
|
opADDMD <= std_logic_vector(unsigned(lacREG(0 to 12)) + unsigned('0' & MD));
|
262 |
|
|
opADDMDP1 <= std_logic_vector(unsigned(lacREG(0 to 12)) + unsigned('0' & MD) + "1");
|
263 |
|
|
opSUBMD <= std_logic_vector(unsigned(lacREG(0 to 12)) - unsigned('0' & MD));
|
264 |
|
|
opANDMD <= lacREG(0) & (lacREG(1 to 12) and MD);
|
265 |
|
|
opORMD <= lacREG(0) & (lacREG(1 to 12) or MD);
|
266 |
|
|
-- MQ
|
267 |
|
|
opMQSUB <= std_logic_vector(unsigned('0' & MQ) + unsigned('0' & not(lacREG(1 to 12))) + "1");
|
268 |
|
|
opMQ <= lacREG(0) & MQ;
|
269 |
|
|
opZMQ <= '0' & MQ;
|
270 |
|
|
opMQP1 <= std_logic_vector(unsigned('0' & MQ) + "1");
|
271 |
|
|
opNEGMQ <= std_logic_vector(unsigned('0' & not(MQ)) + "1");
|
272 |
|
|
opNOTMQ <= '0' & not(MQ);
|
273 |
|
|
opORMQ <= lacREG(0) & (lacREG(1 to 12) or MQ);
|
274 |
|
|
-- SC
|
275 |
|
|
opSCA <= lacREG(0 to 7) & (lacREG(8 to 12) or SC);
|
276 |
|
|
-- SP
|
277 |
|
|
opSP1 <= lacREG(0) & SP1;
|
278 |
|
|
opSP2 <= lacREG(0) & SP2;
|
279 |
|
|
-- SR
|
280 |
|
|
opLAS <= lacREG(0) & SR;
|
281 |
|
|
opOSR <= lacREG(0) & (lacREG(1 to 12) or SR);
|
282 |
|
|
|
283 |
|
|
--
|
284 |
|
|
-- Adder input #2 mux.
|
285 |
|
|
--
|
286 |
|
|
|
287 |
|
|
with acOP select
|
288 |
|
|
lacMUX <= lacREG when acopNOP, -- LAC <- LAC
|
289 |
|
|
opIAC when acopIAC, -- LAC <- LAC + 1
|
290 |
|
|
opBSW when acopBSW, -- LAC <- L & AC(6:12) & AC(0:5);
|
291 |
|
|
opRAL when acopRAL, -- LAC <- AC(0:11) & L
|
292 |
|
|
opRTL when acopRTL, -- LAC <- AC(1:11) & L & AC(0)
|
293 |
|
|
opR3L when acopR3L, -- LAC <- AC(2:11) & L & AC(0:1)
|
294 |
|
|
opRAR when acopRAR, -- LAC <- AC(11) & L & & AC(0:10);
|
295 |
|
|
opRTR when acopRTR, -- LAC <- AC(10:11) & L & & AC(0:9);
|
296 |
|
|
opSHL0 when acopSHL0, -- LAC <- (LAC << 1) & '0'
|
297 |
|
|
opSHL1 when acopSHL1, -- LAC <- (LAC << 1) & '1'
|
298 |
|
|
opLSR when acopLSR, -- LAC <- '0' & (LAC >> 1)
|
299 |
|
|
opASR when acopASR, -- LAC <- L & (LAC >> 1)
|
300 |
|
|
opUNDEF1 when acopUNDEF1, -- LAC <- L & (AC and IR);
|
301 |
|
|
opUNDEF2 when acopUNDEF2, -- LAC <- L & MA(0:4) & IR(5:11)
|
302 |
|
|
opPC when acopPC, -- LAC <- PC
|
303 |
|
|
opCML when acopCML, -- LAC <- 0 0 0 CML
|
304 |
|
|
opCMA when acopCMA, -- LAC <- 0 0 CMA 0
|
305 |
|
|
opCMACML when acopCMACML, -- LAC <- 0 0 CMA CML
|
306 |
|
|
opCLL when acopCLL, -- LAC <- 0 CLL 0 0
|
307 |
|
|
opCLLCML when acopCLLCML, -- LAC <- 0 CLL 0 CML
|
308 |
|
|
opCLLCMA when acopCLLCMA, -- LAC <- 0 CLL CMA 0
|
309 |
|
|
opCLLCMACML when acopCLLCMACML, -- LAC <- 0 CLL CMA CML
|
310 |
|
|
opCLA when acopCLA, -- LAC <- CLA 0 0 0
|
311 |
|
|
opCLACML when acopCLACML, -- LAC <- CLA 0 0 CML
|
312 |
|
|
opCLACMA when acopCLACMA, -- LAC <- CLA 0 CMA 0
|
313 |
|
|
opCLACMACML when acopCLACMACML, -- LAC <- CLA 0 CMA CML
|
314 |
|
|
opCLACLL when acopCLACLL, -- LAC <- CLA CLL 0 0
|
315 |
|
|
opCLACLLCML when acopCLACLLCML, -- LAC <- CLA CLL 0 CML
|
316 |
|
|
opCLACLLCMA when acopCLACLLCMA, -- LAC <- CLA CLL CMA 0
|
317 |
|
|
opCLACLLCMACML when acopCLACLLCMACML,-- LAC <- CLA CLL CMA CML
|
318 |
|
|
opRDF0 when acopRDF0, -- LAC <- LAC(0 to 6) & DF & LAC(10 to 12)
|
319 |
|
|
opRIF0 when acopRIF0, -- LAC <- LAC(0 to 6) & INF & LAC(10 to 12);
|
320 |
|
|
opRIB0 when acopRIB0, -- LAC <- LAC(0 to 5) & SF
|
321 |
|
|
opRDF1 when acopRDF1, -- LAC <- LAC(0 to 12) or ("0000000" & DF & "000");
|
322 |
|
|
opRIF1 when acopRIF1, -- LAC <- LAC(0 to 12) or ("0000000" & INF & "000")
|
323 |
|
|
opRIB1 when acopRIB1, -- LAC <- LAC(0 to 12) or ("000000" & SF);
|
324 |
|
|
opPRS when acopPRS, -- LAC <- LAC(0) & BTSTRP & PNLTRP & IRQ & PWRTRP & HLTTRP & '0' & "000" & "000";
|
325 |
|
|
opGTF1 when acopGTF1, -- HD6120 GTF
|
326 |
|
|
opGTF2 when acopGTF2, -- PDP8 GTF
|
327 |
|
|
opGCF when acopGCF, -- LAC <- LAC(0) & LAC(0) & GTF & IRQ & PWRTRP & IE & '0' & INF & DF;
|
328 |
|
|
opEAELAC when acopEAELAC, -- LAC <- EAE(0 to 12)
|
329 |
|
|
opEAEZAC when acopEAEZAC, -- LAC <- '0' & EAE(1 to 12);
|
330 |
|
|
opSUBMD when acopSUBMD, -- LAC <- LAC - MD <- LAC + NOT(MD) + 1
|
331 |
|
|
opADDMD when acopADDMD, -- LAC <- LAC + MD
|
332 |
|
|
opADDMDP1 when acopADDMDP1, -- LAC <- LAC + MD + 1
|
333 |
|
|
opANDMD when acopANDMD, -- LAC <- L & (AC and MD)
|
334 |
|
|
opORMD when acopORMD, -- LAC <- L & (AC or MD)
|
335 |
|
|
opMQSUB when acopMQSUB, -- LAC <- MQ - AC <- MQ + NOT(AC) + 1
|
336 |
|
|
opMQ when acopMQ, -- LAC <- L & MQ
|
337 |
|
|
opZMQ when acopZMQ, -- LAC <- 0 & MQ
|
338 |
|
|
opMQP1 when acopMQP1, -- LAC <- MQ + 1
|
339 |
|
|
opNEGMQ when acopNEGMQ, -- LAC <- -MQ <- NOT(MQ) + 1
|
340 |
|
|
opNOTMQ when acopNOTMQ, -- LAC <- NOT(MQ)
|
341 |
|
|
opORMQ when acopORMQ, -- LAC <- L & (AC or MQ)
|
342 |
|
|
opSCA when acopSCA, -- LAC <- LAC(0 to 7) & (LAC(8 to 12) or SC)
|
343 |
|
|
opSP1 when acopSP1, -- LAC <- LAC(0) & SP1
|
344 |
|
|
opSP2 when acopSP2, -- LAC <- LAC(0) & SP2
|
345 |
|
|
opLAS when acopLAS, -- LAC <- SR
|
346 |
|
|
opOSR when acopOSR, -- LAC <- LAC(0) & (LAC(1 to 12) or SR)
|
347 |
|
|
(others => '0') when others; --
|
348 |
|
|
|
349 |
|
|
--
|
350 |
|
|
--! ALU Register
|
351 |
|
|
--
|
352 |
|
|
|
353 |
|
|
REG_ALU : process(sys)
|
354 |
|
|
begin
|
355 |
|
|
if sys.rst = '1' then
|
356 |
|
|
lacREG <= (others => '0');
|
357 |
|
|
elsif rising_edge(sys.clk) then
|
358 |
|
|
lacREG <= lacMUX;
|
359 |
|
|
end if;
|
360 |
|
|
end process REG_ALU;
|
361 |
|
|
|
362 |
|
|
LAC <= lacREG;
|
363 |
|
|
|
364 |
|
|
end rtl;
|