diff options
| author | Dan Nicolaescu | 2008-05-06 15:54:16 +0000 |
|---|---|---|
| committer | Dan Nicolaescu | 2008-05-06 15:54:16 +0000 |
| commit | 5509c6add4c2bf1430c1ed0eb5770e259e1afcf9 (patch) | |
| tree | e45481583c335e47ecbcd19591dbde2a4aa784e7 | |
| parent | dbf2c858da40235083535f36d0b8a174248d5908 (diff) | |
| download | emacs-5509c6add4c2bf1430c1ed0eb5770e259e1afcf9.tar.gz emacs-5509c6add4c2bf1430c1ed0eb5770e259e1afcf9.zip | |
(verilog-getopt-file): Cleanup warning message format.
(verilog-auto, verilog-auto-arg, verilog-auto-ascii-enum)
(verilog-auto-inout, verilog-auto-inout-module)
(verilog-auto-input, verilog-auto-inst, verilog-auto-inst-param)
(verilog-auto-output, verilog-auto-output-every, verilog-auto-reg)
(verilog-auto-reg-input, verilog-auto-reset, verilog-auto-sense)
(verilog-auto-sense-sigs, verilog-auto-tieoff)
(verilog-auto-unused, verilog-auto-wire)
(verilog-decls-get-assigns, verilog-decls-get-consts)
(verilog-decls-get-gparams, verilog-decls-get-inouts)
(verilog-decls-get-inputs, verilog-decls-get-outputs)
(verilog-decls-get-ports, verilog-decls-get-regs)
(verilog-decls-get-signals, verilog-decls-get-wires)
(verilog-dir-cache-lib-filenames, verilog-dir-cache-list)
(verilog-dir-cache-preserving, verilog-dir-file-exists-p)
(verilog-dir-files, verilog-expand-dirnames, verilog-getopt-file)
(verilog-inject-sense, verilog-library-filenames)
(verilog-mode-release-date, verilog-mode-version)
(verilog-modi-cache-add, verilog-modi-cache-preserve-buffer)
(verilog-modi-cache-preserve-tick, verilog-modi-cache-results)
(verilog-modi-get-assigns, verilog-modi-get-consts)
(verilog-modi-get-gparams, verilog-modi-get-inouts)
(verilog-modi-get-inputs, verilog-modi-get-outputs)
(verilog-modi-get-ports, verilog-modi-get-regs)
(verilog-modi-get-signals, verilog-modi-get-sub-inouts)
(verilog-modi-get-sub-inputs, verilog-modi-get-sub-outputs)
(verilog-modi-get-wires, verilog-preserve-cache)
(verilog-preserve-dir-cache, verilog-preserve-modi-cache)
(verilog-read-sub-decls, verilog-read-sub-decls-line)
(verilog-read-sub-decls-sig, verilog-subdecls-get-inouts)
(verilog-subdecls-get-inputs, verilog-subdecls-get-outputs):
Add caching of additional state, and rework signal extraction
routines to improve AUTO expansion performance by 300%++.
| -rw-r--r-- | lisp/ChangeLog | 36 | ||||
| -rw-r--r-- | lisp/progmodes/verilog-mode.el | 495 |
2 files changed, 341 insertions, 190 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 465b1fb948e..67f9174a5bd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,39 @@ | |||
| 1 | 2008-05-06 Wilson Snyder <wsnyder@wsnyder.org> | ||
| 2 | |||
| 3 | * verilog-mode.el (verilog-getopt-file): Cleanup warning message format. | ||
| 4 | (verilog-auto, verilog-auto-arg, verilog-auto-ascii-enum) | ||
| 5 | (verilog-auto-inout, verilog-auto-inout-module) | ||
| 6 | (verilog-auto-input, verilog-auto-inst, verilog-auto-inst-param) | ||
| 7 | (verilog-auto-output, verilog-auto-output-every, verilog-auto-reg) | ||
| 8 | (verilog-auto-reg-input, verilog-auto-reset, verilog-auto-sense) | ||
| 9 | (verilog-auto-sense-sigs, verilog-auto-tieoff) | ||
| 10 | (verilog-auto-unused, verilog-auto-wire) | ||
| 11 | (verilog-decls-get-assigns, verilog-decls-get-consts) | ||
| 12 | (verilog-decls-get-gparams, verilog-decls-get-inouts) | ||
| 13 | (verilog-decls-get-inputs, verilog-decls-get-outputs) | ||
| 14 | (verilog-decls-get-ports, verilog-decls-get-regs) | ||
| 15 | (verilog-decls-get-signals, verilog-decls-get-wires) | ||
| 16 | (verilog-dir-cache-lib-filenames, verilog-dir-cache-list) | ||
| 17 | (verilog-dir-cache-preserving, verilog-dir-file-exists-p) | ||
| 18 | (verilog-dir-files, verilog-expand-dirnames, verilog-getopt-file) | ||
| 19 | (verilog-inject-sense, verilog-library-filenames) | ||
| 20 | (verilog-mode-release-date, verilog-mode-version) | ||
| 21 | (verilog-modi-cache-add, verilog-modi-cache-preserve-buffer) | ||
| 22 | (verilog-modi-cache-preserve-tick, verilog-modi-cache-results) | ||
| 23 | (verilog-modi-get-assigns, verilog-modi-get-consts) | ||
| 24 | (verilog-modi-get-gparams, verilog-modi-get-inouts) | ||
| 25 | (verilog-modi-get-inputs, verilog-modi-get-outputs) | ||
| 26 | (verilog-modi-get-ports, verilog-modi-get-regs) | ||
| 27 | (verilog-modi-get-signals, verilog-modi-get-sub-inouts) | ||
| 28 | (verilog-modi-get-sub-inputs, verilog-modi-get-sub-outputs) | ||
| 29 | (verilog-modi-get-wires, verilog-preserve-cache) | ||
| 30 | (verilog-preserve-dir-cache, verilog-preserve-modi-cache) | ||
| 31 | (verilog-read-sub-decls, verilog-read-sub-decls-line) | ||
| 32 | (verilog-read-sub-decls-sig, verilog-subdecls-get-inouts) | ||
| 33 | (verilog-subdecls-get-inputs, verilog-subdecls-get-outputs): | ||
| 34 | Add caching of additional state, and rework signal extraction | ||
| 35 | routines to improve AUTO expansion performance by 300%++. | ||
| 36 | |||
| 1 | 2008-05-06 Chong Yidong <cyd@stupidchicken.com> | 37 | 2008-05-06 Chong Yidong <cyd@stupidchicken.com> |
| 2 | 38 | ||
| 3 | * progmodes/compile.el (compilation-error-regexp-alist-alist): | 39 | * progmodes/compile.el (compilation-error-regexp-alist-alist): |
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index 280c2270dde..e7720bfc1da 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el | |||
| @@ -6220,31 +6220,31 @@ Return a array of [outputs inouts inputs wire reg assign const]." | |||
| 6220 | ;; Signal reading for given module | 6220 | ;; Signal reading for given module |
| 6221 | ;; Note these all take modi's - as returned from the | 6221 | ;; Note these all take modi's - as returned from the |
| 6222 | ;; verilog-modi-current function. | 6222 | ;; verilog-modi-current function. |
| 6223 | (defsubst verilog-modi-get-outputs (modi) | 6223 | (defsubst verilog-decls-get-outputs (decls) |
| 6224 | (aref (verilog-modi-get-decls modi) 0)) | 6224 | (aref decls 0)) |
| 6225 | (defsubst verilog-modi-get-inouts (modi) | 6225 | (defsubst verilog-decls-get-inouts (decls) |
| 6226 | (aref (verilog-modi-get-decls modi) 1)) | 6226 | (aref decls 1)) |
| 6227 | (defsubst verilog-modi-get-inputs (modi) | 6227 | (defsubst verilog-decls-get-inputs (decls) |
| 6228 | (aref (verilog-modi-get-decls modi) 2)) | 6228 | (aref decls 2)) |
| 6229 | (defsubst verilog-modi-get-wires (modi) | 6229 | (defsubst verilog-decls-get-wires (decls) |
| 6230 | (aref (verilog-modi-get-decls modi) 3)) | 6230 | (aref decls 3)) |
| 6231 | (defsubst verilog-modi-get-regs (modi) | 6231 | (defsubst verilog-decls-get-regs (decls) |
| 6232 | (aref (verilog-modi-get-decls modi) 4)) | 6232 | (aref decls 4)) |
| 6233 | (defsubst verilog-modi-get-assigns (modi) | 6233 | (defsubst verilog-decls-get-assigns (decls) |
| 6234 | (aref (verilog-modi-get-decls modi) 5)) | 6234 | (aref decls 5)) |
| 6235 | (defsubst verilog-modi-get-consts (modi) | 6235 | (defsubst verilog-decls-get-consts (decls) |
| 6236 | (aref (verilog-modi-get-decls modi) 6)) | 6236 | (aref decls 6)) |
| 6237 | (defsubst verilog-modi-get-gparams (modi) | 6237 | (defsubst verilog-decls-get-gparams (decls) |
| 6238 | (aref (verilog-modi-get-decls modi) 7)) | 6238 | (aref decls 7)) |
| 6239 | (defsubst verilog-modi-get-sub-outputs (modi) | 6239 | (defsubst verilog-subdecls-get-outputs (subdecls) |
| 6240 | (aref (verilog-modi-get-sub-decls modi) 0)) | 6240 | (aref subdecls 0)) |
| 6241 | (defsubst verilog-modi-get-sub-inouts (modi) | 6241 | (defsubst verilog-subdecls-get-inouts (subdecls) |
| 6242 | (aref (verilog-modi-get-sub-decls modi) 1)) | 6242 | (aref subdecls 1)) |
| 6243 | (defsubst verilog-modi-get-sub-inputs (modi) | 6243 | (defsubst verilog-subdecls-get-inputs (subdecls) |
| 6244 | (aref (verilog-modi-get-sub-decls modi) 2)) | 6244 | (aref subdecls 2)) |
| 6245 | 6245 | ||
| 6246 | 6246 | ||
| 6247 | (defun verilog-read-sub-decls-sig (submodi comment port sig vec multidim) | 6247 | (defun verilog-read-sub-decls-sig (submoddecls comment port sig vec multidim) |
| 6248 | "For `verilog-read-sub-decls-line', add a signal." | 6248 | "For `verilog-read-sub-decls-line', add a signal." |
| 6249 | (let (portdata) | 6249 | (let (portdata) |
| 6250 | (when sig | 6250 | (when sig |
| @@ -6255,19 +6255,19 @@ Return a array of [outputs inouts inputs wire reg assign const]." | |||
| 6255 | (if multidim (setq multidim (mapcar `verilog-symbol-detick-denumber multidim))) | 6255 | (if multidim (setq multidim (mapcar `verilog-symbol-detick-denumber multidim))) |
| 6256 | (unless (or (not sig) | 6256 | (unless (or (not sig) |
| 6257 | (equal sig "")) ;; Ignore .foo(1'b1) assignments | 6257 | (equal sig "")) ;; Ignore .foo(1'b1) assignments |
| 6258 | (cond ((setq portdata (assoc port (verilog-modi-get-inouts submodi))) | 6258 | (cond ((setq portdata (assoc port (verilog-decls-get-inouts submoddecls))) |
| 6259 | (setq sigs-inout (cons (list sig vec (concat "To/From " comment) nil nil | 6259 | (setq sigs-inout (cons (list sig vec (concat "To/From " comment) nil nil |
| 6260 | (verilog-sig-signed portdata) | 6260 | (verilog-sig-signed portdata) |
| 6261 | (verilog-sig-type portdata) | 6261 | (verilog-sig-type portdata) |
| 6262 | multidim) | 6262 | multidim) |
| 6263 | sigs-inout))) | 6263 | sigs-inout))) |
| 6264 | ((setq portdata (assoc port (verilog-modi-get-outputs submodi))) | 6264 | ((setq portdata (assoc port (verilog-decls-get-outputs submoddecls))) |
| 6265 | (setq sigs-out (cons (list sig vec (concat "From " comment) nil nil | 6265 | (setq sigs-out (cons (list sig vec (concat "From " comment) nil nil |
| 6266 | (verilog-sig-signed portdata) | 6266 | (verilog-sig-signed portdata) |
| 6267 | (verilog-sig-type portdata) | 6267 | (verilog-sig-type portdata) |
| 6268 | multidim) | 6268 | multidim) |
| 6269 | sigs-out))) | 6269 | sigs-out))) |
| 6270 | ((setq portdata (assoc port (verilog-modi-get-inputs submodi))) | 6270 | ((setq portdata (assoc port (verilog-decls-get-inputs submoddecls))) |
| 6271 | (setq sigs-in (cons (list sig vec (concat "To " comment) nil nil | 6271 | (setq sigs-in (cons (list sig vec (concat "To " comment) nil nil |
| 6272 | (verilog-sig-signed portdata) | 6272 | (verilog-sig-signed portdata) |
| 6273 | (verilog-sig-type portdata) | 6273 | (verilog-sig-type portdata) |
| @@ -6276,7 +6276,7 @@ Return a array of [outputs inouts inputs wire reg assign const]." | |||
| 6276 | ;; (t -- warning pin isn't defined.) ; Leave for lint tool | 6276 | ;; (t -- warning pin isn't defined.) ; Leave for lint tool |
| 6277 | ))))) | 6277 | ))))) |
| 6278 | 6278 | ||
| 6279 | (defun verilog-read-sub-decls-line (submodi comment) | 6279 | (defun verilog-read-sub-decls-line (submoddecls comment) |
| 6280 | "For `verilog-read-sub-decls', read lines of port defs until none match anymore. | 6280 | "For `verilog-read-sub-decls', read lines of port defs until none match anymore. |
| 6281 | Return the list of signals found, using submodi to look up each port." | 6281 | Return the list of signals found, using submodi to look up each port." |
| 6282 | (let (done port sig vec multidim) | 6282 | (let (done port sig vec multidim) |
| @@ -6336,11 +6336,11 @@ Return the list of signals found, using submodi to look up each port." | |||
| 6336 | (t | 6336 | (t |
| 6337 | (setq sig nil))) | 6337 | (setq sig nil))) |
| 6338 | ;; Process signals | 6338 | ;; Process signals |
| 6339 | (verilog-read-sub-decls-sig submodi comment port sig vec multidim)))) | 6339 | (verilog-read-sub-decls-sig submoddecls comment port sig vec multidim)))) |
| 6340 | (t | 6340 | (t |
| 6341 | (setq sig nil))) | 6341 | (setq sig nil))) |
| 6342 | ;; Process signals | 6342 | ;; Process signals |
| 6343 | (verilog-read-sub-decls-sig submodi comment port sig vec multidim)) | 6343 | (verilog-read-sub-decls-sig submoddecls comment port sig vec multidim)) |
| 6344 | ;; | 6344 | ;; |
| 6345 | (forward-line 1))))) | 6345 | (forward-line 1))))) |
| 6346 | 6346 | ||
| @@ -6375,21 +6375,23 @@ Outputs comments above subcell signals, for example: | |||
| 6375 | ;; Attempt to snarf a comment | 6375 | ;; Attempt to snarf a comment |
| 6376 | (let* ((submod (verilog-read-inst-module)) | 6376 | (let* ((submod (verilog-read-inst-module)) |
| 6377 | (inst (verilog-read-inst-name)) | 6377 | (inst (verilog-read-inst-name)) |
| 6378 | (comment (concat inst " of " submod ".v")) submodi) | 6378 | (comment (concat inst " of " submod ".v")) |
| 6379 | submodi submoddecls) | ||
| 6379 | (when (setq submodi (verilog-modi-lookup submod t)) | 6380 | (when (setq submodi (verilog-modi-lookup submod t)) |
| 6381 | (setq submoddecls (verilog-modi-get-decls submodi)) | ||
| 6380 | ;; This could have used a list created by verilog-auto-inst | 6382 | ;; This could have used a list created by verilog-auto-inst |
| 6381 | ;; However I want it to be runnable even on user's manually added signals | 6383 | ;; However I want it to be runnable even on user's manually added signals |
| 6382 | (verilog-backward-open-paren) | 6384 | (verilog-backward-open-paren) |
| 6383 | (setq end-inst-point (save-excursion (forward-sexp 1) (point)) | 6385 | (setq end-inst-point (save-excursion (forward-sexp 1) (point)) |
| 6384 | st-point (point)) | 6386 | st-point (point)) |
| 6385 | (while (re-search-forward "\\s *(?\\s *// Outputs" end-inst-point t) | 6387 | (while (re-search-forward "\\s *(?\\s *// Outputs" end-inst-point t) |
| 6386 | (verilog-read-sub-decls-line submodi comment)) ;; Modifies sigs-out | 6388 | (verilog-read-sub-decls-line submoddecls comment)) ;; Modifies sigs-out |
| 6387 | (goto-char st-point) | 6389 | (goto-char st-point) |
| 6388 | (while (re-search-forward "\\s *// Inouts" end-inst-point t) | 6390 | (while (re-search-forward "\\s *// Inouts" end-inst-point t) |
| 6389 | (verilog-read-sub-decls-line submodi comment)) ;; Modifies sigs-inout | 6391 | (verilog-read-sub-decls-line submoddecls comment)) ;; Modifies sigs-inout |
| 6390 | (goto-char st-point) | 6392 | (goto-char st-point) |
| 6391 | (while (re-search-forward "\\s *// Inputs" end-inst-point t) | 6393 | (while (re-search-forward "\\s *// Inputs" end-inst-point t) |
| 6392 | (verilog-read-sub-decls-line submodi comment)) ;; Modifies sigs-in | 6394 | (verilog-read-sub-decls-line submoddecls comment)) ;; Modifies sigs-in |
| 6393 | ))))) | 6395 | ))))) |
| 6394 | ;; Combine duplicate bits | 6396 | ;; Combine duplicate bits |
| 6395 | ;;(setq rr (vector sigs-out sigs-inout sigs-in)) | 6397 | ;;(setq rr (vector sigs-out sigs-inout sigs-in)) |
| @@ -6961,7 +6963,7 @@ Some macros and such are also found and included. For dinotrace.el." | |||
| 6961 | (if fns | 6963 | (if fns |
| 6962 | (set-buffer (find-file-noselect (car fns))) | 6964 | (set-buffer (find-file-noselect (car fns))) |
| 6963 | (error (concat (verilog-point-text) | 6965 | (error (concat (verilog-point-text) |
| 6964 | "Can't find verilog-getopt-file -f file: " filename))) | 6966 | ": Can't find verilog-getopt-file -f file: " filename))) |
| 6965 | (goto-char (point-min)) | 6967 | (goto-char (point-min)) |
| 6966 | (while (not (eobp)) | 6968 | (while (not (eobp)) |
| 6967 | (setq line (buffer-substring (point) | 6969 | (setq line (buffer-substring (point) |
| @@ -6998,6 +7000,69 @@ unless it is already a member of the variable's list." | |||
| 6998 | 7000 | ||
| 6999 | 7001 | ||
| 7000 | ;; | 7002 | ;; |
| 7003 | ;; Cached directory support | ||
| 7004 | ;; | ||
| 7005 | |||
| 7006 | (defvar verilog-dir-cache-preserving nil | ||
| 7007 | "If set, the directory cache is enabled, and file system changes are ignored. | ||
| 7008 | See `verilog-dir-exists-p' and `verilog-dir-files'.") | ||
| 7009 | |||
| 7010 | ;; If adding new cached variable, add also to verilog-preserve-dir-cache | ||
| 7011 | (defvar verilog-dir-cache-list nil | ||
| 7012 | "Alist of (((Cwd Dirname) Results)...) for caching `verilog-dir-files'.") | ||
| 7013 | (defvar verilog-dir-cache-lib-filenames nil | ||
| 7014 | "Cached data for `verilog-library-filenames'.") | ||
| 7015 | |||
| 7016 | (defmacro verilog-preserve-dir-cache (&rest body) | ||
| 7017 | "Execute the BODY forms, allowing directory cache preservation within BODY. | ||
| 7018 | This means that changes inside BODY made to the file system will not be | ||
| 7019 | seen by the `verilog-dir-files' and related functions." | ||
| 7020 | `(let ((verilog-dir-cache-preserving t) | ||
| 7021 | verilog-dir-cache-list | ||
| 7022 | verilog-dir-cache-lib-filenames) | ||
| 7023 | (progn ,@body))) | ||
| 7024 | |||
| 7025 | (defun verilog-dir-files (dirname) | ||
| 7026 | "Return all filenames in the DIRNAME directory. | ||
| 7027 | Relative paths depend on the `default-directory'. | ||
| 7028 | Results are cached if inside `verilog-preserve-dir-cache'." | ||
| 7029 | (unless verilog-dir-cache-preserving | ||
| 7030 | (setq verilog-dir-cache-list nil)) ;; Cache disabled | ||
| 7031 | ;; We don't use expand-file-name on the dirname to make key, as it's slow | ||
| 7032 | (let* ((cache-key (list dirname default-directory)) | ||
| 7033 | (fass (assoc cache-key verilog-dir-cache-list)) | ||
| 7034 | exp-dirname data) | ||
| 7035 | (cond (fass ;; Return data from cache hit | ||
| 7036 | (nth 1 fass)) | ||
| 7037 | (t | ||
| 7038 | (setq exp-dirname (expand-file-name dirname) | ||
| 7039 | data (and (file-directory-p exp-dirname) | ||
| 7040 | (directory-files exp-dirname nil nil nil))) | ||
| 7041 | ;; Note we also encache nil for non-existing dirs. | ||
| 7042 | (setq verilog-dir-cache-list (cons (list cache-key data) | ||
| 7043 | verilog-dir-cache-list)) | ||
| 7044 | data)))) | ||
| 7045 | ;; Miss-and-hit test: | ||
| 7046 | ;;(verilog-preserve-dir-cache (prin1 (verilog-dir-files ".")) | ||
| 7047 | ;; (prin1 (verilog-dir-files ".")) nil) | ||
| 7048 | |||
| 7049 | (defun verilog-dir-file-exists-p (filename) | ||
| 7050 | "Return true if FILENAME exists. | ||
| 7051 | Like `file-exists-p' but results are cached if inside | ||
| 7052 | `verilog-preserve-dir-cache'." | ||
| 7053 | (let* ((dirname (file-name-directory filename)) | ||
| 7054 | ;; Correct for file-name-nondirectory returning same if no slash. | ||
| 7055 | (dirnamed (if (or (not dirname) (equal dirname filename)) | ||
| 7056 | default-directory dirname)) | ||
| 7057 | (flist (verilog-dir-files dirnamed))) | ||
| 7058 | (and flist | ||
| 7059 | (member (file-name-nondirectory filename) flist) | ||
| 7060 | t))) | ||
| 7061 | ;;(verilog-dir-file-exists-p "verilog-mode.el") | ||
| 7062 | ;;(verilog-dir-file-exists-p "../verilog-mode/verilog-mode.el") | ||
| 7063 | |||
| 7064 | |||
| 7065 | ;; | ||
| 7001 | ;; Module name lookup | 7066 | ;; Module name lookup |
| 7002 | ;; | 7067 | ;; |
| 7003 | 7068 | ||
| @@ -7081,11 +7146,13 @@ If the variable vh-{symbol} is defined, substitute that value." | |||
| 7081 | (defun verilog-expand-dirnames (&optional dirnames) | 7146 | (defun verilog-expand-dirnames (&optional dirnames) |
| 7082 | "Return a list of existing directories given a list of wildcarded DIRNAMES. | 7147 | "Return a list of existing directories given a list of wildcarded DIRNAMES. |
| 7083 | Or, just the existing dirnames themselves if there are no wildcards." | 7148 | Or, just the existing dirnames themselves if there are no wildcards." |
| 7149 | ;; Note this function is performance critical. | ||
| 7150 | ;; Do not call anything that requires disk access that cannot be cached. | ||
| 7084 | (interactive) | 7151 | (interactive) |
| 7085 | (unless dirnames (error "`verilog-library-directories' should include at least '.'")) | 7152 | (unless dirnames (error "`verilog-library-directories' should include at least '.'")) |
| 7086 | (setq dirnames (reverse dirnames)) ; not nreverse | 7153 | (setq dirnames (reverse dirnames)) ; not nreverse |
| 7087 | (let ((dirlist nil) | 7154 | (let ((dirlist nil) |
| 7088 | pattern dirfile dirfiles dirname root filename rest) | 7155 | pattern dirfile dirfiles dirname root filename rest basefile) |
| 7089 | (while dirnames | 7156 | (while dirnames |
| 7090 | (setq dirname (substitute-in-file-name (car dirnames)) | 7157 | (setq dirname (substitute-in-file-name (car dirnames)) |
| 7091 | dirnames (cdr dirnames)) | 7158 | dirnames (cdr dirnames)) |
| @@ -7099,18 +7166,19 @@ Or, just the existing dirnames themselves if there are no wildcards." | |||
| 7099 | pattern filename) | 7166 | pattern filename) |
| 7100 | ;; now replace those * and ? with .+ and . | 7167 | ;; now replace those * and ? with .+ and . |
| 7101 | ;; use ^ and /> to get only whole file names | 7168 | ;; use ^ and /> to get only whole file names |
| 7102 | ;;verilog-string-replace-matches | ||
| 7103 | (setq pattern (verilog-string-replace-matches "[*]" ".+" nil nil pattern) | 7169 | (setq pattern (verilog-string-replace-matches "[*]" ".+" nil nil pattern) |
| 7104 | pattern (verilog-string-replace-matches "[?]" "." nil nil pattern) | 7170 | pattern (verilog-string-replace-matches "[?]" "." nil nil pattern) |
| 7105 | 7171 | pattern (concat "^" pattern "$") | |
| 7106 | ;; Unfortunately allows abc/*/rtl to match abc/rtl | 7172 | dirfiles (verilog-dir-files root)) |
| 7107 | ;; because abc/.. shows up in dirfiles. Solutions welcome. | ||
| 7108 | dirfiles (if (file-directory-p root) ; Ignore version control external | ||
| 7109 | (directory-files root t pattern nil))) | ||
| 7110 | (while dirfiles | 7173 | (while dirfiles |
| 7111 | (setq dirfile (expand-file-name (concat (car dirfiles) rest)) | 7174 | (setq basefile (car dirfiles) |
| 7175 | dirfile (expand-file-name (concat root basefile rest)) | ||
| 7112 | dirfiles (cdr dirfiles)) | 7176 | dirfiles (cdr dirfiles)) |
| 7113 | (if (file-directory-p dirfile) | 7177 | (if (and (string-match pattern basefile) |
| 7178 | ;; Don't allow abc/*/rtl to match abc/rtl via .. | ||
| 7179 | (not (equal basefile ".")) | ||
| 7180 | (not (equal basefile "..")) | ||
| 7181 | (file-directory-p dirfile)) | ||
| 7114 | (setq dirlist (cons dirfile dirlist))))) | 7182 | (setq dirlist (cons dirfile dirlist))))) |
| 7115 | ;; Defaults | 7183 | ;; Defaults |
| 7116 | (t | 7184 | (t |
| @@ -7120,23 +7188,40 @@ Or, just the existing dirnames themselves if there are no wildcards." | |||
| 7120 | ;;(verilog-expand-dirnames (list "." ".." "nonexist" "../*" "/home/wsnyder/*/v")) | 7188 | ;;(verilog-expand-dirnames (list "." ".." "nonexist" "../*" "/home/wsnyder/*/v")) |
| 7121 | 7189 | ||
| 7122 | (defun verilog-library-filenames (filename current &optional check-ext) | 7190 | (defun verilog-library-filenames (filename current &optional check-ext) |
| 7123 | "Return a search path to find the given FILENAME name. | 7191 | "Return a search path to find the given FILENAME or module name. |
| 7124 | Uses the CURRENT filename, `verilog-library-directories' and | 7192 | Uses the CURRENT filename, `verilog-library-directories' and |
| 7125 | `verilog-library-extensions' variables to build the path. | 7193 | `verilog-library-extensions' variables to build the path. |
| 7126 | With optional CHECK-EXT also check `verilog-library-extensions'." | 7194 | With optional CHECK-EXT also check `verilog-library-extensions'." |
| 7127 | (let ((ckdir (verilog-expand-dirnames verilog-library-directories)) | 7195 | (unless verilog-dir-cache-preserving |
| 7128 | fn outlist) | 7196 | (setq verilog-dir-cache-lib-filenames nil)) |
| 7129 | (while ckdir | 7197 | (let* ((cache-key (list filename current check-ext)) |
| 7130 | (let ((ckext (if check-ext verilog-library-extensions `("")))) | 7198 | (fass (assoc cache-key verilog-dir-cache-lib-filenames)) |
| 7131 | (while ckext | 7199 | chkdirs chkdir chkexts fn outlist) |
| 7132 | (setq fn (expand-file-name | 7200 | (cond (fass ;; Return data from cache hit |
| 7133 | (concat filename (car ckext)) | 7201 | (nth 1 fass)) |
| 7134 | (expand-file-name (car ckdir) (file-name-directory current)))) | 7202 | (t |
| 7135 | (if (file-exists-p fn) | 7203 | ;; Note this expand can't be easily cached, as we need to |
| 7136 | (setq outlist (cons fn outlist))) | 7204 | ;; pick up buffer-local variables for newly read sub-module files |
| 7137 | (setq ckext (cdr ckext)))) | 7205 | (setq chkdirs (verilog-expand-dirnames verilog-library-directories)) |
| 7138 | (setq ckdir (cdr ckdir))) | 7206 | (while chkdirs |
| 7139 | (nreverse outlist))) | 7207 | (setq chkdir (expand-file-name (car chkdirs) |
| 7208 | (file-name-directory current)) | ||
| 7209 | chkexts (if check-ext verilog-library-extensions `(""))) | ||
| 7210 | (while chkexts | ||
| 7211 | (setq fn (expand-file-name (concat filename (car chkexts)) | ||
| 7212 | chkdir)) | ||
| 7213 | ;;(message "Check for %s" fn) | ||
| 7214 | (if (verilog-dir-file-exists-p fn) | ||
| 7215 | (setq outlist (cons (expand-file-name | ||
| 7216 | fn (file-name-directory current)) | ||
| 7217 | outlist))) | ||
| 7218 | (setq chkexts (cdr chkexts))) | ||
| 7219 | (setq chkdirs (cdr chkdirs))) | ||
| 7220 | (setq outlist (nreverse outlist)) | ||
| 7221 | (setq verilog-dir-cache-lib-filenames | ||
| 7222 | (cons (list cache-key outlist) | ||
| 7223 | verilog-dir-cache-lib-filenames)) | ||
| 7224 | outlist)))) | ||
| 7140 | 7225 | ||
| 7141 | (defun verilog-module-filenames (module current) | 7226 | (defun verilog-module-filenames (module current) |
| 7142 | "Return a search path to find the given MODULE name. | 7227 | "Return a search path to find the given MODULE name. |
| @@ -7166,10 +7251,10 @@ Buffer-local.") | |||
| 7166 | 7251 | ||
| 7167 | (defvar verilog-modi-cache-preserve-tick nil | 7252 | (defvar verilog-modi-cache-preserve-tick nil |
| 7168 | "Modification tick after which the cache is still considered valid. | 7253 | "Modification tick after which the cache is still considered valid. |
| 7169 | Use `verilog-preserve-cache' to set it.") | 7254 | Use `verilog-preserve-modi-cache' to set it.") |
| 7170 | (defvar verilog-modi-cache-preserve-buffer nil | 7255 | (defvar verilog-modi-cache-preserve-buffer nil |
| 7171 | "Modification tick after which the cache is still considered valid. | 7256 | "Modification tick after which the cache is still considered valid. |
| 7172 | Use `verilog-preserve-cache' to set it.") | 7257 | Use `verilog-preserve-modi-cache' to set it.") |
| 7173 | 7258 | ||
| 7174 | (defun verilog-modi-current () | 7259 | (defun verilog-modi-current () |
| 7175 | "Return the modi structure for the module currently at point." | 7260 | "Return the modi structure for the module currently at point." |
| @@ -7260,10 +7345,10 @@ Return modi if successful, else print message unless IGNORE-ERROR is true." | |||
| 7260 | (defun verilog-modi-cache-results (modi function) | 7345 | (defun verilog-modi-cache-results (modi function) |
| 7261 | "Run on MODI the given FUNCTION. Locate the module in a file. | 7346 | "Run on MODI the given FUNCTION. Locate the module in a file. |
| 7262 | Cache the output of function so next call may have faster access." | 7347 | Cache the output of function so next call may have faster access." |
| 7263 | (let (func-returns fass) | 7348 | (let (fass) |
| 7264 | (save-excursion | 7349 | (save-excursion ;; Cache is buffer-local so can't avoid this. |
| 7265 | (verilog-modi-goto modi) | 7350 | (verilog-modi-goto modi) |
| 7266 | (if (and (setq fass (assoc (list (verilog-modi-name modi) function) | 7351 | (if (and (setq fass (assoc (list modi function) |
| 7267 | verilog-modi-cache-list)) | 7352 | verilog-modi-cache-list)) |
| 7268 | ;; Destroy caching when incorrect; Modified or file changed | 7353 | ;; Destroy caching when incorrect; Modified or file changed |
| 7269 | (not (and verilog-cache-enabled | 7354 | (not (and verilog-cache-enabled |
| @@ -7275,26 +7360,26 @@ Cache the output of function so next call may have faster access." | |||
| 7275 | (setq verilog-modi-cache-list nil | 7360 | (setq verilog-modi-cache-list nil |
| 7276 | fass nil)) | 7361 | fass nil)) |
| 7277 | (cond (fass | 7362 | (cond (fass |
| 7278 | ;; Found | 7363 | ;; Return data from cache hit |
| 7279 | (setq func-returns (nth 3 fass))) | 7364 | (nth 3 fass)) |
| 7280 | (t | 7365 | (t |
| 7281 | ;; Read from file | 7366 | ;; Read from file |
| 7282 | ;; Clear then restore any hilighting to make Emacs 19 happy | 7367 | ;; Clear then restore any hilighting to make emacs19 happy |
| 7283 | (let ((fontlocked (when (and (boundp 'font-lock-mode) | 7368 | (let ((fontlocked (when (and (boundp 'font-lock-mode) |
| 7284 | font-lock-mode) | 7369 | font-lock-mode) |
| 7285 | (font-lock-mode nil) | 7370 | (font-lock-mode nil) |
| 7286 | t))) | 7371 | t)) |
| 7372 | func-returns) | ||
| 7287 | (setq func-returns (funcall function)) | 7373 | (setq func-returns (funcall function)) |
| 7288 | (when fontlocked (font-lock-mode t))) | 7374 | (when fontlocked (font-lock-mode t)) |
| 7289 | ;; Cache for next time | 7375 | ;; Cache for next time |
| 7290 | (setq verilog-modi-cache-list | 7376 | (setq verilog-modi-cache-list |
| 7291 | (cons (list (list (verilog-modi-name modi) function) | 7377 | (cons (list (list modi function) |
| 7292 | (buffer-modified-tick) | 7378 | (buffer-modified-tick) |
| 7293 | (visited-file-modtime) | 7379 | (visited-file-modtime) |
| 7294 | func-returns) | 7380 | func-returns) |
| 7295 | verilog-modi-cache-list))))) | 7381 | verilog-modi-cache-list)) |
| 7296 | ;; | 7382 | func-returns)))))) |
| 7297 | func-returns)) | ||
| 7298 | 7383 | ||
| 7299 | (defun verilog-modi-cache-add (modi function element sig-list) | 7384 | (defun verilog-modi-cache-add (modi function element sig-list) |
| 7300 | "Add function return results to the module cache. | 7385 | "Add function return results to the module cache. |
| @@ -7303,13 +7388,13 @@ function now contains the additional SIG-LIST parameters." | |||
| 7303 | (let (fass) | 7388 | (let (fass) |
| 7304 | (save-excursion | 7389 | (save-excursion |
| 7305 | (verilog-modi-goto modi) | 7390 | (verilog-modi-goto modi) |
| 7306 | (if (setq fass (assoc (list (verilog-modi-name modi) function) | 7391 | (if (setq fass (assoc (list modi function) |
| 7307 | verilog-modi-cache-list)) | 7392 | verilog-modi-cache-list)) |
| 7308 | (let ((func-returns (nth 3 fass))) | 7393 | (let ((func-returns (nth 3 fass))) |
| 7309 | (aset func-returns element | 7394 | (aset func-returns element |
| 7310 | (append sig-list (aref func-returns element)))))))) | 7395 | (append sig-list (aref func-returns element)))))))) |
| 7311 | 7396 | ||
| 7312 | (defmacro verilog-preserve-cache (&rest body) | 7397 | (defmacro verilog-preserve-modi-cache (&rest body) |
| 7313 | "Execute the BODY forms, allowing cache preservation within BODY. | 7398 | "Execute the BODY forms, allowing cache preservation within BODY. |
| 7314 | This means that changes to the buffer will not result in the cache being | 7399 | This means that changes to the buffer will not result in the cache being |
| 7315 | flushed. If the changes affect the modsig state, they must call the | 7400 | flushed. If the changes affect the modsig state, they must call the |
| @@ -7359,22 +7444,22 @@ and invalidating the cache." | |||
| 7359 | (nreverse out-list)))) | 7444 | (nreverse out-list)))) |
| 7360 | 7445 | ||
| 7361 | ;; Combined | 7446 | ;; Combined |
| 7362 | (defun verilog-modi-get-signals (modi) | 7447 | (defun verilog-decls-get-signals (decls) |
| 7363 | (append | 7448 | (append |
| 7364 | (verilog-modi-get-outputs modi) | 7449 | (verilog-decls-get-outputs decls) |
| 7365 | (verilog-modi-get-inouts modi) | 7450 | (verilog-decls-get-inouts decls) |
| 7366 | (verilog-modi-get-inputs modi) | 7451 | (verilog-decls-get-inputs decls) |
| 7367 | (verilog-modi-get-wires modi) | 7452 | (verilog-decls-get-wires decls) |
| 7368 | (verilog-modi-get-regs modi) | 7453 | (verilog-decls-get-regs decls) |
| 7369 | (verilog-modi-get-assigns modi) | 7454 | (verilog-decls-get-assigns decls) |
| 7370 | (verilog-modi-get-consts modi) | 7455 | (verilog-decls-get-consts decls) |
| 7371 | (verilog-modi-get-gparams modi))) | 7456 | (verilog-decls-get-gparams decls))) |
| 7372 | 7457 | ||
| 7373 | (defun verilog-modi-get-ports (modi) | 7458 | (defun verilog-decls-get-ports (decls) |
| 7374 | (append | 7459 | (append |
| 7375 | (verilog-modi-get-outputs modi) | 7460 | (verilog-decls-get-outputs decls) |
| 7376 | (verilog-modi-get-inouts modi) | 7461 | (verilog-decls-get-inouts decls) |
| 7377 | (verilog-modi-get-inputs modi))) | 7462 | (verilog-decls-get-inputs decls))) |
| 7378 | 7463 | ||
| 7379 | (defsubst verilog-modi-cache-add-outputs (modi sig-list) | 7464 | (defsubst verilog-modi-cache-add-outputs (modi sig-list) |
| 7380 | (verilog-modi-cache-add modi 'verilog-read-decls 0 sig-list)) | 7465 | (verilog-modi-cache-add modi 'verilog-read-decls 0 sig-list)) |
| @@ -7402,10 +7487,6 @@ and invalidating the cache." | |||
| 7402 | (while (verilog-re-search-forward search-for nil t) | 7487 | (while (verilog-re-search-forward search-for nil t) |
| 7403 | (funcall func))) | 7488 | (funcall func))) |
| 7404 | 7489 | ||
| 7405 | (defun verilog-auto-search-do (search-for func) | ||
| 7406 | "Search for the given auto text SEARCH-FOR, and perform FUNC where it occurs." | ||
| 7407 | (verilog-auto-re-search-do (regexp-quote search-for) func)) | ||
| 7408 | |||
| 7409 | (defun verilog-insert-one-definition (sig type indent-pt) | 7490 | (defun verilog-insert-one-definition (sig type indent-pt) |
| 7410 | "Print out a definition for SIG of the given TYPE, | 7491 | "Print out a definition for SIG of the given TYPE, |
| 7411 | with appropriate INDENT-PT indentation." | 7492 | with appropriate INDENT-PT indentation." |
| @@ -7760,8 +7841,9 @@ Typing \\[verilog-inject-auto] will make this into: | |||
| 7760 | (save-excursion | 7841 | (save-excursion |
| 7761 | (goto-char (point-min)) | 7842 | (goto-char (point-min)) |
| 7762 | (while (verilog-re-search-forward-quick "\\<always\\s *@\\s *(" nil t) | 7843 | (while (verilog-re-search-forward-quick "\\<always\\s *@\\s *(" nil t) |
| 7763 | (let ((start-pt (point)) | 7844 | (let* ((start-pt (point)) |
| 7764 | (modi (verilog-modi-current)) | 7845 | (modi (verilog-modi-current)) |
| 7846 | (moddecls (verilog-modi-get-decls modi)) | ||
| 7765 | pre-sigs | 7847 | pre-sigs |
| 7766 | got-sigs) | 7848 | got-sigs) |
| 7767 | (backward-char 1) | 7849 | (backward-char 1) |
| @@ -7770,7 +7852,7 @@ Typing \\[verilog-inject-auto] will make this into: | |||
| 7770 | (when (not (verilog-re-search-backward "/\\*\\(AUTOSENSE\\|AS\\)\\*/" start-pt t)) | 7852 | (when (not (verilog-re-search-backward "/\\*\\(AUTOSENSE\\|AS\\)\\*/" start-pt t)) |
| 7771 | (setq pre-sigs (verilog-signals-from-signame | 7853 | (setq pre-sigs (verilog-signals-from-signame |
| 7772 | (verilog-read-signals start-pt (point))) | 7854 | (verilog-read-signals start-pt (point))) |
| 7773 | got-sigs (verilog-auto-sense-sigs modi nil)) | 7855 | got-sigs (verilog-auto-sense-sigs moddecls nil)) |
| 7774 | (when (not (or (verilog-signals-not-in pre-sigs got-sigs) ; Both are equal? | 7856 | (when (not (or (verilog-signals-not-in pre-sigs got-sigs) ; Both are equal? |
| 7775 | (verilog-signals-not-in got-sigs pre-sigs))) | 7857 | (verilog-signals-not-in got-sigs pre-sigs))) |
| 7776 | (delete-region start-pt (point)) | 7858 | (delete-region start-pt (point)) |
| @@ -7923,21 +8005,22 @@ to choose the comma yourself. | |||
| 7923 | 8005 | ||
| 7924 | Avoid declaring ports manually, as it makes code harder to maintain." | 8006 | Avoid declaring ports manually, as it makes code harder to maintain." |
| 7925 | (save-excursion | 8007 | (save-excursion |
| 7926 | (let ((modi (verilog-modi-current)) | 8008 | (let* ((modi (verilog-modi-current)) |
| 8009 | (moddecls (verilog-modi-get-decls modi)) | ||
| 7927 | (skip-pins (aref (verilog-read-arg-pins) 0))) | 8010 | (skip-pins (aref (verilog-read-arg-pins) 0))) |
| 7928 | (verilog-repair-open-comma) | 8011 | (verilog-repair-open-comma) |
| 7929 | (verilog-auto-arg-ports (verilog-signals-not-in | 8012 | (verilog-auto-arg-ports (verilog-signals-not-in |
| 7930 | (verilog-modi-get-outputs modi) | 8013 | (verilog-decls-get-outputs moddecls) |
| 7931 | skip-pins) | 8014 | skip-pins) |
| 7932 | "// Outputs" | 8015 | "// Outputs" |
| 7933 | verilog-indent-level-declaration) | 8016 | verilog-indent-level-declaration) |
| 7934 | (verilog-auto-arg-ports (verilog-signals-not-in | 8017 | (verilog-auto-arg-ports (verilog-signals-not-in |
| 7935 | (verilog-modi-get-inouts modi) | 8018 | (verilog-decls-get-inouts moddecls) |
| 7936 | skip-pins) | 8019 | skip-pins) |
| 7937 | "// Inouts" | 8020 | "// Inouts" |
| 7938 | verilog-indent-level-declaration) | 8021 | verilog-indent-level-declaration) |
| 7939 | (verilog-auto-arg-ports (verilog-signals-not-in | 8022 | (verilog-auto-arg-ports (verilog-signals-not-in |
| 7940 | (verilog-modi-get-inputs modi) | 8023 | (verilog-decls-get-inputs moddecls) |
| 7941 | skip-pins) | 8024 | skip-pins) |
| 7942 | "// Inputs" | 8025 | "// Inputs" |
| 7943 | verilog-indent-level-declaration) | 8026 | verilog-indent-level-declaration) |
| @@ -8325,9 +8408,11 @@ Lisp Templates: | |||
| 8325 | (verilog-auto-inst-column (max verilog-auto-inst-column | 8408 | (verilog-auto-inst-column (max verilog-auto-inst-column |
| 8326 | (+ 16 (* 8 (/ (+ indent-pt 7) 8))))) | 8409 | (+ 16 (* 8 (/ (+ indent-pt 7) 8))))) |
| 8327 | (modi (verilog-modi-current)) | 8410 | (modi (verilog-modi-current)) |
| 8411 | (moddecls (verilog-modi-get-decls modi)) | ||
| 8328 | (vector-skip-list (unless verilog-auto-inst-vector | 8412 | (vector-skip-list (unless verilog-auto-inst-vector |
| 8329 | (verilog-modi-get-signals modi))) | 8413 | (verilog-decls-get-signals moddecls))) |
| 8330 | submod submodi inst skip-pins tpl-list tpl-num did-first) | 8414 | submod submodi submoddecls |
| 8415 | inst skip-pins tpl-list tpl-num did-first) | ||
| 8331 | ;; Find module name that is instantiated | 8416 | ;; Find module name that is instantiated |
| 8332 | (setq submod (verilog-read-inst-module) | 8417 | (setq submod (verilog-read-inst-module) |
| 8333 | inst (verilog-read-inst-name) | 8418 | inst (verilog-read-inst-name) |
| @@ -8341,6 +8426,7 @@ Lisp Templates: | |||
| 8341 | ;; Lookup position, etc of submodule | 8426 | ;; Lookup position, etc of submodule |
| 8342 | ;; Note this may raise an error | 8427 | ;; Note this may raise an error |
| 8343 | (when (setq submodi (verilog-modi-lookup submod t)) | 8428 | (when (setq submodi (verilog-modi-lookup submod t)) |
| 8429 | (setq submoddecls (verilog-modi-get-decls submodi)) | ||
| 8344 | ;; If there's a number in the instantiation, it may be a argument to the | 8430 | ;; If there's a number in the instantiation, it may be a argument to the |
| 8345 | ;; automatic variable instantiation program. | 8431 | ;; automatic variable instantiation program. |
| 8346 | (let* ((tpl-info (verilog-read-auto-template submod)) | 8432 | (let* ((tpl-info (verilog-read-auto-template submod)) |
| @@ -8351,7 +8437,7 @@ Lisp Templates: | |||
| 8351 | tpl-list (aref tpl-info 1))) | 8437 | tpl-list (aref tpl-info 1))) |
| 8352 | ;; Find submodule's signals and dump | 8438 | ;; Find submodule's signals and dump |
| 8353 | (let ((sig-list (verilog-signals-not-in | 8439 | (let ((sig-list (verilog-signals-not-in |
| 8354 | (verilog-modi-get-outputs submodi) | 8440 | (verilog-decls-get-outputs submoddecls) |
| 8355 | skip-pins)) | 8441 | skip-pins)) |
| 8356 | (vl-dir "output")) | 8442 | (vl-dir "output")) |
| 8357 | (when sig-list | 8443 | (when sig-list |
| @@ -8364,7 +8450,7 @@ Lisp Templates: | |||
| 8364 | tpl-list tpl-num for-star)) | 8450 | tpl-list tpl-num for-star)) |
| 8365 | sig-list))) | 8451 | sig-list))) |
| 8366 | (let ((sig-list (verilog-signals-not-in | 8452 | (let ((sig-list (verilog-signals-not-in |
| 8367 | (verilog-modi-get-inouts submodi) | 8453 | (verilog-decls-get-inouts submoddecls) |
| 8368 | skip-pins)) | 8454 | skip-pins)) |
| 8369 | (vl-dir "inout")) | 8455 | (vl-dir "inout")) |
| 8370 | (when sig-list | 8456 | (when sig-list |
| @@ -8376,7 +8462,7 @@ Lisp Templates: | |||
| 8376 | tpl-list tpl-num for-star)) | 8462 | tpl-list tpl-num for-star)) |
| 8377 | sig-list))) | 8463 | sig-list))) |
| 8378 | (let ((sig-list (verilog-signals-not-in | 8464 | (let ((sig-list (verilog-signals-not-in |
| 8379 | (verilog-modi-get-inputs submodi) | 8465 | (verilog-decls-get-inputs submoddecls) |
| 8380 | skip-pins)) | 8466 | skip-pins)) |
| 8381 | (vl-dir "input")) | 8467 | (vl-dir "input")) |
| 8382 | (when sig-list | 8468 | (when sig-list |
| @@ -8447,9 +8533,11 @@ Templates: | |||
| 8447 | (verilog-auto-inst-column (max verilog-auto-inst-column | 8533 | (verilog-auto-inst-column (max verilog-auto-inst-column |
| 8448 | (+ 16 (* 8 (/ (+ indent-pt 7) 8))))) | 8534 | (+ 16 (* 8 (/ (+ indent-pt 7) 8))))) |
| 8449 | (modi (verilog-modi-current)) | 8535 | (modi (verilog-modi-current)) |
| 8536 | (moddecls (verilog-modi-get-decls modi)) | ||
| 8450 | (vector-skip-list (unless verilog-auto-inst-vector | 8537 | (vector-skip-list (unless verilog-auto-inst-vector |
| 8451 | (verilog-modi-get-signals modi))) | 8538 | (verilog-decls-get-signals moddecls))) |
| 8452 | submod submodi inst skip-pins tpl-list tpl-num did-first) | 8539 | submod submodi submoddecls |
| 8540 | inst skip-pins tpl-list tpl-num did-first) | ||
| 8453 | ;; Find module name that is instantiated | 8541 | ;; Find module name that is instantiated |
| 8454 | (setq submod (save-excursion | 8542 | (setq submod (save-excursion |
| 8455 | ;; Get to the point where AUTOINST normally is to read the module | 8543 | ;; Get to the point where AUTOINST normally is to read the module |
| @@ -8469,6 +8557,7 @@ Templates: | |||
| 8469 | ;; Lookup position, etc of submodule | 8557 | ;; Lookup position, etc of submodule |
| 8470 | ;; Note this may raise an error | 8558 | ;; Note this may raise an error |
| 8471 | (when (setq submodi (verilog-modi-lookup submod t)) | 8559 | (when (setq submodi (verilog-modi-lookup submod t)) |
| 8560 | (setq submoddecls (verilog-modi-get-decls submodi)) | ||
| 8472 | ;; If there's a number in the instantiation, it may be a argument to the | 8561 | ;; If there's a number in the instantiation, it may be a argument to the |
| 8473 | ;; automatic variable instantiation program. | 8562 | ;; automatic variable instantiation program. |
| 8474 | (let* ((tpl-info (verilog-read-auto-template submod)) | 8563 | (let* ((tpl-info (verilog-read-auto-template submod)) |
| @@ -8479,7 +8568,7 @@ Templates: | |||
| 8479 | tpl-list (aref tpl-info 1))) | 8568 | tpl-list (aref tpl-info 1))) |
| 8480 | ;; Find submodule's signals and dump | 8569 | ;; Find submodule's signals and dump |
| 8481 | (let ((sig-list (verilog-signals-not-in | 8570 | (let ((sig-list (verilog-signals-not-in |
| 8482 | (verilog-modi-get-gparams submodi) | 8571 | (verilog-decls-get-gparams submoddecls) |
| 8483 | skip-pins)) | 8572 | skip-pins)) |
| 8484 | (vl-dir "parameter")) | 8573 | (vl-dir "parameter")) |
| 8485 | (when sig-list | 8574 | (when sig-list |
| @@ -8536,15 +8625,17 @@ Typing \\[verilog-auto] will make this into: | |||
| 8536 | ;; Point must be at insertion point. | 8625 | ;; Point must be at insertion point. |
| 8537 | (let* ((indent-pt (current-indentation)) | 8626 | (let* ((indent-pt (current-indentation)) |
| 8538 | (modi (verilog-modi-current)) | 8627 | (modi (verilog-modi-current)) |
| 8628 | (moddecls (verilog-modi-get-decls modi)) | ||
| 8629 | (modsubdecls (verilog-modi-get-sub-decls modi)) | ||
| 8539 | (sig-list (verilog-signals-not-in | 8630 | (sig-list (verilog-signals-not-in |
| 8540 | (verilog-modi-get-outputs modi) | 8631 | (verilog-decls-get-outputs moddecls) |
| 8541 | (append (verilog-modi-get-wires modi) | 8632 | (append (verilog-decls-get-wires moddecls) |
| 8542 | (verilog-modi-get-regs modi) | 8633 | (verilog-decls-get-regs moddecls) |
| 8543 | (verilog-modi-get-assigns modi) | 8634 | (verilog-decls-get-assigns moddecls) |
| 8544 | (verilog-modi-get-consts modi) | 8635 | (verilog-decls-get-consts moddecls) |
| 8545 | (verilog-modi-get-gparams modi) | 8636 | (verilog-decls-get-gparams moddecls) |
| 8546 | (verilog-modi-get-sub-outputs modi) | 8637 | (verilog-subdecls-get-outputs modsubdecls) |
| 8547 | (verilog-modi-get-sub-inouts modi))))) | 8638 | (verilog-subdecls-get-inouts modsubdecls))))) |
| 8548 | (forward-line 1) | 8639 | (forward-line 1) |
| 8549 | (when sig-list | 8640 | (when sig-list |
| 8550 | (verilog-insert-indent "// Beginning of automatic regs (for this module's undeclared outputs)\n") | 8641 | (verilog-insert-indent "// Beginning of automatic regs (for this module's undeclared outputs)\n") |
| @@ -8593,11 +8684,13 @@ Typing \\[verilog-auto] will make this into: | |||
| 8593 | ;; Point must be at insertion point. | 8684 | ;; Point must be at insertion point. |
| 8594 | (let* ((indent-pt (current-indentation)) | 8685 | (let* ((indent-pt (current-indentation)) |
| 8595 | (modi (verilog-modi-current)) | 8686 | (modi (verilog-modi-current)) |
| 8687 | (moddecls (verilog-modi-get-decls modi)) | ||
| 8688 | (modsubdecls (verilog-modi-get-sub-decls modi)) | ||
| 8596 | (sig-list (verilog-signals-combine-bus | 8689 | (sig-list (verilog-signals-combine-bus |
| 8597 | (verilog-signals-not-in | 8690 | (verilog-signals-not-in |
| 8598 | (append (verilog-modi-get-sub-inputs modi) | 8691 | (append (verilog-subdecls-get-inputs modsubdecls) |
| 8599 | (verilog-modi-get-sub-inouts modi)) | 8692 | (verilog-subdecls-get-inouts modsubdecls)) |
| 8600 | (verilog-modi-get-signals modi))))) | 8693 | (verilog-decls-get-signals moddecls))))) |
| 8601 | (forward-line 1) | 8694 | (forward-line 1) |
| 8602 | (when sig-list | 8695 | (when sig-list |
| 8603 | (verilog-insert-indent "// Beginning of automatic reg inputs (for undeclared instantiated-module inputs)\n") | 8696 | (verilog-insert-indent "// Beginning of automatic reg inputs (for undeclared instantiated-module inputs)\n") |
| @@ -8654,11 +8747,13 @@ Typing \\[verilog-auto] will make this into: | |||
| 8654 | ;; Point must be at insertion point. | 8747 | ;; Point must be at insertion point. |
| 8655 | (let* ((indent-pt (current-indentation)) | 8748 | (let* ((indent-pt (current-indentation)) |
| 8656 | (modi (verilog-modi-current)) | 8749 | (modi (verilog-modi-current)) |
| 8750 | (moddecls (verilog-modi-get-decls modi)) | ||
| 8751 | (modsubdecls (verilog-modi-get-sub-decls modi)) | ||
| 8657 | (sig-list (verilog-signals-combine-bus | 8752 | (sig-list (verilog-signals-combine-bus |
| 8658 | (verilog-signals-not-in | 8753 | (verilog-signals-not-in |
| 8659 | (append (verilog-modi-get-sub-outputs modi) | 8754 | (append (verilog-subdecls-get-outputs modsubdecls) |
| 8660 | (verilog-modi-get-sub-inouts modi)) | 8755 | (verilog-subdecls-get-inouts modsubdecls)) |
| 8661 | (verilog-modi-get-signals modi))))) | 8756 | (verilog-decls-get-signals moddecls))))) |
| 8662 | (forward-line 1) | 8757 | (forward-line 1) |
| 8663 | (when sig-list | 8758 | (when sig-list |
| 8664 | (verilog-insert-indent "// Beginning of automatic wires (for undeclared instantiated-module outputs)\n") | 8759 | (verilog-insert-indent "// Beginning of automatic wires (for undeclared instantiated-module outputs)\n") |
| @@ -8728,12 +8823,14 @@ same expansion will result from only extracting outputs starting with ov: | |||
| 8728 | (nth 0 (verilog-read-auto-params 1)))) | 8823 | (nth 0 (verilog-read-auto-params 1)))) |
| 8729 | (v2k (verilog-in-paren)) | 8824 | (v2k (verilog-in-paren)) |
| 8730 | (modi (verilog-modi-current)) | 8825 | (modi (verilog-modi-current)) |
| 8826 | (moddecls (verilog-modi-get-decls modi)) | ||
| 8827 | (modsubdecls (verilog-modi-get-sub-decls modi)) | ||
| 8731 | (sig-list (verilog-signals-not-in | 8828 | (sig-list (verilog-signals-not-in |
| 8732 | (verilog-modi-get-sub-outputs modi) | 8829 | (verilog-subdecls-get-outputs modsubdecls) |
| 8733 | (append (verilog-modi-get-outputs modi) | 8830 | (append (verilog-decls-get-outputs moddecls) |
| 8734 | (verilog-modi-get-inouts modi) | 8831 | (verilog-decls-get-inouts moddecls) |
| 8735 | (verilog-modi-get-sub-inputs modi) | 8832 | (verilog-subdecls-get-inputs modsubdecls) |
| 8736 | (verilog-modi-get-sub-inouts modi))))) | 8833 | (verilog-subdecls-get-inouts modsubdecls))))) |
| 8737 | (when regexp | 8834 | (when regexp |
| 8738 | (setq sig-list (verilog-signals-matching-regexp | 8835 | (setq sig-list (verilog-signals-matching-regexp |
| 8739 | sig-list regexp))) | 8836 | sig-list regexp))) |
| @@ -8785,10 +8882,11 @@ Typing \\[verilog-auto] will make this into: | |||
| 8785 | (let* ((indent-pt (current-indentation)) | 8882 | (let* ((indent-pt (current-indentation)) |
| 8786 | (v2k (verilog-in-paren)) | 8883 | (v2k (verilog-in-paren)) |
| 8787 | (modi (verilog-modi-current)) | 8884 | (modi (verilog-modi-current)) |
| 8885 | (moddecls (verilog-modi-get-decls modi)) | ||
| 8788 | (sig-list (verilog-signals-combine-bus | 8886 | (sig-list (verilog-signals-combine-bus |
| 8789 | (verilog-signals-not-in | 8887 | (verilog-signals-not-in |
| 8790 | (verilog-modi-get-signals modi) | 8888 | (verilog-decls-get-signals moddecls) |
| 8791 | (verilog-modi-get-ports modi))))) | 8889 | (verilog-decls-get-ports moddecls))))) |
| 8792 | (forward-line 1) | 8890 | (forward-line 1) |
| 8793 | (when v2k (verilog-repair-open-comma)) | 8891 | (when v2k (verilog-repair-open-comma)) |
| 8794 | (when sig-list | 8892 | (when sig-list |
| @@ -8853,16 +8951,18 @@ same expansion will result from only extracting inputs starting with i: | |||
| 8853 | (nth 0 (verilog-read-auto-params 1)))) | 8951 | (nth 0 (verilog-read-auto-params 1)))) |
| 8854 | (v2k (verilog-in-paren)) | 8952 | (v2k (verilog-in-paren)) |
| 8855 | (modi (verilog-modi-current)) | 8953 | (modi (verilog-modi-current)) |
| 8954 | (moddecls (verilog-modi-get-decls modi)) | ||
| 8955 | (modsubdecls (verilog-modi-get-sub-decls modi)) | ||
| 8856 | (sig-list (verilog-signals-not-in | 8956 | (sig-list (verilog-signals-not-in |
| 8857 | (verilog-modi-get-sub-inputs modi) | 8957 | (verilog-subdecls-get-inputs modsubdecls) |
| 8858 | (append (verilog-modi-get-inputs modi) | 8958 | (append (verilog-decls-get-inputs moddecls) |
| 8859 | (verilog-modi-get-inouts modi) | 8959 | (verilog-decls-get-inouts moddecls) |
| 8860 | (verilog-modi-get-wires modi) | 8960 | (verilog-decls-get-wires moddecls) |
| 8861 | (verilog-modi-get-regs modi) | 8961 | (verilog-decls-get-regs moddecls) |
| 8862 | (verilog-modi-get-consts modi) | 8962 | (verilog-decls-get-consts moddecls) |
| 8863 | (verilog-modi-get-gparams modi) | 8963 | (verilog-decls-get-gparams moddecls) |
| 8864 | (verilog-modi-get-sub-outputs modi) | 8964 | (verilog-subdecls-get-outputs modsubdecls) |
| 8865 | (verilog-modi-get-sub-inouts modi))))) | 8965 | (verilog-subdecls-get-inouts modsubdecls))))) |
| 8866 | (when regexp | 8966 | (when regexp |
| 8867 | (setq sig-list (verilog-signals-matching-regexp | 8967 | (setq sig-list (verilog-signals-matching-regexp |
| 8868 | sig-list regexp))) | 8968 | sig-list regexp))) |
| @@ -8932,13 +9032,15 @@ same expansion will result from only extracting inouts starting with i: | |||
| 8932 | (nth 0 (verilog-read-auto-params 1)))) | 9032 | (nth 0 (verilog-read-auto-params 1)))) |
| 8933 | (v2k (verilog-in-paren)) | 9033 | (v2k (verilog-in-paren)) |
| 8934 | (modi (verilog-modi-current)) | 9034 | (modi (verilog-modi-current)) |
| 9035 | (moddecls (verilog-modi-get-decls modi)) | ||
| 9036 | (modsubdecls (verilog-modi-get-sub-decls modi)) | ||
| 8935 | (sig-list (verilog-signals-not-in | 9037 | (sig-list (verilog-signals-not-in |
| 8936 | (verilog-modi-get-sub-inouts modi) | 9038 | (verilog-subdecls-get-inouts modsubdecls) |
| 8937 | (append (verilog-modi-get-outputs modi) | 9039 | (append (verilog-decls-get-outputs moddecls) |
| 8938 | (verilog-modi-get-inouts modi) | 9040 | (verilog-decls-get-inouts moddecls) |
| 8939 | (verilog-modi-get-inputs modi) | 9041 | (verilog-decls-get-inputs moddecls) |
| 8940 | (verilog-modi-get-sub-inputs modi) | 9042 | (verilog-subdecls-get-inputs modsubdecls) |
| 8941 | (verilog-modi-get-sub-outputs modi))))) | 9043 | (verilog-subdecls-get-outputs modsubdecls))))) |
| 8942 | (when regexp | 9044 | (when regexp |
| 8943 | (setq sig-list (verilog-signals-matching-regexp | 9045 | (setq sig-list (verilog-signals-matching-regexp |
| 8944 | sig-list regexp))) | 9046 | sig-list regexp))) |
| @@ -9011,15 +9113,17 @@ same expansion will result from only extracting signals starting with i: | |||
| 9011 | (let* ((indent-pt (current-indentation)) | 9113 | (let* ((indent-pt (current-indentation)) |
| 9012 | (v2k (verilog-in-paren)) | 9114 | (v2k (verilog-in-paren)) |
| 9013 | (modi (verilog-modi-current)) | 9115 | (modi (verilog-modi-current)) |
| 9116 | (moddecls (verilog-modi-get-decls modi)) | ||
| 9117 | (submoddecls (verilog-modi-get-decls submodi)) | ||
| 9014 | (sig-list-i (verilog-signals-not-in | 9118 | (sig-list-i (verilog-signals-not-in |
| 9015 | (verilog-modi-get-inputs submodi) | 9119 | (verilog-decls-get-inputs submoddecls) |
| 9016 | (append (verilog-modi-get-inputs modi)))) | 9120 | (append (verilog-decls-get-inputs moddecls)))) |
| 9017 | (sig-list-o (verilog-signals-not-in | 9121 | (sig-list-o (verilog-signals-not-in |
| 9018 | (verilog-modi-get-outputs submodi) | 9122 | (verilog-decls-get-outputs submoddecls) |
| 9019 | (append (verilog-modi-get-outputs modi)))) | 9123 | (append (verilog-decls-get-outputs moddecls)))) |
| 9020 | (sig-list-io (verilog-signals-not-in | 9124 | (sig-list-io (verilog-signals-not-in |
| 9021 | (verilog-modi-get-inouts submodi) | 9125 | (verilog-decls-get-inouts submoddecls) |
| 9022 | (append (verilog-modi-get-inouts modi))))) | 9126 | (append (verilog-decls-get-inouts moddecls))))) |
| 9023 | (forward-line 1) | 9127 | (forward-line 1) |
| 9024 | (when regexp | 9128 | (when regexp |
| 9025 | (setq sig-list-i (verilog-signals-matching-regexp | 9129 | (setq sig-list-i (verilog-signals-matching-regexp |
| @@ -9041,15 +9145,15 @@ same expansion will result from only extracting signals starting with i: | |||
| 9041 | (verilog-insert-indent "// End of automatics\n")) | 9145 | (verilog-insert-indent "// End of automatics\n")) |
| 9042 | (when v2k (verilog-repair-close-comma))))))) | 9146 | (when v2k (verilog-repair-close-comma))))))) |
| 9043 | 9147 | ||
| 9044 | (defun verilog-auto-sense-sigs (modi presense-sigs) | 9148 | (defun verilog-auto-sense-sigs (moddecls presense-sigs) |
| 9045 | "Return list of signals for current AUTOSENSE block." | 9149 | "Return list of signals for current AUTOSENSE block." |
| 9046 | (let* ((sigss (verilog-read-always-signals)) | 9150 | (let* ((sigss (verilog-read-always-signals)) |
| 9047 | (sig-list (verilog-signals-not-params | 9151 | (sig-list (verilog-signals-not-params |
| 9048 | (verilog-signals-not-in (verilog-alw-get-inputs sigss) | 9152 | (verilog-signals-not-in (verilog-alw-get-inputs sigss) |
| 9049 | (append (and (not verilog-auto-sense-include-inputs) | 9153 | (append (and (not verilog-auto-sense-include-inputs) |
| 9050 | (verilog-alw-get-outputs sigss)) | 9154 | (verilog-alw-get-outputs sigss)) |
| 9051 | (verilog-modi-get-consts modi) | 9155 | (verilog-decls-get-consts moddecls) |
| 9052 | (verilog-modi-get-gparams modi) | 9156 | (verilog-decls-get-gparams moddecls) |
| 9053 | presense-sigs))))) | 9157 | presense-sigs))))) |
| 9054 | sig-list)) | 9158 | sig-list)) |
| 9055 | 9159 | ||
| @@ -9116,16 +9220,17 @@ operator. (This was added to the language in part due to AUTOSENSE!) | |||
| 9116 | (or (and (goto-char start-pt) (1+ (current-column))) | 9220 | (or (and (goto-char start-pt) (1+ (current-column))) |
| 9117 | (current-indentation)))) | 9221 | (current-indentation)))) |
| 9118 | (modi (verilog-modi-current)) | 9222 | (modi (verilog-modi-current)) |
| 9223 | (moddecls (verilog-modi-get-decls modi)) | ||
| 9119 | (sig-memories (verilog-signals-memory | 9224 | (sig-memories (verilog-signals-memory |
| 9120 | (append | 9225 | (append |
| 9121 | (verilog-modi-get-regs modi) | 9226 | (verilog-decls-get-regs moddecls) |
| 9122 | (verilog-modi-get-wires modi)))) | 9227 | (verilog-decls-get-wires moddecls)))) |
| 9123 | sig-list not-first presense-sigs) | 9228 | sig-list not-first presense-sigs) |
| 9124 | ;; Read signals in always, eliminate outputs from sense list | 9229 | ;; Read signals in always, eliminate outputs from sense list |
| 9125 | (setq presense-sigs (verilog-signals-from-signame | 9230 | (setq presense-sigs (verilog-signals-from-signame |
| 9126 | (save-excursion | 9231 | (save-excursion |
| 9127 | (verilog-read-signals start-pt (point))))) | 9232 | (verilog-read-signals start-pt (point))))) |
| 9128 | (setq sig-list (verilog-auto-sense-sigs modi presense-sigs)) | 9233 | (setq sig-list (verilog-auto-sense-sigs moddecls presense-sigs)) |
| 9129 | (when sig-memories | 9234 | (when sig-memories |
| 9130 | (let ((tlen (length sig-list))) | 9235 | (let ((tlen (length sig-list))) |
| 9131 | (setq sig-list (verilog-signals-not-in sig-list sig-memories)) | 9236 | (setq sig-list (verilog-signals-not-in sig-list sig-memories)) |
| @@ -9210,7 +9315,8 @@ Typing \\[verilog-auto] will make this into: | |||
| 9210 | ;; Find beginning | 9315 | ;; Find beginning |
| 9211 | (let* ((indent-pt (current-indentation)) | 9316 | (let* ((indent-pt (current-indentation)) |
| 9212 | (modi (verilog-modi-current)) | 9317 | (modi (verilog-modi-current)) |
| 9213 | (all-list (verilog-modi-get-signals modi)) | 9318 | (moddecls (verilog-modi-get-decls modi)) |
| 9319 | (all-list (verilog-decls-get-signals moddecls)) | ||
| 9214 | sigss sig-list prereset-sigs assignment-str) | 9320 | sigss sig-list prereset-sigs assignment-str) |
| 9215 | ;; Read signals in always, eliminate outputs from reset list | 9321 | ;; Read signals in always, eliminate outputs from reset list |
| 9216 | (setq prereset-sigs (verilog-signals-from-signame | 9322 | (setq prereset-sigs (verilog-signals-from-signame |
| @@ -9290,15 +9396,17 @@ Typing \\[verilog-auto] will make this into: | |||
| 9290 | ;; Find beginning | 9396 | ;; Find beginning |
| 9291 | (let* ((indent-pt (current-indentation)) | 9397 | (let* ((indent-pt (current-indentation)) |
| 9292 | (modi (verilog-modi-current)) | 9398 | (modi (verilog-modi-current)) |
| 9399 | (moddecls (verilog-modi-get-decls modi)) | ||
| 9400 | (modsubdecls (verilog-modi-get-sub-decls modi)) | ||
| 9293 | (sig-list (verilog-signals-not-in | 9401 | (sig-list (verilog-signals-not-in |
| 9294 | (verilog-modi-get-outputs modi) | 9402 | (verilog-decls-get-outputs moddecls) |
| 9295 | (append (verilog-modi-get-wires modi) | 9403 | (append (verilog-decls-get-wires moddecls) |
| 9296 | (verilog-modi-get-regs modi) | 9404 | (verilog-decls-get-regs moddecls) |
| 9297 | (verilog-modi-get-assigns modi) | 9405 | (verilog-decls-get-assigns moddecls) |
| 9298 | (verilog-modi-get-consts modi) | 9406 | (verilog-decls-get-consts moddecls) |
| 9299 | (verilog-modi-get-gparams modi) | 9407 | (verilog-decls-get-gparams moddecls) |
| 9300 | (verilog-modi-get-sub-outputs modi) | 9408 | (verilog-subdecls-get-outputs modsubdecls) |
| 9301 | (verilog-modi-get-sub-inouts modi))))) | 9409 | (verilog-subdecls-get-inouts modsubdecls))))) |
| 9302 | (when sig-list | 9410 | (when sig-list |
| 9303 | (forward-line 1) | 9411 | (forward-line 1) |
| 9304 | (verilog-insert-indent "// Beginning of automatic tieoffs (for this module's unterminated outputs)\n") | 9412 | (verilog-insert-indent "// Beginning of automatic tieoffs (for this module's unterminated outputs)\n") |
| @@ -9371,11 +9479,13 @@ Typing \\[verilog-auto] will make this into: | |||
| 9371 | ;; Find beginning | 9479 | ;; Find beginning |
| 9372 | (let* ((indent-pt (progn (search-backward "/*") (current-column))) | 9480 | (let* ((indent-pt (progn (search-backward "/*") (current-column))) |
| 9373 | (modi (verilog-modi-current)) | 9481 | (modi (verilog-modi-current)) |
| 9482 | (moddecls (verilog-modi-get-decls modi)) | ||
| 9483 | (modsubdecls (verilog-modi-get-sub-decls modi)) | ||
| 9374 | (sig-list (verilog-signals-not-in | 9484 | (sig-list (verilog-signals-not-in |
| 9375 | (append (verilog-modi-get-inputs modi) | 9485 | (append (verilog-decls-get-inputs moddecls) |
| 9376 | (verilog-modi-get-inouts modi)) | 9486 | (verilog-decls-get-inouts moddecls)) |
| 9377 | (append (verilog-modi-get-sub-inputs modi) | 9487 | (append (verilog-subdecls-get-inputs modsubdecls) |
| 9378 | (verilog-modi-get-sub-inouts modi))))) | 9488 | (verilog-subdecls-get-inouts modsubdecls))))) |
| 9379 | (setq sig-list (verilog-signals-not-matching-regexp | 9489 | (setq sig-list (verilog-signals-not-matching-regexp |
| 9380 | sig-list verilog-auto-unused-ignore-regexp)) | 9490 | sig-list verilog-auto-unused-ignore-regexp)) |
| 9381 | (when sig-list | 9491 | (when sig-list |
| @@ -9463,14 +9573,15 @@ Typing \\[verilog-auto] will make this into: | |||
| 9463 | ;; | 9573 | ;; |
| 9464 | (indent-pt (current-indentation)) | 9574 | (indent-pt (current-indentation)) |
| 9465 | (modi (verilog-modi-current)) | 9575 | (modi (verilog-modi-current)) |
| 9576 | (moddecls (verilog-modi-get-decls modi)) | ||
| 9466 | ;; | 9577 | ;; |
| 9467 | (sig-list-consts (append (verilog-modi-get-consts modi) | 9578 | (sig-list-consts (append (verilog-decls-get-consts moddecls) |
| 9468 | (verilog-modi-get-gparams modi))) | 9579 | (verilog-decls-get-gparams moddecls))) |
| 9469 | (sig-list-all (append (verilog-modi-get-regs modi) | 9580 | (sig-list-all (append (verilog-decls-get-regs moddecls) |
| 9470 | (verilog-modi-get-outputs modi) | 9581 | (verilog-decls-get-outputs moddecls) |
| 9471 | (verilog-modi-get-inouts modi) | 9582 | (verilog-decls-get-inouts moddecls) |
| 9472 | (verilog-modi-get-inputs modi) | 9583 | (verilog-decls-get-inputs moddecls) |
| 9473 | (verilog-modi-get-wires modi))) | 9584 | (verilog-decls-get-wires moddecls))) |
| 9474 | ;; | 9585 | ;; |
| 9475 | (undecode-sig (or (assoc undecode-name sig-list-all) | 9586 | (undecode-sig (or (assoc undecode-name sig-list-all) |
| 9476 | (error "%s: Signal %s not found in design" (verilog-point-text) undecode-name))) | 9587 | (error "%s: Signal %s not found in design" (verilog-point-text) undecode-name))) |
| @@ -9617,7 +9728,9 @@ Wilson Snyder (wsnyder@wsnyder.org), and/or see http://www.veripool.com." | |||
| 9617 | (fontlocked (when (and (boundp 'font-lock-mode) | 9728 | (fontlocked (when (and (boundp 'font-lock-mode) |
| 9618 | font-lock-mode) | 9729 | font-lock-mode) |
| 9619 | (font-lock-mode nil) | 9730 | (font-lock-mode nil) |
| 9620 | t))) | 9731 | t)) |
| 9732 | ;; Cache directories; we don't write new files, so can't change | ||
| 9733 | (verilog-dir-cache-preserving t)) | ||
| 9621 | (unwind-protect | 9734 | (unwind-protect |
| 9622 | (save-excursion | 9735 | (save-excursion |
| 9623 | ;; If we're not in verilog-mode, change syntax table so parsing works right | 9736 | ;; If we're not in verilog-mode, change syntax table so parsing works right |
| @@ -9628,13 +9741,15 @@ Wilson Snyder (wsnyder@wsnyder.org), and/or see http://www.veripool.com." | |||
| 9628 | (verilog-auto-reeval-locals) | 9741 | (verilog-auto-reeval-locals) |
| 9629 | (verilog-read-auto-lisp (point-min) (point-max)) | 9742 | (verilog-read-auto-lisp (point-min) (point-max)) |
| 9630 | (verilog-getopt-flags) | 9743 | (verilog-getopt-flags) |
| 9744 | ;; From here on out, we can cache anything we read from disk | ||
| 9745 | (verilog-preserve-dir-cache | ||
| 9631 | ;; These two may seem obvious to do always, but on large includes it can be way too slow | 9746 | ;; These two may seem obvious to do always, but on large includes it can be way too slow |
| 9632 | (when verilog-auto-read-includes | 9747 | (when verilog-auto-read-includes |
| 9633 | (verilog-read-includes) | 9748 | (verilog-read-includes) |
| 9634 | (verilog-read-defines nil nil t)) | 9749 | (verilog-read-defines nil nil t)) |
| 9635 | ;; This particular ordering is important | 9750 | ;; This particular ordering is important |
| 9636 | ;; INST: Lower modules correct, no internal dependencies, FIRST | 9751 | ;; INST: Lower modules correct, no internal dependencies, FIRST |
| 9637 | (verilog-preserve-cache | 9752 | (verilog-preserve-modi-cache |
| 9638 | ;; Clear existing autos else we'll be screwed by existing ones | 9753 | ;; Clear existing autos else we'll be screwed by existing ones |
| 9639 | (verilog-delete-auto) | 9754 | (verilog-delete-auto) |
| 9640 | ;; Injection if appropriate | 9755 | ;; Injection if appropriate |
| @@ -9643,9 +9758,9 @@ Wilson Snyder (wsnyder@wsnyder.org), and/or see http://www.veripool.com." | |||
| 9643 | (verilog-inject-sense) | 9758 | (verilog-inject-sense) |
| 9644 | (verilog-inject-arg)) | 9759 | (verilog-inject-arg)) |
| 9645 | ;; | 9760 | ;; |
| 9646 | (verilog-auto-search-do "/*AUTOINSTPARAM*/" 'verilog-auto-inst-param) | 9761 | (verilog-auto-re-search-do "/\\*AUTOINSTPARAM\\*/" 'verilog-auto-inst-param) |
| 9647 | (verilog-auto-search-do "/*AUTOINST*/" 'verilog-auto-inst) | 9762 | (verilog-auto-re-search-do "/\\*AUTOINST\\*/" 'verilog-auto-inst) |
| 9648 | (verilog-auto-search-do ".*" 'verilog-auto-star) | 9763 | (verilog-auto-re-search-do "\\.\\*" 'verilog-auto-star) |
| 9649 | ;; Doesn't matter when done, but combine it with a common changer | 9764 | ;; Doesn't matter when done, but combine it with a common changer |
| 9650 | (verilog-auto-re-search-do "/\\*\\(AUTOSENSE\\|AS\\)\\*/" 'verilog-auto-sense) | 9765 | (verilog-auto-re-search-do "/\\*\\(AUTOSENSE\\|AS\\)\\*/" 'verilog-auto-sense) |
| 9651 | (verilog-auto-re-search-do "/\\*AUTORESET\\*/" 'verilog-auto-reset) | 9766 | (verilog-auto-re-search-do "/\\*AUTORESET\\*/" 'verilog-auto-reset) |
| @@ -9665,19 +9780,19 @@ Wilson Snyder (wsnyder@wsnyder.org), and/or see http://www.veripool.com." | |||
| 9665 | '(lambda () (verilog-auto-inout t))) | 9780 | '(lambda () (verilog-auto-inout t))) |
| 9666 | (verilog-auto-re-search-do "/\\*AUTOINOUT\\*/" 'verilog-auto-inout) | 9781 | (verilog-auto-re-search-do "/\\*AUTOINOUT\\*/" 'verilog-auto-inout) |
| 9667 | ;; Then tie off those in/outs | 9782 | ;; Then tie off those in/outs |
| 9668 | (verilog-auto-search-do "/*AUTOTIEOFF*/" 'verilog-auto-tieoff) | 9783 | (verilog-auto-re-search-do "/\\*AUTOTIEOFF\\*/" 'verilog-auto-tieoff) |
| 9669 | ;; Wires/regs must be after inputs/outputs | 9784 | ;; Wires/regs must be after inputs/outputs |
| 9670 | (verilog-auto-search-do "/*AUTOWIRE*/" 'verilog-auto-wire) | 9785 | (verilog-auto-re-search-do "/\\*AUTOWIRE\\*/" 'verilog-auto-wire) |
| 9671 | (verilog-auto-search-do "/*AUTOREG*/" 'verilog-auto-reg) | 9786 | (verilog-auto-re-search-do "/\\*AUTOREG\\*/" 'verilog-auto-reg) |
| 9672 | (verilog-auto-search-do "/*AUTOREGINPUT*/" 'verilog-auto-reg-input) | 9787 | (verilog-auto-re-search-do "/\\*AUTOREGINPUT\\*/" 'verilog-auto-reg-input) |
| 9673 | ;; outputevery needs AUTOOUTPUTs done first | 9788 | ;; outputevery needs AUTOOUTPUTs done first |
| 9674 | (verilog-auto-search-do "/*AUTOOUTPUTEVERY*/" 'verilog-auto-output-every) | 9789 | (verilog-auto-re-search-do "/\\*AUTOOUTPUTEVERY\\*/" 'verilog-auto-output-every) |
| 9675 | ;; After we've created all new variables | 9790 | ;; After we've created all new variables |
| 9676 | (verilog-auto-search-do "/*AUTOUNUSED*/" 'verilog-auto-unused) | 9791 | (verilog-auto-re-search-do "/\\*AUTOUNUSED\\*/" 'verilog-auto-unused) |
| 9677 | ;; Must be after all inputs outputs are generated | 9792 | ;; Must be after all inputs outputs are generated |
| 9678 | (verilog-auto-search-do "/*AUTOARG*/" 'verilog-auto-arg) | 9793 | (verilog-auto-re-search-do "/\\*AUTOARG\\*/" 'verilog-auto-arg) |
| 9679 | ;; Fix line numbers (comments only) | 9794 | ;; Fix line numbers (comments only) |
| 9680 | (verilog-auto-templated-rel)) | 9795 | (verilog-auto-templated-rel))) |
| 9681 | ;; | 9796 | ;; |
| 9682 | (run-hooks 'verilog-auto-hook) | 9797 | (run-hooks 'verilog-auto-hook) |
| 9683 | ;; | 9798 | ;; |
| @@ -9687,11 +9802,11 @@ Wilson Snyder (wsnyder@wsnyder.org), and/or see http://www.veripool.com." | |||
| 9687 | (cond ((and oldbuf (equal oldbuf (buffer-string))) | 9802 | (cond ((and oldbuf (equal oldbuf (buffer-string))) |
| 9688 | (set-buffer-modified-p nil) | 9803 | (set-buffer-modified-p nil) |
| 9689 | (unless noninteractive (message "Updating AUTOs...done (no changes)"))) | 9804 | (unless noninteractive (message "Updating AUTOs...done (no changes)"))) |
| 9690 | (t (unless noninteractive (message "Updating AUTOs...done"))))) | 9805 | (t (unless noninteractive (message "Updating AUTOs...done")))))) |
| 9691 | ;; Unwind forms | 9806 | ;; Unwind forms |
| 9692 | (progn | 9807 | (progn |
| 9693 | ;; Restore font-lock | 9808 | ;; Restore font-lock |
| 9694 | (when fontlocked (font-lock-mode t)))))) | 9809 | (when fontlocked (font-lock-mode t))))) |
| 9695 | 9810 | ||
| 9696 | 9811 | ||
| 9697 | ;; | 9812 | ;; |