【了不起的底层芯片】-verilog

verilog基基础
摘要由CSDN通过智能技术生成

电路的不同等级抽象:

系统级:设计模块的外部性能模型

算法级:描述实现算法运行的模型

RTL级:描述数据在寄存器之间流动处理控制的模型

门级:描述逻辑门之间连接的模型

开关级:三级管和存储节点之间连接的模型

verilog语言适合算法级和RTL级的模型设计。

verilog基本语法

模块

程序的基本组成单元,模块由两部分组成:一部分描述模块的接口,一部分描述模块的逻辑功能,定义输入如何影响输出。

声明模块

module 模块名(接口1,接口2,接口3,...);

endmodule;//结束模块

引用其他模块

模块名(按照模块接口定义顺序依次赋予实际的信号名);

模块名(.接口1(信号名1), .接口2(信号名2),....);这样通过.接口名的方式可以建立信号关系,不用严格按照模块接口定义顺序传参,灵活。

模块内容

包括三部分:

1、I/O说明格式

输入口:

input[信号位宽--例如1:0] 接口名;

输出口:

output[信号位宽1:0] 接口名;

输入输出口:

inout [信号位宽 1:0] 接口名;

I/O说明除了可以写在模块内容中,也可以写在模块声明里:

module 模块名(input port1, input port2,...output port3,...inout port4);

2、内部信号变量定义说明

3、功能定义

主要有assign/实体元件表示/always块三种类型

这三种在代码中是并行执行的,always代码块内顺序执行;

只有assign和实例元件引用可以独立于过程块存在于模块功能定义部分。

数据类型/变量/常量

数据类型表示数字电路中的数据存储和传送元素

常量

1、数字

表示方式有三种:

<位宽><进制><数值>

<进制><数值> //位宽采用机器默认的位宽,至少32位

<数值>  //默认是十进制

位宽指名这个数占几位;

进制有二进制('b)、十进制('d)、八进制('o)、十六进制('h)

例:

8'b10001000 //8位宽二进制数10001000

2、x和z值

x表示不定值;z/?表示高阻值

例:4'b10x0 //有一位不定值

8‘h4x //十六进制低四位值不定

12'dz //12位宽10进制都是高阻值

12‘d? //同上

3、负数

在数字定义的最前加-

-8d'12

4、下划线

只可以用来分割数值,增加数值可读性

16'b1000_0101_0111_0011

常量不说明位数时默认是32位,每个字母用8位ASCII码表示

"AB" = 16'b01000001_01000010

定义常量

使用参数型数据类型parameter来定义常量:

parameter 常量 = 表达式;

parameter 常量1 = 表达式1, 常量2 = 表达式2....;

例:

parameter a = 100;

parameter b = a - 1;

参数型常量常用于定义延迟时间和变量宽度,并且引用该模块的模块可以通过传参改变被引用模块中parameter型常量的值。

例:

module Decode(A,F);
    parameter width = 1, polarity = 1;
    .
    .
    .
endmodule

module Top;
    wire[3:0] A1;
    wire[4:0] F1;
    
    Decode #(4,0) D1(A1,F1); //传入的4,1会改变本次调用Decode时parameter型参数width和polarity的值
endmodule

变量

1、网络数据类型

表示结构实体(如门)之间的物理连接。

该类变量不存储值,必须受到驱动器(如门)或者赋值语句的驱动;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值