Verilog学习笔记

这篇博客详细介绍了Verilog语言的基础知识,包括模块端口定义、功能定义、数据类型、数字表示、参数型、变量、内存操作、基本运算符、赋值与块语句、循环语句以及结构语句。重点讲解了在Verilog中如何定义模块、使用assign和always语句,以及reg和wire类型的差异。此外,还涵盖了任务和函数的声明与调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、模块的端口定义

module 模块名(口1,口2,口3……) 输入和输出端口可以定义在模块定义内

2、功能定义 组合逻辑

①assign

② and or 等元件库名称(以上两种同时执行)

③、always(模块内顺序执行,always间同时执行)

逻辑电路or时序电路 always@(posedge clk or posedge clr) 上升沿触发

4、数据类型

reg

wire

integer

parameter

5、数字 

默认十进制 其他进制需定义 x表示不定值 z表示高阻值

负号必须放在最前方

下划线用在具体数字之间

6、参数型

右边是常数表达式,用来定义延迟长度和变量宽度

在一个模块中改变另一个模块的参数时,需要使用defparam命令

7、变量

wire型常用来表示assign连接的组合逻辑信号

reg型 可以改变值,在always块内定义的每一个信号都必须定义为reg型,初始值为不定值。表示操作数时为无符号数,

当一个四位的寄存器用作表达式中的操作数时,如果开始寄存器被赋值-1,则在表达式中进行运算时,其值被当做+15.(四位是16 16-1=15)

8、memory

reg [n-1:0] 存储器名[m-1:0] 表示n个存储器中有m个寄存器(地址范围)

reg [n-1:0]  rega;可以直接赋值,rega=0;

reg mema [n-1:0];n个一位寄存器构成的存储器组,不可以直接赋值,需要具体赋值某一位,mema[3]=0,第三个存储单元为0 (取地址)

9、基本运算符

% 求余运算  如果有一个操作数有不定值x,则整个结果也为不定值x

位运算符(~,&,|,^(异或),^~(同或))

不同长度的位运算,右端对齐,高位用0填满

===对不定值和高阻值也进行比较,常用语case表达式,==不比较x和z

移位运算符 <<左移 >>右移 定义的位数也会改变

位拼接运算符

   {信号1的某几位,信号2的某几位,…… } 不允许存在没有指明位数的信号

   位拼接可以重复使用 {4{w}} wwww

缩减运算符

  第一位与第二位进行或与非运算,然后结果与第三位比较 类似 reg [3:0] B;reg C;C=&B;即把B按位依次与运算

10、赋值语句和块语句




always块 如果在给定的条件下变量没有赋值,这个变量将保持原值,也就是说会生成一个锁存器

11、循环语句

forever 产生周期性的波形 用来作为仿真测试信号 必须写在inital块中

repeat 连续执行一个语句n次

12、结构语句

initial 初始化

always 不断重复执行 和一定的时序控制结合在一起 边沿触发or电平触发

任务:

task <任务名>

<端口及数据类型声明语句>

...

endtask

调用: <任务名>(端口1,端口2,...端口n)

function<返回值的类型或范围>(函数名)

<端口说明语句>

<变量类型说明语句>

...

endfunction




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值