Verilog 基础知识- Verilog 基础语法与注意事项

基础知识

1  模块(Module)

     Verilog中的module可以看成一个具有输入输出端口的黑盒子,该黑盒子有输入和输出接口(信号),通过把输入在盒子中执行某些操作来实现某项功能。(类似于C语言中的函数)

图片

图1  模块示意图

1.1 模块描述

   图1 所示的顶层模块(top_module)结构用Verilog语言可描述为:

图片

 🔹 模块以module 开始,endmodule结束

 🔹 top_module 为模块名

 🔹 input : 为输入端口

 🔹 output:  为输出端口

 🔹 所有代码必须处于module模块中!

    同理,图1 所示的次级模块(mod_a)结构用Verilog语言可描述为:

图片

    注意事项:每个模应单独块处于一个.v文件中,模块名即为文件名(规范代码!)

1.2  模块输入输出信号

  🔹  输出:output

  🔹  输入:input

    模块的输入输出端口都可看出模块的信号,若不写信号类型则默认为wire类型信号!

图片

 除了wire型信号,还有reg型信号,具体详见1.4节!

1.3 模块实例化

如图1所示,top_module的两个输入端口连接到次级模块(mod_a)的输入端口,那如何在top_module模块模块中使用mod_a模块的功能呢?这就需要通过模块实例化,可以把top_module看成C语言中的主函数,次级模块mod_a看成普通函数,这样就可以在主函数中调用其他函数来完成相应的功能!

 在top_module中实例化mod_a的方式为:

 模块实例化语法:模块名 实例名(定义连接port的信号);

图片

 🔹 按mod_a定义的端口顺序实例化: mod_a instance1 (a, b, out);

 🔹 按mod_a端口名实例化: mod_a instance2 (.in1(a), .in2(b), .out(out));   (推荐此种写法)

2  逻辑块(always、generate)

2.1 always逻辑块

      always块可构建 组合逻辑块 和 时序逻辑块,复杂的逻辑操作都需要处于该逻辑块中,如if、case、for等

(1) 组合逻辑块

图片

 🔹 always逻辑块中任意信号变化时立即触发,执行begin - end之间的语句

 🔹 begin - end用于将多条语句组成一个代码块,只有一条语句时可省略

(1) 时序逻辑电路

图片

 🔹  clk 信号的上升沿触发

 🔹  posedge:  上升沿

 🔹  negedge: 下降沿

2.2 generate逻辑块

 generate主要结合for循环使用,主要用途有:

 🔹 对向量中的多个位进行重复操作

 🔹 对同一个模块进行多次重复实例化(主要用途)

(1) 操作向量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值