• 搜索

  • 移动端

    APP下载
  • 学习中心

Verilog语言(数字逻辑课程笔记一)
2023-11-20 15:53:53323浏览
你想知道的Verilog问题,都能在这里找到答案

数字IC设计基本上都要学习Verilog,这是从业者的基本功,在数字IC设计岗位面试中就时常会问到verilog的一些问题。之前分享过一Verilog的资料,受到大家的欢迎,时至今日还有不少同学在后台留言获取资料。识别下方二维码获取资料:


今天为大家分享《Verilog语言简介(数字逻辑课程笔记)》,干货满满,点赞收藏。


概念

Verilog是一种硬件描述语言:用形式化方法(文本形式)来描述和设计数字电路和数字系统的高级模块化语言。可编写设计文件、建立电路模型、编写测试文件进行仿真。

数据类型

1.变量值

0:代表逻辑0或否条件;在电路中一般是低电平

1:代表逻辑1或真条件;在电路中是高电平

X:代表未知的逻辑值(可能为0或1);一般是寄存器类型(reg)未初始化

Z:代表一个高阻态;是线型(wire)变量未接驱动

2.wire & reg

wire: 线网; 用来表示硬件单元之间的物理连线

1  wire a;

2  wire b;

3  wire c=1'b0;

reg: 寄存器; 用来表示存储单元

1   reg rstn;

2   initial begin

3      rstn=1'b0;

4      #100;

5      rstn=1'b1; 

end

3.向量vector

标量Scalar: 1-bit位宽的线网或寄存器类型
wire n1;
reg d1;

向量Vector:n-bit位宽的线网或寄存器类型
wire [3:0] n0;
reg[3:0] d0;

4.数组Array

在Verilog中允许声明reg, wire, integer, time, real及其向量类型的数组

1 // y is an scalar reg array of  depth=12, each 1-bit wide

2 reg y1[11:0];

3 //y is an 8-bit vector net with a depth of 4

4 wire [0:7] y2 [3:0];

5 //y is a 2D array rows=2, cols=4 each 8-bit wide

6 reg [7:0] y3 [0:1][0:3];


存储器:寄存器数组模拟存储器,可用来描述RAM或ROM的行为

module des();

//reg vector 8-bit wide

reg [7:0] mem1;

//8-bit wide vector array with depth=4;

reg [7:0] mem2 [0:3];

//16-bit wide vector 2D array with rows=4, cols=2

reg [15:0] mem3[0:3][0:1];


initial begin

 mem=8'ha9;

 $display("mem1 = 0x%0h", mem1);

7395486

5.其他类型

integer: 32位宽的通用整型变量,可在对硬件建模时用于其他目的(可综合)

time: 无符号64位宽,可用于存储仿真时间量以进行仿真调试,realtime变量时将时间存储为浮点数(不可综合)

real:实数变量,可存储浮点值, 可以与integer和reg相同的方式进行赋值(不可综合)

string:字符串,存储在reg中, reg变量的宽度必须足够大以容纳字符串(可综合)


模块构建






Verilog的基本设计单元是模块。

模块由四个主要部分组成:

端口定义:module 模块名(端口1,端口2,…)

I/O说明:包括输入(input)、输出(output)和双向(inout)

信号类型声明:声明信号的数据类型和函数声明wire,reg,integer,real,time

功能描述:用来描述设计模块的内部结构和模块端口间的逻辑关系。常用assign语句、always块语句等方法实现

module block1(a,b,c,d);

input a,b,c;

output d;

wire x;

assign d=a|x;

assign x=(b&~c);

endmodule

模块是一个具有特定功能的设计单元,在电路综合时模块会被转换为相应的数字电路
给定模块一组输入,模块会返回一组输出,这意味着模块可以被重复使用,由此来实现更复杂的电路
按照如下形式来实例化模块:

module mod1(input d,...);

//contents of the module

endmodule


module mod2;

   wire data;

   mod1 u0(.d(data),...);

   //contents of the module

endmodule

操作符

操作符也称运算符, 是Verilog HDL预定义的函数符号。

● 在逻辑运算中,如果操作数不止一位,应将操作数作为一个整体来对待;

● 两个不同长度的操作数进行位运算时,将自动按右端对齐,位数少的操作数会在高位用0补齐。

● 关系运算符优先级低于算术运算符,返回结果为逻辑值,0或1或x;

● 等于运算符(= =)和全等运算符(===)的区别: 使用等于运算符时,两个操作数必须逐位相等,结果才为1,若某些位为x或z,则结果为x;使用全等运算符时,若两个操作数的相应位形式上完全一致,则结果为1,否则为0.

 文章长度有限,该学习笔记将持续更新,点赞收藏。

来自CSDN秘密果酱博主的,已获博主许可,转载请联系博主。

公司总部

电话:199 2141 1380
地址:上海市浦东区碧波路690号张江微电子港7号楼

合肥分站

电话:199 2141 1380
地址:安徽省合肥市高新区创新大道2800号创新产业园二期E1栋

产品链接

移知官网:www.eeeknow.com
教育培训:edu.eeeknow.com
求职招聘:job.eeeknow.com

友情链接

Arm
  • 在线客服
  • 就业老师