• verilog 实用的小技巧


    (之后还会持续的更新)

    移位操作的实现:

      verilog有一种非常简单的移位操作实例如下:

    reg [3:0] source;
    reg out;
    
    {out,source[3:0]}={source[3:0],1'b0};//向左移位。且不循环
    {source[3:0],out}={1'b0,source[3:0]}//向右移位,且不循环
    {out,source[3:0]}={source[3:0],source[3]};//向左循环移位
    

    切记不能使用多驱动对同一个网线进行赋值:

      编译verilog时往往会出现如下错误:Error (10028): Can't resolve multiple constant drivers for net "cnt[24]" at TIME_Ctr.v(37),这是初学者往往遇到的错误,这是受C语言代码的影响所造成的。也就是一个

    变量往往在多个always语句中赋值,会产生竞争与冒险的行为,所以我们写在一个always语句中也只对一个变量赋值。verilog不同于其他的编程语言的特点(并发性)要时刻的铭记于心。

    在编写testbench的注意事项

    1. 仿真调用模块时应尽可能的用按端口进行赋值
    2. 仿真的模块的输入应为reg类型,输出应该为线网类型,这点要注意这和函数的形参传值不一样,这个是相当于是用外部寄存器或是线网来链接这个模块,这点要非常的注意!(其实顶层在调用子模块的时候也是一个道理)
    3. clock仿真的时候一定要赋予初始值要不然就会保持高阻态的状态。
  • 相关阅读:
    基于遗传算法(Genetic Algorithm)的TSP问题求解(C)
    分治思想:合并排序和快速排序
    冒泡排序和选择排序
    WPF线程
    DataGrid属性和事件
    WPF限制TextBox只能输入数字
    键盘键值对应表
    转换人民币大小金额
    查找DataGrid某个单元格中的控件
    WPF中DataGrid使用初步
  • 原文地址:https://www.cnblogs.com/yskn/p/9322499.html
Copyright © 2020-2023  润新知