FPGA_verilog学习1_verilog模块的模板

本文解析了Verilog模块中如何设计一个基本的与-或-非门电路,介绍了assign连续赋值和always过程块的使用。涉及端口定义、数据类型和逻辑功能的编程细节。

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

1.一个简单的与-或-非门电路

module aoi(
    a,
    b,
    c,
    d,
    f
);
    input a,b,c,d;
    output f;
    wire a,b,c,d,f;
    

//用assign持续赋值语句定义
//assign 语句一般用于组合逻辑的赋值,称为持续赋值方式。赋值时,只需将逻辑表达式放在关键字assign后即可
assign f = ~ ( (a & b) | ~( (c & d) ) );
    
//
//用always过程块定义
//always@(a or b or c or d)
//always@(*)统配符,等价于a or b or c or d



endmodule


(1) 每个模块首先要进行端口定义,并说明输入和输出口(input 、output 或 inout)之后对模块的功能进行定义

input   输入端口  ;

output 输出端口;

inout   双向端口;

2. Verilog模块的基本结构

Verilog 模块的基本结构

//
// 
module 名字(端口列表) :
端口定义
input  输入端口
output 输出端口
inout  双向端口

//
//
数据类型说明 :
wire
reg 
parameter

//
// 
逻辑功能定义 :
assign
always
function
task
...


(1)每个端口除了要声明是输入、输出还是双向端口外,还要声明其数据类型,是wire型、reg型还是其他类型

(2)输入和双向端口不能声名为寄存器型

(3)测试模块中不需要定义端口

3. Verilog模块的模板:

module <顶层模块名> (输入输出端口列表)
input  输入端口列表;               //输入端口声明
output 输出端口列表;               //输出端口声明

///
//
定义数据, 信号的类型, 函数声明, 用关键字 wire,reg,task, funtion等定义
wire 信号名;
reg  信号名;

///
//
逻辑功能定义
assign <结果信号名> = <表达式>;

///
//
用always块描述逻辑功能
always@(*)//敏感信号表达式
begin

//过程赋值
//if-else,case语句,for循环语句
//task,function调用
   
end

///
//
调用其他模块
<调用模块名> <例化模块名> (<端口列表>);

门元件例化
门元件关键字 <例化门元件门> (<端口列表>);

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值