zoukankan      html  css  js  c++  java
  • verilog之原语设计

    verilog之原语设计

    1、原语作用

    在一般的verilog设计中,一般采用数字逻辑设计,由软件将数字逻辑转化为特定的数字电路。但是,对于某些特殊的领域,有可能需要用户直接自定义数字电路以达到对指定电路的设计。原语就是执行这个功能的。原语也就是门级语言。这个语言之于verilog就像汇编语言之于C语言一样,是门级网表所采用的语法。了解这个语言的语法,可以提高对编译器工作的认识。如果具有足够的经验,甚至可以直接修改门级网表来实现设计的实现。对于一个大型的工程而言,这无疑会节约大量的时间。

    2、基本语法

    简单的与或非门:

    and a1(out1,in1,in2); //简单的与门a1,先输出,再输入
    not n1(out1,in1); //简单的非门
    or or1(out1,in1,in2); //简单或门
    xor xor1(out1,in1,in2);//简单异或门
    nand nand1(out1,in1,in2);//与非门
    nor nor(out1,in1,in2);//与或门
    xnor xnor1(out1,in1,in2);//简单同或门
    buf b1(out1,out2,in); //二输出缓存门,除了z会被当作x输出,其他输出和输入一样
    bufif1 bf1(outw,inw,controlw);//三态门,控制位为0,输出为z,控制位为1,输出等于输入,一般不将控制位置于高阻;fi1就是控制位为1输出。
    //同理可以推出bufif0是control为0时输出有效。其他的三态门如notif0和notif1就是在buf三态上加上not逻辑,即输出为输入的非。

    阵列输入的与或非门:

    nand #2 nand_array[3:0] (out,in1,in2);//这里的out,in1,in2都是和[3:0]的位宽对齐的。就相当于声明了一排与门。可以理解为总线与非门
    bufif0 ar[3:0] (out,in,en);//注意,这里的控制端口en是一个位宽,也就是声明由一个控制口控制的阵列三态门。
    //还有一些复杂的阵列操作,如合并,添加等,这里就不多说明。

    在FPGA常用的门级组合逻辑语言就这几个。还有一些基于器件的描述和传输门的描述以后有时间再看,现在先接触简单逻辑。

    延时控制:

    #(95100105) clk=1;//这个#的延时是95到105之间,经典值为100,用于表示时钟的偏斜
    and #(10) a1(out,in1,in2);//输入输出总延时
    and #(10,12) a2(out,in1,in2);//上升延时和下降延时,区分了上升和下降的区别
    bufif1 #(10,12,11) a3(out,in1,en);//上升延时,下降延时和关断延时,关断延时,就是en作用的时间

    这里也是几个简单的延时模型,还有许多其他的语法,这里就不多介绍。

    3、简单总结

    想要掌握原语设计还是比较困难的,但是阅读应该是必要的。通过阅读自己写的verilog代码所对应的原语,可以快速理解自己代码所对应的电路。通过对数字电路的理解,可以提高设计的认识,进而理解verilog的设计方法。而且,对于学习过数字电路设计的人来说,将简单的数字电路转化为原语也是一个不错的挑战。

  • 相关阅读:
    Day01
    微前端技术框架qiankun技术分享
    终于有人把O2O、C2C、B2B、B2C的区别讲透了
    Electron-Vue项目使用Element的el-table组件不显示
    monaco editor各种功能实现总结
    electron-vue项目使用elementUI组件报错$attrs is readonly
    monaco-editor 使用总结
    闲谈Monaco Editor-基本使用
    【软件】MATHTYPE破解记
    C# EF
  • 原文地址:https://www.cnblogs.com/electricdream/p/13030381.html
Copyright © 2011-2022 走看看