changeset 93340:971b85f6050d

* progmodes/verilog-mode.el (verilog-auto-inout-module): Add optional regular expression to AUTOINOUTMODULE. (verilog-inject-auto, verilog-auto-arg, verilog-auto-inst) (verilog-auto-inst-param, verilog-auto-reg) (verilog-auto-reg-input, verilog-auto-wire, verilog-auto-output) (verilog-auto-output-every, verilog-auto-input) (verilog-auto-inout, verilog-auto-sense, verilog-auto-tieoff) (verilog-auto-unused, verilog-auto): Update documentation to use more obvious instance module names versus cell names.
author Dan Nicolaescu <dann@ics.uci.edu>
date Fri, 28 Mar 2008 15:47:25 +0000
parents ed66b85b0c05
children fba5389c3d1e
files lisp/ChangeLog lisp/progmodes/verilog-mode.el
diffstat 2 files changed, 170 insertions(+), 119 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Mar 28 11:09:54 2008 +0000
+++ b/lisp/ChangeLog	Fri Mar 28 15:47:25 2008 +0000
@@ -1,3 +1,15 @@
+2008-03-28  Wilson Snyder  <wsnyder@wsnyder.org>
+
+	* progmodes/verilog-mode.el (verilog-auto-inout-module):
+	Add optional regular expression to AUTOINOUTMODULE.
+	(verilog-inject-auto, verilog-auto-arg, verilog-auto-inst)
+	(verilog-auto-inst-param, verilog-auto-reg)
+	(verilog-auto-reg-input, verilog-auto-wire, verilog-auto-output)
+	(verilog-auto-output-every, verilog-auto-input)
+	(verilog-auto-inout, verilog-auto-sense, verilog-auto-tieoff)
+	(verilog-auto-unused, verilog-auto): Update documentation to use
+	more obvious instance module names versus cell names.
+
 2008-03-28  Jan Djärv  <jan.h.d@swipnet.se>
 
 	* progmodes/compile.el (compilation-mode-tool-bar-map): Only enable
--- a/lisp/progmodes/verilog-mode.el	Fri Mar 28 11:09:54 2008 +0000
+++ b/lisp/progmodes/verilog-mode.el	Fri Mar 28 15:47:25 2008 +0000
@@ -6354,7 +6354,7 @@
 One work around for this problem is to manually create // Inputs and //
 Outputs comments above subcell signals, for example:
 
