博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
verilog 入门教程笔记_华为
阅读量:5360 次
发布时间:2019-06-15

本文共 2924 字,大约阅读时间需要 9 分钟。

择要摘录
————————————————————————
一、 数字电路设计方法    
     当前的数字电路设计从层次上分可分成以下几个层次:
    1. 算法级设计:利用高级语言如C 语言及其他一些系统分析工具(如MATLAB)对设计从系统的算法级方式进行描述。算法级不需要包含时序信息。
    2. RTL 级设计:用数据流在寄存器间传输的模式来对设计进行描述。
    3. 门级:用逻辑级的与、或、非门等门级之间的连接对设计进行描述。
    4. 开关级:用晶体管和寄存器及他们之间的连线关系来对设计进行描述。
   
算法级是高级的建模,一般对特大型设计或有较复杂的算法时使用,特别是通讯方面的一些系统,通过算法级的建模来保证设计的系统性能。在算法级通过后,
     再把算法级用RTL 级进行描述。门级一般对小型设计可适合。开关级一般是在版图级进行。
 
二、设计方法学
    当前的ASIC设计有多种设计方法,但一般地采用
自顶向下的设计方法。
04171451-f9961bb86b224b31be1d5fe409058bb2.png
 
三、 Verilog HDL简介
      
   1. Verilog HDL 中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间
              的物理连线,而寄存器类型表示抽象的数据存储元件。
         2.  可采用三种不同方式或混合方式对设计建模。这些方式包括:
              行为描述方式—使用过程化结构建模;
              数据流方式—使用连续赋值语句方式建模;
              结构化方式—使用门和模块实例语句描述建模。
 
四、Verilog HDL建模概述
1.  模块(书写语法建议):
    一个模块用一个文件;
    模块名与文件名要同名;
    一行一句语句。
   信号方向按输入、输出、双向顺序描述。
   设计模块时可尽量考虑采用参数化,提高设计的重用。
2. 三种建模方式
   主要有结构化描述方式、数据流描述方式和行为描述方式。
   
结构化的建模方式:
    结构化的建模方式就是通过
对电路结构的描述
来建模,即通过对器件的调用(HDL概念称为例化),并使用线网来连接各器件的描述方式。
    这里的器件包括Verilog HDL的内置门如与门and,异或门xor等,也可以是用户的一个设计。结构化的描述方式反映了一个设计的层次结构。
   
    .A  (FA[2])  ,其中.A 表示调用器件的管脚A,括号中的信号表示接到该管脚A的电路中的具体信号。
   
数据流的建模方式:
    数据流的建模方式 就是通过
对数据流在设计中的具体行为
的描述的来建模。
最基本的机制就是用连续赋值语句
。在连续赋值语句中,某个值被
赋给某个线网变量(信号),
    语法如下:assign [delay]  net_name  =  expression;在数据流描述方式中,还必须借助于HDL提供的一些运算符,
    如按位逻辑运算符  :逻辑与 (&),逻辑或(| )等。
 
     行为方式的建模:
    行为方式的建模是指采用
对信号行为级的描述
(不是结构级的描述)的方法来建模。在表示方面,类似数据流的建模方式,但一般是
    initial块语句或always 块语句描述的归为行为建模方式
。行为建模方式通常需要借助一些行为级的运算符如加法运算符(+ ),减法运算符(-)等
五、Verilog HDL 基本语法
    1. 书写规范建议:
