硬件语言 Verilog HDL 学习 day01 了解基本知识,基本语法2,运算符,表达式

1.数字集成电路设计

数字集成电路设计方法的演变:

1. 以元件为基础

2.以单元为基础,

3.以 RTL 综合为基础

4. 以IP为基础。


2.集成电路的发展阶段

1. 第一阶段:以加工制造为主导的 IC  产业发展的初级阶段  (产品: 简单的微处理器

2.第二阶段: 是标准工艺加工线公司与IC 设计公司共同发展的阶段  (产品: MPU,微处理器)

3.第三阶段: IC产业的 四业 开始分离,功能强大的通用型中央处理器 和信号处理器

4.第四阶段: IC 产业开始以 Fundry 为主导,IP的使用广泛。


3.功能模块的可重用性

1. 软核(Soft IP Core)
软核在EDA 设计领域指的是综合之前的寄存器传输级(RTL) 模型;具体在FPGA 设计中指的是对电路的硬件语言描述,包括逻辑描述、网表和帮助文档等。软核只经过功能仿真,需要经过综合以及布局布线才能使用。其优点是灵活性高、可移植性强,允许用户自配置;缺点是对模块的预测性较低,在后续设计中存在发生错误的可能性,有一定的设计风险。软核是IP 核应用最广泛的形式。

2. 固核(Firm IP Core)
固核在EDA 设计领域指的是带有平面规划信息的网表;具体在FPGA 设计中可以看做带有布局规划的软核,通常以RTL 代码和对应具体工艺网表的混合形式提供。将RTL 描述结合具体标准单元库进行综合优化设计,形成门级网表,再通过布局布线工具即可使用。和软核相比,固核的设计灵活性稍差,但在可靠性上有较大提高。目前,固核也是IP 核的主流形式之一。

3. 硬核 (Hard IP Core)
硬核在EDA 设计领域指经过验证的设计版图;具体在FPGA 设计中指布局和工艺固定、经过前端和后端验证的设计,设计人员不能对其修改。不能修改的原因有两个:首先是系统设计对各个模块的时序要求很严格,不允许打乱已有的物理版图;其次是保护知识产权的要求,不允许设计人员对其有任何改动。IP 硬核的不许修改特点使其复用有一定的困难,因此只能用于某些特定应用,使用范围较窄。
 



4.Verilog HDL  语言要素

1.空白符  :空格符(\b),制表符(\t),换行符,换页符,

2.注意符 :  //  注释一行,   注释多行 /*   */     (注释最好是英文)

3.标识符:   标识符包含:字母,数字,$, _ (下划线),  开头只能是 字母和下划线

4.转义标识符: \

5.关键字: 系统自带的标识符,有固定的意义。

6.Verilog HDL 四种状态: 0 (低电平), 1(高电平) , x(未知态) , z (高阻态)-》总线

7.负数,  补码形式存在

8. 数值进制 , 二进制 b/B, 八进制 o/O, 十进制 d/D,  十六进制 h/H.

9.整数表示,

10.实数表示: (不能用于设计) 十进制表示,  科学计数法,



5.数据类型

物理数据类型:连线型、寄存器型和存储器型数据类型;信号强度表示数字电路中不同强度的驱动源,用来解决不同驱动强度存在下的赋值冲突:

驱动能力:
                                       

标记符   名称     类型强弱程度
supply 电源级驱动驱动最强
strong   强驱动   驱动 逐渐下降
pull上拉级驱动驱动逐渐下降
large大容性存储逐渐下降
weak弱驱动驱动逐渐下降
medium中性驱动存储逐渐下降
small小容性存储逐渐下降
highz高容性高阻



 


连线型数据类型:

连线型数据类型功能说明
wrie,tri标准连线 (缺省为该类型)
wor,trior多重驱动时,具有线或特性的连线型
wand,trand多重驱动时,具有线与特性的连线型
trireg具有电荷保持特性的连线型数据
tri1上拉电阻
tri0下拉电阻
supply1电源线,用于对电源建模,为高电平1
supply0电源线,用于对地 建模, 为低电平0


寄存器: reg型

reg型是数据储存单元的抽象类型,其对应的硬件电路元件具有状态保持作用,能够存储数据,如触发器、锁存器等。
reg型变量常用于行为级描述,由过程赋值语句对其进行赋值。
reg型变量简单例子,
reg a:   //定义一个一也的名为a的reg变量
reg [3:0] b:  //  定义一个4位的名为b的reg型变量
reg[8:1]c.d.e;   //定义了三个名称分别为c、d、 e的8位的reg型变量

reg型变量一般为无符号数,若将一个负数赋给reg型变量,则自动转换成其二进制补
码形式。例如:
reg signed[3:0]rega;

rega=-2;  // rega的值为1110(14),是2的补码

原码: 0010

反码: 1101

补码: 1110



5.运算符与表达式

1.算数操作符,  加法(+),减法(-),乘法(*),除法(/), 取模(%)

重点:算术操作符的结果是位宽。算术表达式结果的长度是由最长操作数决定的,再赋值语句中,算术操作结果由操作最左端目标长度决定

一,加法

reg[3:0]a,b,c;
Reg[1:0]d,k;
a=4'b1001
d=2'b01

b=a+d   //b=4'b1010
k=a+d   //k=2'b10

二,减法

reg[3:0]a,b,c;
Reg[1:0]d,k;
a=4'b1001
d=2'b01

b=a-d   //b=4'b1000
k=a-d   //k=2'b00

三,乘法

reg[3:0]a,b,c;
Reg[1:0]d,k;
a=4'b1001
d=2'b01

b=a*d   //b=4'b1001
k=a*d   //k=2'b01

四,除法

reg[3:0]a,b,c;
Reg[1:0]d,k;
a=4'b1001
d=2'b01

b=a/d   //b=4'b1010
k=a/d   //k=2'b01

五,取模

reg[3:0]a,b,c;
Reg[1:0]d,k;
a=4'b1001
d=2'b11

b=a%d   //b=4'b0000
k=a%d   //k=2'b00

2.关系操作运算符 :  大于(>),小于(<),大于等于(>=) ,小于等于  (<=)  

重点:任何和不定状态的运算输出都是不定状态,但我们不会遇到,在数电中对不定状态管理非常严格。我们都知道产生不定状态只有两种情况一种是信号悬空,另一种是2个信号对一个信号驱动。(两个信号输入只有一个非门输出)

简单  (不知道对比的话,转为十进制自己看看 就行了)

重要的是:   不定态的加入

a = 3;

d = 4'hx    //不定状态

$display(a<=d)     //out x

3.相等关系符

有四种相等的关系符:  == (等于), !=(不等于)   ,  ===(全等), !==  (非全等)

重要:值得注意的是,我们经常会使用全等,因为相比较于等于,全等不会让不确定状态向下传播。还有就是不允许不同位宽信号对比。

一,== 等于关系符的 真值表

== 等于真值表
==001xz
010xx
101xx
xxxxx
zxxxx

二,=== 等于关系符的真值表  (去除了 不定态)

=== 全等于关系符真值表
===01xz
01000
10100
x0010
z0001

module xx_2;
reg[3:0]a,b,c,d;
initial
    begin
        a=4'b0xx1;
        b=4'b0xx1;
        c=4'b0011;
        d=2'b11;
        $display(a==b);   //结果为  x
        $display(c==d);   //结果为  1
        $display(a===b);  //结果为  1
        $display(c===d);  //结果为  0   (=== 算了位数在规则里面)

4.逻辑运算符  &&  (逻辑与) ,  ||  (逻辑或), !(逻辑 非)

  重点:若操作数有不定状态,则逻辑运算的结果也是不定状态

a=4'b1110;    //a=1  (可以这样理解)
b=4'b0000;    //b=0  (可以这样理解)
c=2'b10;      //c=1   (可以这样理解)

!a=0;
!b=1;
!c=0;

a&&b=0;
a&&c=0;
b&&c=0;

a||b=1;
a||c=0;
b||C=1;

5.按位操作符

按位取反“~”,按位与“&”,按位或“|”,按位异或“^”,按位同或“^~”

重点: 比较位置少的  自动补 0  比较

module bit
reg[2:0]a;
reg[3:0]b;
initial
    begin
                    // 因为 计算的时候一般是 位数相同的所以  a= 4'b   4位数
        a=4'b110;  // 运算的时候 在前面自动补一个 0  a=4'b0110
        b=4'b0001;
        $display("%b",~a);    //结果为 4'b1001
        $display("%b",~b);    //结果为 4'b1110
        $display("%b",a&b);   //结果为 4'b0000
        $display("%b",a|b);   //结果为 4’b0111
        $display("%b",a^b);   //结果为 4'b0111
    end
endmodule

6.移位操作符  << 左移   >>右移

a=4'b0110
$display("%b",a>>2);   //结果为 4'b0001
$display("%b",a<<2);   //结果为 4'b1000

7.条件运算符    (三目运算符)

module mux2(in1,in2,sel,out);
input [3:0]in1,in2;
input sel;
output [3:0]out;
reg [3:0]out;
assign out=(!sel)?in1:in2;
//sel为0时out等于inl,反之out等于in2
endmodule

8.连接和复制运算符

一,连接操作符:{信号1的某几位,......,信号n的某几位}

二,重复操作符{{}}:讲一个表达式放入最里面,外层放入复制因子。

module con11;
reg [2:0]a;
reg [3:0]b;
reg [7:0]c;
reg [4:0]d;
reg [5:0]e;
    initial
    begin
        a=3'b101;
        b=4'b1110;
        c={a,b};   //连接操作  a和b全部连接
        d={a[2:1],b[2:0]};   //连接操作  a的[2-1]位, b的 [2-0]位 连接,a在前面
        e={2{a}};// 复制操作符  复制两个a
        $display("%b",c);//结果7'b1011110
        $display("%b",d);//结果5'b10110
        $display("%b",e);//结果6'b101101
    end
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值