01-Verilog基础

2023-02-28,

Verilog RTL编程实践

在进行数字IC设计过程中,RTL coding能力是非常重要的。结合逻辑仿真(VCS)和逻辑综合(Design Compiler)工具。看RTL。

1 ASIC Design Flow

    IDEA
    Design specification
    Design entry/Verilog Coding
    Simulation/function verification
    chip integration/verificattion
    Sysnthesis/Pre layout/Timing/formal verification
    scan chain insertion/Test;Generation/fault simulation
    physical design
    To sign off
    production ready masks

    数字IC设计流程需要了解,这里简单介绍一下。

ALU描述Spec-->RTL-->进行逻辑仿真-->将RTL转化为Gate Netlist(使用逻辑综合工具)-->layout-->production

2 什么是Verilog?

Verilog VHDL--寄存器级硬件描述语言,基于C语言进行设计的。

2005年,在verilog基础上,出现了system verilog,三大属性Design、Verificaiton、Assertion。

verilog从84年开始出现,到现在已经经过了三四十年的发展,但是仍然适用很多公司的开发。

verilog在芯片设计和芯片验证领域使用非常广泛。

2.1 推荐阅读

IEEE1364 standard;SystemVerilog IEEE 1800
Digital VLSI design with Verilog

3 verilog语义语法

3.1 verilog缺点

只用于描述数字电路,不用于模拟电路的设计。

3.2 Verilog语言层次

Behavioral--行为级,加法,乘法等。
RTL--寄存器传输级(Register Transition Level),触发器(DFF),verilog中没有对于DFF进行建模,使用always进行建模。
Gate--门级电路,与非门等,Verilog中对于门级电路是有建模的。
Layout(VLSI)--画管子,源极、栅极、漏极。

3.2 module

module adder_4_RTL(a,b,c_in,sum,c_out);
output[3:0] sum;
output c_out;
input[3:0] a,b;
input c_in; assign{c_out,sum}=a+b+c_in; 行为级描述,可以进行综合
endmodule
    module name(数字、字母、下划线、$)
    module module_name(端口名)
    input/output[位宽]--[3:0]表示4位的位宽
    assigin--连续赋值语句,将左侧和右侧进行连接,主要对于组合逻辑电路进行建模
    {MSB(最高位),LSB(最低位)}--表示拼接符
    endmodule--结束模块

3.3 structure model(门级建模)

使用门级进行描述

module mux(f,a,b,sel);
output f; 输出
input a,b,sel; 输入 and #5 g1(f1,a,nsel); #5表示输入到输出有一个延时,#5表示多少取决于timescale(仿真的精度和单位)
and #5 g2(f2,b,sel);
or g4(nsel,sel);
endmodule /*
and--表示实例化一个与门
g1--实例化门的名称
(f1,a,nsel)--f1表示与门的输出,a表示出入,nsel-表示sel取反;
nsel--sel取反(经过一个反相器)之后得到nsel
or--表示或门
门级模块的建模往往第一个是输出,后面的是输入
*/

3.4 concepts--概念

1 concurrency--并发性

C语言是从上向下执行的,硬件是不同的,同时有很多电路进行工作。

2 structure

verilog有门级建模

3 Procedural Statements

过程化执行,从上到下执行。

4 Time

Verilog中有时序的概念

3.5 identifiers--标识符

标识符以数字、字母、下划线、$组成
不能以数字和$进行开头
verilog是大小写敏感的语言
书写变量的时候尽量有意义

3.6 comments--注释

//单行注释
/xxxxxx/ 多行注释

3.7 Value Set

verilog对于硬件进行建模。

0--低电平或者假
1--高电平或者是真
x--未知的逻辑状态,亚稳态就是会产生未知状态
z--高阻抗状态,在电路中挂一个高电阻

3.8 number

'

size--位宽
radix--进制,b/B表示二进制,o/O表示八进制,d/D表示十进制,h/H表示十六进制
value--数值,0-f,x,z

位宽相当于走线

-8'h ax =1010xxxx
-12'o 3zx7=011zzzxxx111

注意

十六进制,一位可以使用四位二进制数进行表示
八进制,一位可以使用三位二进制数进行表示
十六进制a--1010
十六进制5--0101
有些电路中可以使用55和aa可以进行简单的验证

数字中可以插入下划线

//数字中插入下划线是用与分割长的数字
-12‘b 000_111_010_100
-12'b 000111010100
-12'o 07_24

位扩展

最高位是0,x,z是可以进行扩展的,最高位位1的时候是不能进行扩展的

4'b x1=4'b xx_x1
//最高位是x,所以进行了扩展 4'b 1x=4'b 00_1x
//1是不能向高位进行扩展的,如果能扩展结果变为
// 4'b 111x 结果错误
// SV中进行了语法的改进

默认

size--不写,根据值进行推断
radix--不写,默认是十进制

3.9 nets-线网

可以认为是被逻辑驱动的硬件连线

z--表示不连接,没有连线的状态
wire--线
wand--线与
wor--线或
tri--三态

nets建模

对于上述的图片解释:

    使用wire 变量 声明一根线Y a,b改变 y就发生变化
    assign--讲左右进行连接
    &--按位与

01-Verilog基础的相关教程结束。

《01-Verilog基础.doc》

下载本文的Word格式文档,以方便收藏与打印。