1 、用有意义的有效的名字如 Sum  、CPU_addr等。
2 、用下划线区分词。
3 、采用一些前缀或后缀,如时钟采用Clk  前缀:Clk_50 ,Clk_CPU ;低电平采用_n 后缀:Enable_n ;
4 、统一一定的缩写  如全局复位信号 Rst 。
5 、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。
6 、自定义的标识符不能与保留字同名。
7 、参数采用大写,如SIZE 。
          8 、一个语句一行。采用空四格的table 键进行缩进。
    2. 值集合:    
        Verilog HDL中规定了四种基本的值类型: 0 :逻辑0 或“假”;1 :逻辑1 或“真”;X:未知 Z:高阻。此外,x  值和z  值都是不分大小写的。
    3. 整型的基数表示法,格式为[size ] 'base value。
         size  定义以位计的常量的位长;base 为o  或O (表示八进制),b  或B (表示二进制),d  或D(表示十进制),h  或H  (表示十六进制)之一;
         value 是基于base 的值的数字序列。值x 和z 以及十六进制中的a 到f 不区分大小写。
    4. 对数组类型,请按降序方式,如[7 :0] ;
    5. 运算符与表达式:
        (1)算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术操作结果的长度由操作符左端目标长度决定。        
        (2)表达式中的所有中间结果应取最大操作数的长度(赋值时,此规则也包括左端目标)。
        (3)关系运算符有:?>(大于) ?<(小于)?>= (不小于)?<= (不大于)= =  (逻辑相等)!=  (逻辑不等)
                  如果操作数中有一位为X  或Z  ,那么结果为X 。在逻辑相等与不等的比较中,只要一个操作数含有x  或z ,比较结果为未知(x )。
    6. 条件语句:
       if---else:
       在Verilog HDL 中将else 与最近的没有else  的if  相关联。
        书写格式:
      (1)条件表达式需用括号括起来。
      (2)若为if - if  语句,请使用块语句 begin --- end  :
            if(C l k)
            begin
                      if(R e s e t)
                              Q = 0;
                      else
                              Q = D;
           end
     (3)对if 语句,除非在时序逻辑中,if 语句需要有else 语句。若没有缺省语句,设计将产生一个锁存器,锁存器在ASIC设计中有诸多的弊端(可看同步设计技术所介绍)。
     case 语句:case  的缺省项必须写,防止产生锁存器。
     7. 对悬空端口的处理:对输入管脚悬空的,则该管脚输入为高阻 Z ,输出管脚被悬空的,该输出管脚废弃不用。
         不同端口长度的处理:当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹配。
六、赋值语句
     1. 连续赋值语句:
       数据流的描述是采用连续赋值语句(assign ) 语句来实现的。语法如下:assign    net_type   =   表达式;连续赋值语句用于组合逻辑的建模。
     2. 阻塞赋值语句:“= ”用于阻塞的赋值,凡是在组合逻辑(如在assign  语句中)赋值的请用阻塞赋值。
     3. 过程赋值语句:
         Verilog HDL 中提供两种过程赋值语句 initial  和 always  语句,用这两种语句来实现行为的建模。这两种语句之间的执行是并行的,即语句的执行与位置顺序无关。
         这两种语句通常与语句块(begin ....end )相结合,则语句块中的执行是按顺序执行的。
注意以下几点:
1 、对组合逻辑的always 语句,敏感变量必须写全,敏感变量是指等式右边出现的所有标识符。
2 、对组合逻辑器件的赋值采用阻塞赋值  “= ”
3 、时序逻辑器件的赋值语句采用非阻塞赋值  “<=”,如上的 Q 〈=  D ;
 

转载于:https://www.cnblogs.com/anne-vista/archive/2013/04/04/2999568.html

你可能感兴趣的文章
Python中list的拷贝问题
查看>>
Java学习第二周学习笔记
查看>>
SQL基本语句
查看>>
linux-Centos7安装python3并与python2共存
查看>>
redis 安装 yum install gcc tcl
查看>>
序时薄二次开发(新增按钮)
查看>>
PHP实现根据浏览器跳转不同语言页面代码
查看>>
四、XML语言学习(1)
查看>>
无线网络发射选址
查看>>
unix系统编程小结(一)------文件I/O
查看>>
一些算法的了解
查看>>
Leetcode: House Robber II
查看>>
Log4j自定义Appender
查看>>
返回绝对值--Math.Abs 方法
查看>>
教你控制 RecyclerView 滑动的节奏
查看>>
冲刺周2
查看>>
静态库lib、动态库dll基础
查看>>
day22 Python shelve模块
查看>>
Win10 收件箱添加QQ邮箱(2019年5月19日)
查看>>
【JavaScript】call和apply区别及使用方法
查看>>