Verilog HDL学习笔记1

1.Verilog HDL 程序结构

1.1 端口说明

模块端口是指模块与外界交互信息的接口,包括3 种类型:

(1)input: 输入端口,模块从外界读取数据的接口,在模块内不可写
(2)output:输出端口,模块往外界送出数据的接口,在模块内不可读
(3)inout:输入输出端口,也成为双向端口,可读取数据也可以送出数据,数据可双向流动。

1.2 模块例化

(1)位置映射法
 语法:
模块名 例化名 (连接端口1 信号名, 连接端口2 信号名, 连接端口3 信号名,…);

compare_core   inst_compare(
result0, a0,b0
);

(2)信号名称映射法
 语法
模块名 例化名
(.端口1 信号名(连接端口1 信号名),
.端口2 信号名(连接端口2 信号名),
.端口3 信号名(连接端口3 信号名),…
);

compare_core   inst_compare(
.result(result0),
.a(a0),
.b(b0)
);
//悬空处理1
compare_core   inst_compare(
.result(result0),
.a(),//引脚悬空,对输入引脚是高阻态;输出引脚,弃用
.b(b0)
);
//悬空处理2
compare_core   inst_compare(
.result(result0),
//.a(a0),//引脚悬空,对输入引脚是高阻态;输出引脚,弃用
.b(b0)
);

1.3 参数映射

(1)使用“#”符号传参

module_name #( parameter1, parameter2) inst_name( port_map);
module_name #( .parameter_name(para_value), .parameter_name(para_value))
inst_name (port map);

(2)使用defparam 关键字

defparam   heirarchy_path.parameter_name = value;//heirarchy_path.parameter_name是绝对路径

2 行为级描述

2.1 串行begin…end

在可综合语句中,begin……end 块内的语句在时序逻辑中本质上是并行执行的,和语句的书写顺序无关.

2.2 并行fork…join

fork…join是不可综合语句,只能用于仿真

2.3 initial 模块

initial  begin/fork
//块内变量说明
时序控制1 行为语句1;
……
时序控制n 行为语句n;
end/join

initial模块是不可综合的,常用于仿真代码的变量初始化中。
  在进行仿真时,一个initial 模块从模拟0 时刻开始执行,且在仿真过程中只执行一次,在执行完一次后,该initial 就被挂起,不再执行。如果仿真中有两个initial 模块,则同时从0 时刻开始并行执行。

2.4 always 模块

always 模块是一直重复执行的,并且可被综合

always @ (敏感事件列表) begin/fork
//块内变量说明
时序控制1 行为语句1;
……
时序控制n 行为语句n;
end/join

敏感事件表由一个或多个事件表达式构成,事件表达式就是模块启动的条件.

3 Verilog HDL 语言基本要素

3.1 基数格式整数表示

[长度] ‘基数  数值
长度是常量的位长,基数可以是二进制、十进制、十六进制之一。数值是基于基数的数字序列,且数值不能为负数。

你可能感兴趣的:(个人)