我是靠谱客的博主 俊逸大地,最近开发中收集的这篇文章主要介绍【数电】数电基础知识,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、关于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:动态调整晶体管阈值电压,减少漏电流

最后

以上就是俊逸大地为你收集整理的【数电】数电基础知识的全部内容,希望文章能够帮你解决【数电】数电基础知识所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部