• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Mixed-Signal Design
  3. Cadence Maestro - AMS Simulation with Verilog AMS file

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 64
  • Views 5287
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Cadence Maestro - AMS Simulation with Verilog AMS file

Devin Atkin
Devin Atkin over 2 years ago

I'm attempting to make a test input for my design, it's supposed to be switching between 10 different outputs so that I can look at them in simulation and analyze them afterwards with MATLAB or python and recover the inputs to try and get a better idea of how my design as a whole is going to perform. I'm trying to simulate this before adding it to the main design so I can confirm that I know all the settings. I hit run and I get the following error. 

animated_count I2 (.light( out ), .CLK( CLK ));
|
ncelab: *E,CUVPOM (./netlist.vams,59|24): Port name 'light' is invalid or has multiple connections.

I've tried a number of things and while I did find an old post that seemed similar I wasn't able to fix it. 

My top code is below alongside an image of my testbench. I've been banging my head into the table for a day and I've spoken with two separate individuals with no progress, so I know as soon as I post this I'll either solve it myself or hopefully be corrected for some dumb mistake on my part committing the cardinal sin of being wrong on the internet. The zero through nine modules are just very dumb modules which simple have an 8x8 array defined with a zero through eight. I'd originally tried to load from text files but ran into a bug in the version of the software I have installed. I've already simulated this and gotten reasonable looking results through command line now I'm just trying to setup a similar simulation through the GUI so I can work in a more comfortable environment. 

`include "constants.vams"
`include "disciplines.vams"

`timescale 1ns/1ps

module animated_count (CLK,light[0:63]);
input CLK;
output [0:63] light;

electrical [0:63] light;
wire CLK;

electrical gnd;
ground gnd;

electrical [0:63] light_zero;
electrical [0:63] light_one;
electrical [0:63] light_two;
electrical [0:63] light_three;
electrical [0:63] light_four;
electrical [0:63] light_five;
electrical [0:63] light_six;
electrical [0:63] light_seven;
electrical [0:63] light_eight;
electrical [0:63] light_nine;

zero z(light_zero);
one o(light_one);
two t(light_two);
three th(light_three);
four fo(light_four);
five fi(light_five);
six si(light_six);
seven se(light_seven);
eight ei(light_eight);
nine ni(light_nine);

integer current_number;
genvar i;
initial begin
current_number = 0;
end

always @(posedge CLK) begin
current_number = (current_number + 1) % 10;
end

analog begin
$bound_step(0.05/1000000000);
for (i = 0; i < 64; i = i+1) begin
if (current_number == 0) V(light[i],gnd) <+ V(light_zero[i]);
else if (current_number == 1) V(light[i],gnd) <+ V(light_one[i]);
else if (current_number == 2) V(light[i],gnd) <+ V(light_two[i]);
else if (current_number == 3) V(light[i],gnd) <+ V(light_three[i]);
else if (current_number == 4) V(light[i],gnd) <+ V(light_four[i]);
else if (current_number == 5) V(light[i],gnd) <+ V(light_five[i]);
else if (current_number == 6) V(light[i],gnd) <+ V(light_six[i]);
else if (current_number == 7) V(light[i],gnd) <+ V(light_seven[i]);
else if (current_number == 8) V(light[i],gnd) <+ V(light_eight[i]);
else if (current_number == 9) V(light[i],gnd) <+ V(light_nine[i]);
end
end

endmodule

Edit:

Just thought my netlist would likely be worth posting

////////////////////////////////////////////////////////////////////////
// PLEASE DO NOT EDIT OR COMPILE THIS FILE.
// IT IS MEANT FOR VIEWING PURPOSE ONLY.
//
// All files for configuration: (animated_image tb_animated_count config)
////////////////////////////////////////////////////////////////////////

// AMS netlist generated by the AMS Unified netlister
// IC subversion: IC6.1.8-64b.500.17
// IUS version: 15.20-s086
// Copyright(C) 2005-2009, Cadence Design Systems, Inc
// User: dmatkin Pid: 35011
// Design library name: animated_image
// Design cell name: tb_animated_count
// Design view name: config
// Solver: Spectre

`include "disciplines.vams"
`include "userDisciplines.vams"
// HDL file - animated_image, four, verilogams.
// HDL file - animated_image, five, verilogams.
// HDL file - animated_image, nine, verilogams.
// HDL file - animated_image, two, verilogams.
// HDL file - animated_image, six, verilogams.
// HDL file - animated_image, one, verilogams.
// HDL file - animated_image, seven, verilogams.
// HDL file - animated_image, three, verilogams.
// HDL file - animated_image, eight, verilogams.
// HDL file - animated_image, zero, verilogams.
// HDL file - animated_image, animated_count, verilogams.
// Library - analogLib, Cell - presistor, View - schematic
// LAST TIME SAVED: Sep 4 20:35:33 2018
// NETLIST TIME: Jul 25 14:04:54 2023

`worklib analogLib
`view schematic

`timescale 1ns / 1ps
(* cds_ams_schematic *)