-	module1 instance1x (
+	module ModuleName (
 	    // Outputs
 	    .out (out),
 	    // Inputs
@@ -7705,29 +7705,31 @@
 
 For example:
 
-	module ex_inject (i, o);
+	module ExampInject (i, o);
 	  input i;
 	  input j;
 	  output o;
 	  always @ (i or j)
 	     o = i | j;
-	  cell cell (.foobar(baz),
-		     .j(j));
+	  InstModule instName
+            (.foobar(baz),
+	     j(j));
 	endmodule
 
 Typing \\[verilog-inject-auto] will make this into:
 
-	module ex_inject (i, o/*AUTOARG*/
+	module ExampInject (i, o/*AUTOARG*/
 	  // Inputs
 	  j);
 	  input i;
 	  output o;
 	  always @ (/*AS*/i or j)
 	     o = i | j;
-	  cell cell (.foobar(baz),
-		     /*AUTOINST*/
-		     // Outputs
-		     .j(j));
+	  InstModule instName
+            (.foobar(baz),
+	     /*AUTOINST*/
+	     // Outputs
+	     j(j));
 	endmodule"
   (interactive)
   (verilog-auto t))
@@ -7893,14 +7895,14 @@
 
 For example:
 
-	module ex_arg (/*AUTOARG*/);
+	module ExampArg (/*AUTOARG*/);
 	  input i;
 	  output o;
 	endmodule
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_arg (/*AUTOARG*/
+	module ExampArg (/*AUTOARG*/
 	  // Outputs
 	  o,
 	  // Inputs
@@ -8082,9 +8084,9 @@
 
   SystemVerilog multidimensional input/output has only experimental support.
 
-For example, first take the submodule inst.v:
-
-	module inst (o,i)
+For example, first take the submodule InstModule.v:
+
+	module InstModule (o,i)
 	   output [31:0] o;
 	   input i;
 	   wire [31:0] o = {32{i}};
@@ -8092,22 +8094,24 @@
 
 This is then used in a upper level module:
 
-	module ex_inst (o,i)
+	module ExampInst (o,i)
 	   output o;
 	   input i;
-	   inst inst (/*AUTOINST*/);
+	   InstModule instName
+	     (/*AUTOINST*/);
 	endmodule
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_inst (o,i)
+	module ExampInst (o,i)
 	   output o;
 	   input i;
-	   inst inst (/*AUTOINST*/
-		      // Outputs
-		      .ov			(ov[31:0]),
-		      // Inputs
-		      .i			(i));
+	   InstModule instName
+	     (/*AUTOINST*/
+	      // Outputs
+	      .ov	(ov[31:0]),
+	      // Inputs
+	      .i	(i));
 	endmodule
 
 Where the list of inputs and outputs came from the inst module.
@@ -8129,11 +8133,12 @@
   you have the appropriate // Input or // Output comment, and exactly the
   same line formatting as AUTOINST itself uses.
 
-	inst inst (// Inputs
-		   .i		(my_i_dont_mess_with_it),
-		   /*AUTOINST*/
-		   // Outputs
-		   .ov		(ov[31:0]));
+	InstModule instName
+          (// Inputs
+	   .i		(my_i_dont_mess_with_it),
+	   /*AUTOINST*/
+	   // Outputs
+	   .ov		(ov[31:0]));
 
 
 Templates:
@@ -8141,7 +8146,7 @@
   For multiple instantiations based upon a single template, create a
   commented out template:
 
-	/* instantiating_module_name AUTO_TEMPLATE (
+	/* InstModule AUTO_TEMPLATE (
 		.sig3	(sigz[]),
 		);
 	*/
@@ -8170,15 +8175,15 @@
 
   For example:
 
-	/* psm_mas AUTO_TEMPLATE (
+	/* InstModule AUTO_TEMPLATE (
 		.ptl_bus	(ptl_busnew[]),
 		);
 	*/
-	psm_mas ms2m (/*AUTOINST*/);
+	InstModule ms2m (/*AUTOINST*/);
 
   Typing \\[verilog-auto] will make this into:
 
-	psm_mas ms2m (/*AUTOINST*/
+	InstModule ms2m (/*AUTOINST*/
 	    // Outputs
 	    .NotInTemplate	(NotInTemplate),
 	    .ptl_bus		(ptl_busnew[3:0]),  // Templated
@@ -8189,7 +8194,7 @@
   It is common to instantiate a cell multiple times, so templates make it
   trivial to substitute part of the cell name into the connection name.
 
-	/* cell_type AUTO_TEMPLATE <optional \"REGEXP\"> (
+	/* InstName AUTO_TEMPLATE <optional \"REGEXP\"> (
 		.sig1	(sigx[@]),
 		.sig2	(sigy[@\"(% (+ 1 @) 4)\"]),
 		);
@@ -8211,16 +8216,16 @@
 
   For example:
 
-	/* psm_mas AUTO_TEMPLATE (
+	/* InstModule AUTO_TEMPLATE (
 		.ptl_mapvalidx		(ptl_mapvalid[@]),
 		.ptl_mapvalidp1x	(ptl_mapvalid[@\"(% (+ 1 @) 4)\"]),
 		);
 	*/
-	psm_mas ms2m (/*AUTOINST*/);
+	InstModule ms2m (/*AUTOINST*/);
 
   Typing \\[verilog-auto] will make this into:
 
-	psm_mas ms2m (/*AUTOINST*/
+	InstModule ms2m (/*AUTOINST*/
 	    // Outputs
 	    .ptl_mapvalidx		(ptl_mapvalid[2]),
 	    .ptl_mapvalidp1x		(ptl_mapvalid[3]));
@@ -8229,21 +8234,21 @@
 
   Alternatively, using a regular expression for @:
 
-	/* psm_mas AUTO_TEMPLATE \"_\\([a-z]+\\)\" (
+	/* InstModule AUTO_TEMPLATE \"_\\([a-z]+\\)\" (
 		.ptl_mapvalidx		(@_ptl_mapvalid),
 		.ptl_mapvalidp1x	(ptl_mapvalid_@),
 		);
 	*/
-	psm_mas ms2_FOO (/*AUTOINST*/);
-	psm_mas ms2_BAR (/*AUTOINST*/);
+	InstModule ms2_FOO (/*AUTOINST*/);
+	InstModule ms2_BAR (/*AUTOINST*/);
 
   Typing \\[verilog-auto] will make this into:
 
-	psm_mas ms2_FOO (/*AUTOINST*/
+	InstModule ms2_FOO (/*AUTOINST*/
 	    // Outputs
 	    .ptl_mapvalidx		(FOO_ptl_mapvalid),
 	    .ptl_mapvalidp1x		(ptl_mapvalid_FOO));
-	psm_mas ms2_BAR (/*AUTOINST*/
+	InstModule ms2_BAR (/*AUTOINST*/
 	    // Outputs
 	    .ptl_mapvalidx		(BAR_ptl_mapvalid),
 	    .ptl_mapvalidp1x		(ptl_mapvalid_BAR));
@@ -8289,8 +8294,8 @@
 	vl-width       Width of the input/output port ('3' for [2:0]).
                        May be a (...) expression if bits isn't a constant.
 	vl-dir         Direction of the pin input/output/inout.
-	vl-cell-type   Module name/type of the cell ('psm_mas').
-	vl-cell-name   Instance name of the cell ('ms2m').
+	vl-cell-type   Module name/type of the cell ('InstModule').
+	vl-cell-name   Instance name of the cell ('instName').
 
   Normal Lisp variables may be used in expressions.  See
   `verilog-read-defines' which can set vh-{definename} variables for use
@@ -8400,29 +8405,29 @@
 See \\[verilog-auto-inst] for limitations, and templates to customize the
 output.
 
-For example, first take the submodule inst.v:
-
-	module inst (o,i)
+For example, first take the submodule InstModule.v:
+
+	module InstModule (o,i)
 	   parameter PAR;
 	endmodule
 
 This is then used in a upper level module:
 
-	module ex_inst (o,i)
+	module ExampInst (o,i)
 	   parameter PAR;
-	   inst #(/*AUTOINSTPARAM*/)
-		inst (/*AUTOINST*/);
+	   InstModule #(/*AUTOINSTPARAM*/)
+		instName (/*AUTOINST*/);
 	endmodule
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_inst (o,i)
+	module ExampInst (o,i)
 	   output o;
 	   input i;
-	   inst (/*AUTOINSTPARAM*/
-		 // Parameters
-		 .PAR			(PAR));
-		inst (/*AUTOINST*/);
+	   InstModule #(/*AUTOINSTPARAM*/
+		        // Parameters
+		        .PAR	(PAR));
+		instName (/*AUTOINST*/);
 	endmodule
 
 Where the list of parameter connections come from the inst module.
@@ -8506,7 +8511,7 @@
 
 An example:
 
-	module ex_reg (o,i)
+	module ExampReg (o,i)
 	   output o;
 	   input i;
 	   /*AUTOREG*/
@@ -8515,12 +8520,12 @@
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_reg (o,i)
+	module ExampReg (o,i)
 	   output o;
 	   input i;
 	   /*AUTOREG*/
 	   // Beginning of automatic regs (for this module's undeclared outputs)
-	   reg			o;
+	   reg		o;
 	   // End of automatics
 	   always o = i;
 	endmodule"
@@ -8557,27 +8562,29 @@
 
 An example (see `verilog-auto-inst' for what else is going on here):
 
-	module ex_reg_input (o,i)
+	module ExampRegInput (o,i)
 	   output o;
 	   input i;
 	   /*AUTOREGINPUT*/
-           inst inst (/*AUTOINST*/);
+           InstModule instName
+             (/*AUTOINST*/);
 	endmodule
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_reg_input (o,i)
+	module ExampRegInput (o,i)
 	   output o;
 	   input i;
 	   /*AUTOREGINPUT*/
 	   // Beginning of automatic reg inputs (for undeclared ...
-	   reg [31:0]		iv;		// From inst of inst.v
+	   reg [31:0]		iv;	// From inst of inst.v
 	   // End of automatics
-	   inst inst (/*AUTOINST*/
-		      // Outputs
-		      .o			(o[31:0]),
-		      // Inputs
-		      .iv			(iv));
+	   InstModule instName
+             (/*AUTOINST*/
+	      // Outputs
+	      .o		(o[31:0]),
+	      // Inputs
+	      .iv		(iv));
 	endmodule"
   (save-excursion
     ;; Point must be at insertion point.
@@ -8615,27 +8622,29 @@
 
 An example (see `verilog-auto-inst' for what else is going on here):
 
-	module ex_wire (o,i)
+	module ExampWire (o,i)
 	   output o;
 	   input i;
 	   /*AUTOWIRE*/
-           inst inst (/*AUTOINST*/);
+           InstModule instName
+	     (/*AUTOINST*/);
 	endmodule
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_wire (o,i)
+	module ExampWire (o,i)
 	   output o;
 	   input i;
 	   /*AUTOWIRE*/
 	   // Beginning of automatic wires
 	   wire [31:0]		ov;	// From inst of inst.v
 	   // End of automatics
-	   inst inst (/*AUTOINST*/
-		      // Outputs
-		      .ov	(ov[31:0]),
-		      // Inputs
-		      .i	(i));
+	   InstModule instName
+	     (/*AUTOINST*/
+	      // Outputs
+	      .ov	(ov[31:0]),
+	      // Inputs
+	      .i	(i));
 	   wire o = | ov;
 	endmodule"
   (save-excursion
@@ -8681,25 +8690,27 @@
 
 An example (see `verilog-auto-inst' for what else is going on here):
 
-	module ex_output (ov,i)
+	module ExampOutput (ov,i)
 	   input i;
 	   /*AUTOOUTPUT*/
-	   inst inst (/*AUTOINST*/);
+	   InstModule instName
+	     (/*AUTOINST*/);
 	endmodule
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_output (ov,i)
+	module ExampOutput (ov,i)
 	   input i;
 	   /*AUTOOUTPUT*/
 	   // Beginning of automatic outputs (from unused autoinst outputs)
-	   output [31:0]	ov;			// From inst of inst.v
+	   output [31:0]	ov;	// From inst of inst.v
 	   // End of automatics
-	   inst inst (/*AUTOINST*/
-		      // Outputs
-		      .ov			(ov[31:0]),
-		      // Inputs
-		      .i			(i));
+	   InstModule instName
+	     (/*AUTOINST*/
+	      // Outputs
+	      .ov	(ov[31:0]),
+	      // Inputs
+	      .i	(i));
 	endmodule
 
 You may also provide an optional regular expression, in which case only
@@ -8743,7 +8754,7 @@
 
 An example:
 
-	module ex_output_every (o,i,tempa,tempb)
+	module ExampOutputEvery (o,i,tempa,tempb)
 	   output o;
 	   input i;
 	   /*AUTOOUTPUTEVERY*/
@@ -8754,13 +8765,13 @@
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_output_every (o,i,tempa,tempb)
+	module ExampOutputEvery (o,i,tempa,tempb)
 	   output o;
 	   input i;
 	   /*AUTOOUTPUTEVERY*/
 	   // Beginning of automatic outputs (every signal)
-	   output		tempb;
-	   output		tempa;
+	   output	tempb;
+	   output	tempa;
 	   // End of automatics
 	   wire tempa = i;
 	   wire tempb = tempa;
@@ -8805,25 +8816,27 @@
 
 An example (see `verilog-auto-inst' for what else is going on here):
 
-	module ex_input (ov,i)
+	module ExampInput (ov,i)
 	   output [31:0] ov;
 	   /*AUTOINPUT*/
-	   inst inst (/*AUTOINST*/);
+	   InstModule instName
+	     (/*AUTOINST*/);
 	endmodule
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_input (ov,i)
+	module ExampInput (ov,i)
 	   output [31:0] ov;
 	   /*AUTOINPUT*/
 	   // Beginning of automatic inputs (from unused autoinst inputs)
-	   input		i;			// From inst of inst.v
+	   input	i;	// From inst of inst.v
 	   // End of automatics
-	   inst inst (/*AUTOINST*/
-		      // Outputs
-		      .ov			(ov[31:0]),
-		      // Inputs
-		      .i			(i));
+	   InstModule instName
+	     (/*AUTOINST*/
+	      // Outputs
+	      .ov	(ov[31:0]),
+	      // Inputs
+	      .i	(i));
 	endmodule
 
 You may also provide an optional regular expression, in which case only
@@ -8881,25 +8894,27 @@
 
 An example (see `verilog-auto-inst' for what else is going on here):
 
-	module ex_inout (ov,i)
+	module ExampInout (ov,i)
 	   input i;
 	   /*AUTOINOUT*/
-	   inst inst (/*AUTOINST*/);
+	   InstModule instName
+	     (/*AUTOINST*/);
 	endmodule
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_inout (ov,i)
+	module ExampInout (ov,i)
 	   input i;
 	   /*AUTOINOUT*/
 	   // Beginning of automatic inouts (from unused autoinst inouts)
-	   inout [31:0]	ov;			// From inst of inst.v
+	   inout [31:0]	ov;	// From inst of inst.v
 	   // End of automatics
-	   inst inst (/*AUTOINST*/
-		      // Inouts
-		      .ov			(ov[31:0]),
-		      // Inputs
-		      .i			(i));
+	   InstModule instName
+	     (/*AUTOINST*/
+	      // Inouts
+	      .ov	(ov[31:0]),
+	      // Inputs
+	      .i	(i));
 	endmodule
 
 You may also provide an optional regular expression, in which case only
@@ -8956,11 +8971,11 @@
 
 An example:
 
-	module ex_shell (/*AUTOARG*/)
-	   /*AUTOINOUTMODULE(\"ex_main\")*/
+	module ExampShell (/*AUTOARG*/)
+	   /*AUTOINOUTMODULE(\"ExampMain\")*/
 	endmodule
 
-	module ex_main (i,o,io)
+	module ExampMain (i,o,io)
           input i;
           output o;
           inout io;
@@ -8968,16 +8983,25 @@
 
 Typing \\[verilog-auto] will make this into:
 
-	module ex_shell (/*AUTOARG*/i,o,io)
-	   /*AUTOINOUTMODULE(\"ex_main\")*/
+	module ExampShell (/*AUTOARG*/i,o,io)
+	   /*AUTOINOUTMODULE(\"ExampMain\")*/
            // Beginning of automatic in/out/inouts (from specific module)
            input i;
            output o;
            inout io;
 	   // End of automatics
-	endmodule"
+	endmodule
+
+You may also provide an optional regular expression, in which case only
+signals matching the regular expression will be included.  For example the
+same expansion will result from only extracting signals starting with i:
+
+	   /*AUTOINOUTMODULE(\"ExampMain\",\"^i\")*/"
   (save-excursion
-    (let* ((submod (car (verilog-read-auto-params 1))) submodi)
+    (let* ((params (verilog-read-auto-params 1 2))
+	   (submod (nth 0 params))
+	   (regexp (nth 1 params))
+	   submodi)
       ;; Lookup position, etc of co-module
       ;; Note this may raise an error
       (when (setq submodi (verilog-modi-lookup submod t))
@@ -8994,6 +9018,13 @@
 			     (verilog-modi-get-inouts submodi)
 			     (append (verilog-modi-get-inouts modi)))))
 	  (forward-line 1)
+	  (when regexp
+	    (setq sig-list-i  (verilog-signals-matching-regexp
+			       sig-list-i regexp)
+		  sig-list-o  (verilog-signals-matching-regexp
+			       sig-list-o regexp)
+		  sig-list-io (verilog-signals-matching-regexp
+			       sig-list-io regexp)))
 	  (when v2k (verilog-repair-open-comma))
 	  (when (or sig-list-i sig-list-o sig-list-io)
 	    (verilog-insert-indent "// Beginning of automatic in/out/inouts (from specific module)\n")
@@ -9052,7 +9083,7 @@
 
 An example:
 
-	   always @ (/*AUTOSENSE*/) begin
+	   always @ (/*AS*/) begin
 	      /* AUTO_CONSTANT (`constant) */
 	      outin = ina | inb | `constant;
 	      out = outin;
@@ -9060,10 +9091,18 @@
 
 Typing \\[verilog-auto] will make this into:
 
-	   always @ (/*AUTOSENSE*/ina or inb) begin
+	   always @ (/*AS*/ina or inb) begin
 	      /* AUTO_CONSTANT (`constant) */
 	      outin = ina | inb | `constant;
 	      out = outin;
+	   end
+
+Note in Verilog 2001, you can often get the same result from the new @*
+operator.  (This was added to the language in part due to AUTOSENSE!)
+
+	   always @* begin
+	      outin = ina | inb | `constant;
+	      out = outin;
 	   end"
   (save-excursion
     ;; Find beginning
@@ -9219,7 +9258,7 @@
 
 An example of making a stub for another module:
 
-    module FooStub (/*AUTOINST*/);
+    module ExampStub (/*AUTOINST*/);
 	/*AUTOINOUTMODULE(\"Foo\")*/
         /*AUTOTIEOFF*/
         // verilator lint_off UNUSED
@@ -9231,7 +9270,7 @@
 
 Typing \\[verilog-auto] will make this into:
 
-    module FooStub (/*AUTOINST*/...);
+    module ExampStub (/*AUTOINST*/...);
 	/*AUTOINOUTMODULE(\"Foo\")*/
         // Beginning of autotieoff
         output [2:0] foo;
@@ -9300,8 +9339,8 @@
 
 An example of making a stub for another module:
 
-    module FooStub (/*AUTOINST*/);
-	/*AUTOINOUTMODULE(\"Foo\")*/
+    module ExampStub (/*AUTOINST*/);
+	/*AUTOINOUTMODULE(\"Examp\")*/
         /*AUTOTIEOFF*/
         // verilator lint_off UNUSED
         wire _unused_ok = &{1'b0,
@@ -9524,12 +9563,12 @@
 called before and after this function, respectively.
 
 For example:
-	module (/*AUTOARG*/)
+	module ModuleName (/*AUTOARG*/)
 	/*AUTOINPUT*/
 	/*AUTOOUTPUT*/
 	/*AUTOWIRE*/
 	/*AUTOREG*/
-	somesub sub #(/*AUTOINSTPARAM*/) (/*AUTOINST*/);
+	InstMod instName #(/*AUTOINSTPARAM*/) (/*AUTOINST*/);
 
 You can also update the AUTOs from the shell using:
 	emacs --batch  <filenames.v>  -f verilog-batch-auto