need help with autoinst templates / parameters with (x)emacs

U

unfrostedpoptart

Guest
Hi all.

I have a question about using (x)emacs verilog-mode. Specifically, I'm
trying to use AUTOINST with templates on a module that has
parametrized port widths. If I get this working, it will save me an
immense amount of typing (and correcting)! The template works, but it
doesn't seem to pick up the parameter value from the instantiation.

Here's my sub module (actually, just the ports, which is all that
matters):

module testmux();
# (parameter WIDTH = 32)
(
input wire [2:0] /* synopsys enum cur_info */ sel,
input wire [WIDTH-1:0] a, b, c,
output reg [WIDTH-1:0] out
);
endmodule // testmux


Here's the module that instantiates it:

module top_test();

/*AUTOWIRE*/

/* testmux AUTO_TEMPLATE "testmux_\(.*\)" (
.a (@_a[]),
.b (@_b[]),
.c (@_c[]),
.out (@[]),
);
*/

testmux #(.WIDTH(16)) testmux_boo (/*AUTOINST*/);

testmux testmux_defaultwidth (/*AUTOINST*/);

endmodule // top_test


When I expand autos, it becomes this:

module top_test();

/*AUTOWIRE*/
// Beginning of automatic wires (for undeclared instantiated-module
outputs)
wire [WIDTH-1:0] boo; // From testmux_boo of testmux.v
wire [WIDTH-1:0] defaultwidth; // From testmux_defaultwidth of
testmux.v
// End of automatics

/* testmux AUTO_TEMPLATE "testmux_\(.*\)" (
.a (@_a[]),
.b (@_b[]),
.c (@_c[]),
.out (@[]),
);
*/

testmux #(.WIDTH(16)) testmux_boo (/*AUTOINST*/
// Outputs
.out (boo[WIDTH-1:0]), // Templated
// Inputs
.sel (sel[2:0]),
.a (boo_a[WIDTH-1:0]), // Templated
.b (boo_b[WIDTH-1:0]), // Templated
.c (boo_c[WIDTH-1:0])); // Templated

testmux testmux_defaultwidth (/*AUTOINST*/
// Outputs
.out (defaultwidth[WIDTH-1:0]), // Templated
// Inputs
.sel (sel[2:0]),
.a (defaultwidth_a[WIDTH-1:0]), // Templated
.b (defaultwidth_b[WIDTH-1:0]), // Templated
.c (defaultwidth_c[WIDTH-1:0])); // Templated

endmodule // top_test


The problem is that it's not substituting the value of the parameter
WIDTH. I'm so close, yet so far... Can anyone help with this?

Many thanks in advance!

David
 
On Jun 21, 3:57 pm, unfrostedpoptart <da...@therogoffs.com> wrote:
Hi all.

I have a question about using (x)emacs verilog-mode. Specifically, I'm
trying to use AUTOINST with templates on a module that has
parametrized port widths.  If I get this working, it will save me an
immense amount of typing (and correcting)! The template works, but it
doesn't seem to pick up the parameter value from the instantiation.

Here's my sub module (actually, just the ports, which is all that
matters):

module  testmux();
   # (parameter WIDTH = 32)
   (
    input wire [2:0]     /* synopsys enum cur_info */ sel,
    input wire [WIDTH-1:0] a, b, c,
    output reg [WIDTH-1:0] out
    );
endmodule // testmux

Here's the module that instantiates it:

module  top_test();

   /*AUTOWIRE*/

   /* testmux AUTO_TEMPLATE "testmux_\(.*\)" (
    .a (@_a[]),
    .b (@_b[]),
    .c (@_c[]),
    .out (@[]),
    );
    */

   testmux #(.WIDTH(16)) testmux_boo (/*AUTOINST*/);

   testmux  testmux_defaultwidth (/*AUTOINST*/);

endmodule // top_test

When I expand autos, it becomes this:

module  top_test();

   /*AUTOWIRE*/
   // Beginning of automatic wires (for undeclared instantiated-module
outputs)
   wire [WIDTH-1:0]     boo;                    // From testmux_boo of testmux.v
   wire [WIDTH-1:0]     defaultwidth;           // From testmux_defaultwidth of
testmux.v
   // End of automatics

   /* testmux AUTO_TEMPLATE "testmux_\(.*\)" (
    .a (@_a[]),
    .b (@_b[]),
    .c (@_c[]),
    .out (@[]),
    );
    */

   testmux #(.WIDTH(16)) testmux_boo (/*AUTOINST*/
                                      // Outputs
                                      .out              (boo[WIDTH-1:0]), // Templated
                                      // Inputs
                                      .sel              (sel[2:0]),
                                      .a                (boo_a[WIDTH-1:0]), // Templated
                                      .b                (boo_b[WIDTH-1:0]), // Templated
                                      .c                (boo_c[WIDTH-1:0])); // Templated

   testmux  testmux_defaultwidth (/*AUTOINST*/
                                  // Outputs
                                  .out                  (defaultwidth[WIDTH-1:0]), // Templated
                                  // Inputs
                                  .sel                  (sel[2:0]),
                                  .a                    (defaultwidth_a[WIDTH-1:0]), // Templated
                                  .b                    (defaultwidth_b[WIDTH-1:0]), // Templated
                                  .c                    (defaultwidth_c[WIDTH-1:0])); // Templated

endmodule // top_test

The problem is that it's not substituting the value of the parameter
WIDTH. I'm so close, yet so far...  Can anyone help with this?

Many thanks in advance!

 David
While I can't help you with your problem, I'm very happy using
yasnippet for saving typing on situations like you described.
http://code.google.com/p/yasnippet/

HTH,
weber
 

Welcome to EDABoard.com

Sponsor

Back
Top