module presistor (PLUS, MINUS);
inout MINUS, PLUS;
parameter c=0 ;
parameter r=1000.0 ;
parameter a_tc1=0 ;
parameter a_tc2=0 ;
parameter m=1 ;
capacitor #(.c(c/2)) C1 (PLUS, cds_globals.\gnd! );
capacitor #(.c(c/2)) C2 (MINUS, cds_globals.\gnd! );
resistor #(.r(r), .tc1(a_tc1), .tc2(a_tc2)) R0 (PLUS, MINUS);

endmodule
// Library - animated_image, Cell - tb_animated_count, View - schematic
// LAST TIME SAVED: Jul 24 20:06:07 2023
// NETLIST TIME: Jul 25 14:04:54 2023

`worklib animated_image
`view schematic

`timescale 1ns / 1ps
(* cds_ams_schematic *)

module tb_animated_count ( );
wire [0:63] out;
wire CLK;
animated_count I2 (.light( out ), .CLK( CLK ));
presistor #(.c(0), .r(1000)) R1_0 (cds_globals.\gnd! , out[0]);
presistor #(.c(0), .r(1000)) R1_1 (cds_globals.\gnd! , out[1]);
presistor #(.c(0), .r(1000)) R1_2 (cds_globals.\gnd! , out[2]);
presistor #(.c(0), .r(1000)) R1_3 (cds_globals.\gnd! , out[3]);
presistor #(.c(0), .r(1000)) R1_4 (cds_globals.\gnd! , out[4]);
presistor #(.c(0), .r(1000)) R1_5 (cds_globals.\gnd! , out[5]);
presistor #(.c(0), .r(1000)) R1_6 (cds_globals.\gnd! , out[6]);
presistor #(.c(0), .r(1000)) R1_7 (cds_globals.\gnd! , out[7]);
presistor #(.c(0), .r(1000)) R1_8 (cds_globals.\gnd! , out[8]);
presistor #(.c(0), .r(1000)) R1_9 (cds_globals.\gnd! , out[9]);
presistor #(.c(0), .r(1000)) R1_10 (cds_globals.\gnd! , out[10]);
presistor #(.c(0), .r(1000)) R1_11 (cds_globals.\gnd! , out[11]);
presistor #(.c(0), .r(1000)) R1_12 (cds_globals.\gnd! , out[12]);
presistor #(.c(0), .r(1000)) R1_13 (cds_globals.\gnd! , out[13]);
presistor #(.c(0), .r(1000)) R1_14 (cds_globals.\gnd! , out[14]);
presistor #(.c(0), .r(1000)) R1_15 (cds_globals.\gnd! , out[15]);
presistor #(.c(0), .r(1000)) R1_16 (cds_globals.\gnd! , out[16]);
presistor #(.c(0), .r(1000)) R1_17 (cds_globals.\gnd! , out[17]);
presistor #(.c(0), .r(1000)) R1_18 (cds_globals.\gnd! , out[18]);
presistor #(.c(0), .r(1000)) R1_19 (cds_globals.\gnd! , out[19]);
presistor #(.c(0), .r(1000)) R1_20 (cds_globals.\gnd! , out[20]);
presistor #(.c(0), .r(1000)) R1_21 (cds_globals.\gnd! , out[21]);
presistor #(.c(0), .r(1000)) R1_22 (cds_globals.\gnd! , out[22]);
presistor #(.c(0), .r(1000)) R1_23 (cds_globals.\gnd! , out[23]);
presistor #(.c(0), .r(1000)) R1_24 (cds_globals.\gnd! , out[24]);
presistor #(.c(0), .r(1000)) R1_25 (cds_globals.\gnd! , out[25]);
presistor #(.c(0), .r(1000)) R1_26 (cds_globals.\gnd! , out[26]);
presistor #(.c(0), .r(1000)) R1_27 (cds_globals.\gnd! , out[27]);
presistor #(.c(0), .r(1000)) R1_28 (cds_globals.\gnd! , out[28]);
presistor #(.c(0), .r(1000)) R1_29 (cds_globals.\gnd! , out[29]);
presistor #(.c(0), .r(1000)) R1_30 (cds_globals.\gnd! , out[30]);
presistor #(.c(0), .r(1000)) R1_31 (cds_globals.\gnd! , out[31]);
presistor #(.c(0), .r(1000)) R1_32 (cds_globals.\gnd! , out[32]);
presistor #(.c(0), .r(1000)) R1_33 (cds_globals.\gnd! , out[33]);
presistor #(.c(0), .r(1000)) R1_34 (cds_globals.\gnd! , out[34]);
presistor #(.c(0), .r(1000)) R1_35 (cds_globals.\gnd! , out[35]);
presistor #(.c(0), .r(1000)) R1_36 (cds_globals.\gnd! , out[36]);
presistor #(.c(0), .r(1000)) R1_37 (cds_globals.\gnd! , out[37]);
presistor #(.c(0), .r(1000)) R1_38 (cds_globals.\gnd! , out[38]);
presistor #(.c(0), .r(1000)) R1_39 (cds_globals.\gnd! , out[39]);
presistor #(.c(0), .r(1000)) R1_40 (cds_globals.\gnd! , out[40]);
presistor #(.c(0), .r(1000)) R1_41 (cds_globals.\gnd! , out[41]);
presistor #(.c(0), .r(1000)) R1_42 (cds_globals.\gnd! , out[42]);
presistor #(.c(0), .r(1000)) R1_43 (cds_globals.\gnd! , out[43]);
presistor #(.c(0), .r(1000)) R1_44 (cds_globals.\gnd! , out[44]);
presistor #(.c(0), .r(1000)) R1_45 (cds_globals.\gnd! , out[45]);
presistor #(.c(0), .r(1000)) R1_46 (cds_globals.\gnd! , out[46]);
presistor #(.c(0), .r(1000)) R1_47 (cds_globals.\gnd! , out[47]);
presistor #(.c(0), .r(1000)) R1_48 (cds_globals.\gnd! , out[48]);
presistor #(.c(0), .r(1000)) R1_49 (cds_globals.\gnd! , out[49]);
presistor #(.c(0), .r(1000)) R1_50 (cds_globals.\gnd! , out[50]);
presistor #(.c(0), .r(1000)) R1_51 (cds_globals.\gnd! , out[51]);
presistor #(.c(0), .r(1000)) R1_52 (cds_globals.\gnd! , out[52]);
presistor #(.c(0), .r(1000)) R1_53 (cds_globals.\gnd! , out[53]);
presistor #(.c(0), .r(1000)) R1_54 (cds_globals.\gnd! , out[54]);
presistor #(.c(0), .r(1000)) R1_55 (cds_globals.\gnd! , out[55]);
presistor #(.c(0), .r(1000)) R1_56 (cds_globals.\gnd! , out[56]);
presistor #(.c(0), .r(1000)) R1_57 (cds_globals.\gnd! , out[57]);
presistor #(.c(0), .r(1000)) R1_58 (cds_globals.\gnd! , out[58]);
presistor #(.c(0), .r(1000)) R1_59 (cds_globals.\gnd! , out[59]);
presistor #(.c(0), .r(1000)) R1_60 (cds_globals.\gnd! , out[60]);
presistor #(.c(0), .r(1000)) R1_61 (cds_globals.\gnd! , out[61]);
presistor #(.c(0), .r(1000)) R1_62 (cds_globals.\gnd! , out[62]);
presistor #(.c(0), .r(1000)) R1_63 (cds_globals.\gnd! , out[63]);
presistor #(.c(0), .r(1000)) R0 (cds_globals.\gnd! , CLK);
vsource #(.type("pulse"), .val0(0), .val1(3.3), .period(2e-06), .rise(1e-09), .fall(1e-09), .width(1e-06)) V0 (CLK, cds_globals.\gnd! );
vsource #(.dc(3.3), .type("dc")) V1 (cds_globals.\vdd! , cds_globals.\gnd! );

endmodule
`noworklib
`noview
// Verilog-AMS cds_globals module for top-level cell:
// animated_image/tb_animated_count.
// Generated by ADE.
// Cadence Design Systems, Inc.

// This is an autoGenerated file, any changes done to this file may get lost.

`include "disciplines.vams"
`include "userDisciplines.vams"

module cds_globals;

// Global Signals
electrical \gnd! ;
ground \gnd! ;
supply0 \vdd! ;

// Design Variables

endmodule

// This is the Cadence AMS Designer(R) analog simulation control file.
// It specifies the options and analyses for the Spectre analog solver.

simulator lang=spectre

global 0 vdd!

simulatorOptions options temp=27 tnom=27 scale=1.0 scalem=1.0 \
reltol=100e-6 vabstol=1e-6 iabstol=1e-12 homotopy=all limit=delta \
compatible=spice2 gmin=1e-12 rforce=1 maxnotes=5 maxwarns=5 digits=5 \
pivrel=1e-3 checklimitdest=psf enable_pre_ver=yes ignorezerovar=yes

tran tran stop=1m errpreset=conservative write="spectre.ic" \
writefinal="spectre.fc" annotate=status maxiters=5

finalTimeOP info what=oppoint where=rawfile

modelParameter info what=models where=rawfile
element info what=inst where=rawfile
outputParameter info what=output where=rawfile

wave_out options rawfmt=sst2

// This is the Cadence AMS Designer(R) analog simulation control file.
// Generated 'ie' card statement for the Connect Rules.
// TIME : Jul 25 14:04:57 2023
// IC subversion: IC6.1.8-64b.500.17
// IUS version: 15.20-s086

amsd{
ie vsup=1.8 discipline=logic
}

# This is the NC-SIM(R) probe command file
# used in the AMS-ADE integration.


#
# Database settings
#
if { [info exists ::env(AMS_RESULTS_DIR) ] } { set AMS_RESULTS_DIR $env(AMS_RESULTS_DIR)} else {set AMS_RESULTS_DIR "../psf"}
database -open ams_database -into ${AMS_RESULTS_DIR} -default

#
# Probe settings
#
probe -create -emptyok -database ams_database {tb_animated_count.CLK}
probe -create -emptyok -database ams_database {tb_animated_count.out[0]}
probe -create -emptyok -database ams_database {tb_animated_count.out[1]}
probe -create -emptyok -database ams_database {tb_animated_count.out[2]}
probe -create -emptyok -database ams_database {tb_animated_count.out[3]}
probe -create -emptyok -database ams_database {tb_animated_count.out[4]}
probe -create -emptyok -database ams_database {tb_animated_count.out[5]}
probe -create -emptyok -database ams_database {tb_animated_count.out[6]}
probe -create -emptyok -database ams_database {tb_animated_count.out[7]}
probe -create -emptyok -database ams_database {tb_animated_count.out[8]}
probe -create -emptyok -database ams_database {tb_animated_count.out[9]}
probe -create -emptyok -database ams_database {tb_animated_count.out[10]}
probe -create -emptyok -database ams_database {tb_animated_count.out[11]}
probe -create -emptyok -database ams_database {tb_animated_count.out[12]}
probe -create -emptyok -database ams_database {tb_animated_count.out[13]}
probe -create -emptyok -database ams_database {tb_animated_count.out[14]}
probe -create -emptyok -database ams_database {tb_animated_count.out[15]}
probe -create -emptyok -database ams_database {tb_animated_count.out[16]}
probe -create -emptyok -database ams_database {tb_animated_count.out[17]}
probe -create -emptyok -database ams_database {tb_animated_count.out[18]}
probe -create -emptyok -database ams_database {tb_animated_count.out[19]}
probe -create -emptyok -database ams_database {tb_animated_count.out[20]}
probe -create -emptyok -database ams_database {tb_animated_count.out[21]}
probe -create -emptyok -database ams_database {tb_animated_count.out[22]}
probe -create -emptyok -database ams_database {tb_animated_count.out[23]}
probe -create -emptyok -database ams_database {tb_animated_count.out[24]}
probe -create -emptyok -database ams_database {tb_animated_count.out[25]}
probe -create -emptyok -database ams_database {tb_animated_count.out[26]}
probe -create -emptyok -database ams_database {tb_animated_count.out[27]}
probe -create -emptyok -database ams_database {tb_animated_count.out[28]}
probe -create -emptyok -database ams_database {tb_animated_count.out[29]}
probe -create -emptyok -database ams_database {tb_animated_count.out[30]}
probe -create -emptyok -database ams_database {tb_animated_count.out[31]}
probe -create -emptyok -database ams_database {tb_animated_count.out[32]}
probe -create -emptyok -database ams_database {tb_animated_count.out[33]}
probe -create -emptyok -database ams_database {tb_animated_count.out[34]}
probe -create -emptyok -database ams_database {tb_animated_count.out[35]}
probe -create -emptyok -database ams_database {tb_animated_count.out[36]}
probe -create -emptyok -database ams_database {tb_animated_count.out[37]}
probe -create -emptyok -database ams_database {tb_animated_count.out[38]}
probe -create -emptyok -database ams_database {tb_animated_count.out[39]}
probe -create -emptyok -database ams_database {tb_animated_count.out[40]}
probe -create -emptyok -database ams_database {tb_animated_count.out[41]}
probe -create -emptyok -database ams_database {tb_animated_count.out[42]}
probe -create -emptyok -database ams_database {tb_animated_count.out[43]}
probe -create -emptyok -database ams_database {tb_animated_count.out[44]}
probe -create -emptyok -database ams_database {tb_animated_count.out[45]}
probe -create -emptyok -database ams_database {tb_animated_count.out[46]}
probe -create -emptyok -database ams_database {tb_animated_count.out[47]}
probe -create -emptyok -database ams_database {tb_animated_count.out[48]}
probe -create -emptyok -database ams_database {tb_animated_count.out[49]}
probe -create -emptyok -database ams_database {tb_animated_count.out[50]}
probe -create -emptyok -database ams_database {tb_animated_count.out[51]}
probe -create -emptyok -database ams_database {tb_animated_count.out[52]}
probe -create -emptyok -database ams_database {tb_animated_count.out[53]}
probe -create -emptyok -database ams_database {tb_animated_count.out[54]}
probe -create -emptyok -database ams_database {tb_animated_count.out[55]}
probe -create -emptyok -database ams_database {tb_animated_count.out[56]}
probe -create -emptyok -database ams_database {tb_animated_count.out[57]}
probe -create -emptyok -database ams_database {tb_animated_count.out[58]}
probe -create -emptyok -database ams_database {tb_animated_count.out[59]}
probe -create -emptyok -database ams_database {tb_animated_count.out[60]}
probe -create -emptyok -database ams_database {tb_animated_count.out[61]}
probe -create -emptyok -database ams_database {tb_animated_count.out[62]}
probe -create -emptyok -database ams_database {tb_animated_count.out[63]}

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 2 years ago

    Change the line in your module definition from:

    module animated_count (CLK,light[0:63]);

    to:

    module animated_count (CLK,light);

    That will fix it. If you declared a signal as a bus within the module, you don't need to specify it that way in the port list.

    BTW (since you wondered in your moderation comments) - your edited post went into moderation because of the repeated text (a common sign of spam, which clearly it wasn't in this case on review). Your witty comments at the top made me laugh, but didn't affect the spam detection!

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information