在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
楼主: jiangbing1975

用verilogA写的模块可以用SpectreRF进行PSS和PNOISE仿真吗?

[复制链接]
发表于 2025-2-27 18:03:36 | 显示全部楼层
`include "constants.vams"
`include "disciplines.vams"
(* ignore_hidden_state *)
module SC(in,clk,out1,out2);
这样就可以了
主要是添加一句 (* ignore_hidden_state *)
回复 支持 反对

使用道具 举报

发表于 2025-2-27 18:12:02 | 显示全部楼层


   
kette 发表于 2010-11-22 16:19
谁说不能仿的啊,可以改代码,使Veriloga中不出现hidden state


但是仿真完结果全为0
回复 支持 反对

使用道具 举报

发表于 2025-2-27 18:27:20 | 显示全部楼层
建议不要使用隐藏
回复 支持 反对

使用道具 举报

发表于 2025-2-27 18:28:47 | 显示全部楼层
# Verilog-A 在 SpectreRF 中的隐藏状态问题总结

## 1. ​**隐藏状态的定义与影响**
- ​**隐藏状态来源**:
  - 局部状态变量(如 `save`)保留前次计算值,导致 SpectreRF 无法直接访问。
  - 特定函数(如 `delay`, `z-domain`、`transition`/`slew`)引入短暂隐藏状态。
  - 随机数生成器(如 `random`)依赖局部变量存储状态。
- ​**后果**:
  - 导致 Newton 迭代法收敛失败。
  - 无法正确处理周期性稳态分析(PSS/QPSS)。

---

## 2. ​**SpectreRF 的限制**
- ​**支持的显式状态**:
  - 仅支持微分算子(`ddt`, `idt`)定义的连续状态。
- ​**禁止行为**:
  - 使用局部状态变量的模块(如采样保持电路初始版本)。
  - 在周期边界附近激活瞬态函数(如 `transition`)。

---

## 3. ​**避免隐藏状态的策略**
### ​**方法一:重构模型暴露显式状态**
- ​**示例:无隐藏状态的周期采样保持电路**​(Listing 2)
  - 通过电容和开关模拟采样保持,避免使用局部变量存储采样值。
  - 关键代码:
    ```verilog-a
    // 使用电容充放电替代局部变量 save
    I(hold) <+ tc * ddt(V(hold));
    ```
  - 严格控制时间步长(`$bound_step`)确保周期边界稳定。

### ​**方法二:选择电路级架构**
- ​**频率除数设计**​(Listing 3):
  - 采用开关电容积分器代替传统数字逻辑,通过离散反馈消除累积误差。
  - 参数化设计(如 `n`)灵活调整除数比例。

### ​**方法三:规避敏感函数**
- ​**周期边界调整**:
  - 通过 `tstab` 参数偏移周期边界,避开 `transition`/`slew` 的活跃区间。
- ​**静态分析预处理**:
  - 使用 `analysis("static")` 强制电容预充电,避免隐藏状态干扰。

---

## 4. ​**示例模型分析**
### ​**周期采样保持电路(无隐藏状态)​**
- ​**结构**:
  - 输入缓冲 → 电容采样 → 输出缓冲。
  - 通过参数 `aperture` 和 `tc` 控制采样窗口和时间常数。
- ​**优势**:
  - 无偏移/失真,仅含微小孔径时间和 droop。

### ​**频率除数电路(无隐藏状态)​**
- ​**原理**:
  - 输入信号触发电荷包注入积分电容,达到阈值后输出脉冲。
  - 离散反馈机制修正误差,提升大除数稳定性。
- ​**局限**:
  - 大 `n`(>1000)时需收紧仿真容差。

---

## 5. ​**结论与建议**
- ​**优先电路级建模**:
  - 避免抽象行为模型,减少隐藏状态风险。
- ​**合理使用 Verilog-A 功能**:
  - 用微分算子替代局部状态存储。
  - 通过参数化和离散反馈优化大除数设计。
- ​**验证工具属性**:
  - 使用 `(* ignore_state*)` 标记不影响 RF 分析的变量。
  - 新增 `(* instrument_module*)` 支持复杂激励源。

---

## 附录:关键代码片段
```verilog-a
// 无隐藏状态采样保持电路的输出缓冲
V(Pout, Nout) <+ transition(save, tdelay, tt);

// 频率除数中的电荷注入控制
if (dir*V(pin,nin) > dir*thresh) begin
  l(vg,chg) <+ g*V(vg,chg); // 充电
end else begin
  l(chg) <+ g*(V(chg) - vchg); // 预充电
end
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-8-19 05:57 , Processed in 0.012449 second(s), 3 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表