【数电】数电基础知识

一、关于verilog的基础知识

(一)设计:
  1. 数据类型
    1. reg:寄存器类型
    2. wire:线网类型
  2. 数据表示
    1. 向量:reg [7:0] var; 声明一个位宽为8的寄存器向量
    2. 数组:wire [7:0] var[0:3]; 声明一个数组,这个数组里面有4个8bit的线网向量
    3. reg [7-:8] var; 等价于reg [7:0] var;
    4. 索引:通常从高位向低位索引,比如var[3:0],但也可以反过来var[0:3]
    5. 其他还有integer、real、parameter较为常见
  3. 阻塞赋值和非阻塞赋值
    1. 阻塞赋值:var[3:0] = 4'b0000;
    2. 非阻塞赋值:var[7:4] <= 4'b1010;
    3. 阻塞赋值有先后顺序、非阻塞赋值没有
    4. 通常组合逻辑中使用阻塞赋值、时序逻辑中使用非阻塞赋值
  4. always块
    1. always@()begin end
    2. 括号里面的叫敏感量表,当里面任何一个敏感量发生变化的时候,就会执行一遍块内的表达式
    3. 敏感量有时钟的,就是时序逻辑;
    4. 对于组合逻辑,为了避免综合出锁存器,需要将所有右值放进敏感量表或者写成always@(*)
  5. 模块例化规则
    1. 顺序连接:不建议使用
    2. 命名连接:module_name inst_name#(parameter_list)(.portname1(port1),.portname2(port2))
    3. 生成器例化:generate,同时例化多个模块
    4. 注意⚠️:输入端口只能连接reg类型,输出端口只能连wire类型。
  6. 有限状态机
    1. moore机
    2. mealy机
    3. 一般用case语句实现
  7. 避免竞争冒险
    1. 避免多端驱动
    2. 组合逻辑块写成always@(*)
    3. if-else、case-default写完整
  8. 流水线设计
    1. 以空间换时间
(二)测试
  1. initial块

    1. initial begin end
    2. 只出现在testbench里面,内部表达式只执行一次
  2. wait(event):等待事件触发,程序会在此中断,其他模块的也不会执行

  3. @(event):等待时间触发,块在此停止,但不影响其他模块的表达式执行

  4. repeat(n):重复执行n次

  5. event:声明一个事件;->eventName语句表明事件被触发

  6. $stop:停止执行

  7. $finish:终止执行

  8. $display:相当于c语言中的一次printf

  9. $monitor:监控某个信号,发生变化则printf一次

  10. $random:产生随机数

  11. $time:返回当前仿真时刻

  12. 信号探针:可以通过instName.signalName访问变量值

二、一些简单的电路

(一)组合逻辑电路
  1. 复用器
  2. 半加器
  3. 全加器
  4. 行波进位加法器
  5. 先行进位加法器
  6. 减法器
  7. 比较器
  8. 移位器
  9. 循环移位器
(二)时序逻辑电路
  1. 计数器
  2. 移位寄存器
  3. 循环移位寄存器
  4. 分频器
  5. 同步fifo
  6. 异步fifo(跨时钟域)

三、关于时序约束和功耗约束

  1. DTA和STA

    1. DTA:动态时序分析,写激励文件仿真,耗时长、达到完备性需要大量测试向量
    2. STA:静态时序分析,生成有向无环图,耗时短、可能存在错误路径、且只适用于同步电路
  2. 同步复位和异步复位

    1. 复位信号必须持续到时钟触发
    2. 异步复位属于即刻复位
    3. 一般的做法是异步复位同步释放
  3. setupTime和holdTime

    1. setupTime:建立时间
    2. $setup(posedge sys_clk, sig_a, 5):系统钟和信号a的建立时间约束在5个单位以内,否则报错
    3. holdTime:保持时间
    4. $hold(posedge sys_clk, sig_a, 5):
    5. $setuphold(posedge sys_clk, sig_b, 5, 3):系统钟和信号b的建立时间约束在5个单位以内,并且建立时间约束在3个单位以内,否则报错
  4. skew

    1. 时钟边缘倾斜
  5. 时序违背的解决办法:

    1. 降低时钟频率
    2. 缩短关键路径
    3. 升级工艺或编程器件
  6. 关键路径处理:

    1. 约束布局布线
    2. 插入buffer
    3. 改进并行算法
    4. 调整元件尺寸
    5. pipeline
  7. 数字电路的功耗

    1. 动态耗散
    2. 漏电流
    3. 短路电流
  8. 低功耗设计

    1. DVS:根据历史工作情况动态调整工作电压

    2. DVFS:根据当前工作频率,动态调整工作电压

    3. 门控时钟

    4. GALS:全局异步本地同步技术

    5. pipeline

    6. 采用特殊编码方式,减少信号比特翻转(同时还能减少glitch)

    7. 插入缓冲器,以减少活跃电路电容

    8. power gating:切断模块供电

    9. Adaptive Body Bias:动态调整晶体管阈值电压,减少漏电流

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值