ADS VerilogA的权宜之计—直接解决ADS向量端口问题

描述

01

问题描述

在ADS中建立一个Verilog-A模块,方法如下:

新建一个VerilogA View

Verilog

Verilog

在Verilog-A文本编辑器中添加以下代码:

 

// VerilogA for my_lib, decoder, test
`include "disciplines.vams"
`include "constants.vams"


module decoder(outp,outn);
  output[7:0] outp,outn;
  electrical[7:0] outp,outn;
  parameter integer code=0 from [0:255];//控制码
  parameter real vdd=0;
  parameter real vss=-5;
  genvar i;
  analog begin
    for(i=0;i<8;i=i+1)  begin
      if(code&(1<

 

再给当前cell添加一个symbol view,包含两个Pin,跟Verilog-A中定义保持一致outp<7:0>、outn<7:0>。

Verilog

在veriloga view上右键选择【Compile Verilog】进行编译

Verilog

编译通过会提示成功,否则会给出错误信息。

Verilog

【注】作者在这里翻车了,本来标题写的是ADS应用技巧,但是作者发现当前使用的ADS不能正常编译这个decoder模块了,提示我symbol定义的端口outp<7:0>、outn<7:0>跟Verilog-A模块中定义的端口outp、outn不一致,我明确地知道是端口宽度不匹配导致的,但我坚持认为是软件的问题。

 

ERROR: Failed to compile verilog : Port names in verilog and symbol views do not match.
Symbol View Ports : outp<7:0> outn<7:0> 
Verilog Module Ports : outp outn 
Modify either verilog or symbol view of the cell : decoder

 

几年前用ADS2017的时候这个模块肯定是已经编译通过正常使用的,但毕竟作者是业余学习使用ADS,也没有人家的License授权,遇到这种问题也不好跟Keysight提……虽然可以将8位宽度的向量端口拆成8个独立的端口,但我认为这很不优雅!而且相同的代码,我在Virtuoso环境中都是可以完全正常使用的,所以上面的仿真结果实际上我是用Virtuoso跑出来的……如果有读者知道怎么解决这个问题,欢迎在公众号留言,或者发送邮件xhlyuestc@gmail.com交流,感激不尽!

02

权宜之计

好在ADS和Virtuoso都支持OA,因此只需要将Virtuoso编译好的VerilogA模块复制到ADS的library中就可以使用了。

在virutuoso中新建一个cell,类型选择VerilogA,粘贴同样的代码到编辑器中,点击build按钮,提示可以自动生成symbol即可:

Verilog

Verilog

对应cell下面的文件结构如下图所示:

Verilog

将decocer整个cell的文件夹复制到ADS对应工程的library里,然后就可以在ADS工程的Schematic中调用这个VerilogA Cell进行仿真了。

Verilog

看看这个扫描输出的电压,是不是很像数字电路里的二进制分频器,但那里是瞬态波形,这里是直流电压!

Verilog







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分