zoukankan      html  css  js  c++  java
  • verilog语法规则个人总结

    verilog语法规则

    1.Verilog分以下四个层次:
     
    l         低阶交换模型:电路由开关与储存点所组成
     
    l         逻辑间层次描述: 用and ,or, buf , not 等
     
    l         资料处理模型或暂存器转移层次:用于说明资料如何在暂存器中储存与传送。使用assign(电路所需功能的指定描述)来描述。
     
    l         行为模型: 只需要考虑模组的功能,使用always ,for ,while ,case等
     
    2.关键字keywords必须使用小写来表示。
     
    3.不能用于电路合成的verilog 语法:
     
    叙述:Delay, Initial, Repeat, Forever, Wait, Fork, Join, Event, time, Deassign, Force, Release, Primitive, Cese indentity,  not identity operations,Rtuan,tranif0,tranif1,rtranif0,rtranif1
     
    运算子:= = =, != =,/,%
     
    逻辑间型态:tranif1,tranif0,rtran,trtanif1,rtranif0等逻辑间型态
     
    Triand,trior,tri0,tri1,tritrg等接线型
     
    Nmos, pmos, coms ,rnmos ,rpmos ,rcmos等元件
     
    Pullup,pulldown等讯号改变元件
     
    其他不能用于电路合成的构建方式
     
    1)        不能在模组内有另一个阶层式的名称: module
     
    2)        ifdef,endif,else等条件编译命令
     
    verilog的时间控制:主要用途是设定某一个程序在特定的时间被执行。
     
    事件 :当一条接线wire,wor,wand或暂存器register的值被改变时就是一个事件
     
           当模组的输入埠介绍到新的值时也是一个事件
     
    可用于合成的verilog电路描述的事件基础时间控制,有两种:
     
    1)        正规事件控制@当信号产生正缘posedge ,负negedge,转换或者值被改变时,叙述才会被执行。Always @ (posedge clock)
     
    2)        当有多个讯号或者事件触发一个叙述或一个内含多个叙述的区块
     
    Always@(reset or gate or d)
     
    Verilog的资料型态:wire,wand,wor,reg
     
    Wire的特性:
     
    1)        接线时连接硬体元件之连接线
     
    2)        接线必须要被驱动才能改变它的内涵值
     
    3)        接线描述的关键字为wire
     
    4)        除非有被宣告成一个向量,否则接线是内定为一个位元的值,而且内定值是Z
     
    Wand的特性:
     
    1)        我们不能将多条讯号输出线同样连接到使用wire的某一条接线
     
    2)        可以将多条讯号输出线同样连接到某一条wand,wor
     
    Reg 的特性 :
     
    1)        可以直接给定一个数值,主要功能在于保持住电路中的某个值,不必像wire才能改变它的内涵值
     
    2)        除非有被宣告成一个向量,否则接线是内定为一个位元的值,而且内定值是X
     
    选用wire或reg的时机
     
    1)        wire必须配合assign来使用,且不能出现在always里
     
    2)        reg的使用方法为a=b格式,也就是必须放在always的区块描述里
     
    3)        wire,reg皆可定义为向量
     
    4)        在verilog中内定的为WIRE,因此若在端与端的宣告中只有告input,output,inout,则为wire,如果需要将讯号的值储存起来就要宣告为reg
     
    5)        在verilog中端的内部与外部的连接必须遵守下列规定:
     
    Input能被net,或register推动,而一个输入端能够推动net型态的接线
     
    output能被net,或register推动,而一个输入端能够推动net型态的接线
     
    双向端能被net推动,而一个输入端能够推动net型态的接线
     
    可用于电路合成的net,包括三种:wire,wor,wand
     
    Verilog常用的叙述:
     
    1.  parameter,用于定义一个常数,对于可扩展的模组非常好用
     
    parameter width=16;
     
    input [width-1:0]a;
     
    2.  assign
     
    驱动某个值到wire,wand,wor,tri;
     
    用于资料处理模型(Data Flow model)的描述
     
    用于描述组合逻辑电路
     
    3.  case: 叙述为一种多路选择
     
    如果没有将“所有可能的”分支判别条件都指定 ,将会被锁住
     
    4.  function 的传回值是储存在和函数同样名称的这个变数中 ,并且至少要有一个或者以上的input
     
             c=Sub_inc_Dec(b,a,sub,inc)
     
             …function [3:0] Sub_inc_Dec;
     
             Input [3:0]a,b;
     
             Input Sub,inc;
     
             …..endfunction
     
    5.  task (任务)可以拥有零个或更多个input,output,inout
     
    6.  task, function的区别:
     
              function可以引其他的function,但不能引用其他的task
     
              task可以引用其他的task和function
     
              function至少要有一个或者以上的input
     
              task (任务)可以拥有零个或更多个input,output,inout
     
    7.   相同的地方
     
           都可以拥有本身的区域变数与暂存器,但不能拥有wire型态的变数
     
           只能用于行为模型的叙述中,前额本身不能有always 的叙述,通常是写在always区块中
     
    撰写经济使用的HDL程式码原则
     
           使用括弧来描述复杂的电路结构
     
           Out=a+b+c+d+e+f; 需用5层 out=((a+(b+c))+(d+e))+f;只需四层
     
           将“组合指定”叙述和“循序指定”叙述的部分区分开
     
           善于用常数
     
           Parameter 可以减少电路面积可以定义宽度等
     
           可以表示有状态机的内部状态parameter A=2’b00,B=2’b10
     
           Define可表示有限状态机的内部状态和电路中会用到的常数值Define  RED_Light_Time  9
     
    这只是个人经验之谈,有什么不足和错误的地方希望大家能指出来。
  • 相关阅读:
    江湖盛传“阿里三板斧”,其实这才是全部真相!
    PHP算法之四大基础算法
    PHP实现的毫秒定时器,同时解决进程不重复堆积
    leetcode小题解析
    PHP算法之二分查找
    elastic学习笔记
    php中mysqli 处理查询结果集总结
    PHP中的 Iterator 与 Generator
    Laravel源码解析之反射的使用
    PHP下的异步尝试四:PHP版的Promise
  • 原文地址:https://www.cnblogs.com/zcf287/p/2801191.html
Copyright © 2011-2022 走看看