Verilog数字系统设计(夏宇闻)学习笔记(二)

3.1 模块的结构

模块是Verilog的基本设计单元。包括接口描述和逻辑功能描述两部分。
每个verilog程序包括4个主要部分:端口定义I/O口说明内部信号声明功能定义

(1) 端口定义

格式为:

 module 模块名(口1, 口2, 口3, …)

引用时,用”.”符号,标明原模块时定义时规定的端口名,格式为
模块名(.端口1名(连接信号名1), .端口2名(连接信号名2),…)
例如:

MyDesignMK M1(.sin(SerialIn), .pout(ParallelOut), …)

(2) 模块内容

I/O口说明的格式
输入口:input[信号位宽-1: 0] 端口名;
输出口:output[信号位宽-1: 0] 端口名;
输入/输出口:inout[信号位宽-1: 0] 端口名;

I/O说明也可以写在端口声明语句里,其格式如下:

module module_name(input port1, input port2, output port1, inout port1, …)

(3) 内部信号说明

wire和reg类型变量,如

reg[width-1: 0] 变量1, 变量2…;
wire[width-1: 0] 变量1, 变量2…;

(4) 功能定义

  • 用”assign”声明语句,例如:assign a = b & c;
  • 用实例元件,如:and #2 u1(q, a, b)。”#2”表示延迟两个单位时间。
  • 用“always”块,如:always @(posedge clk or posedge clr);

并行发生的:assign, 实例元件和always块三者是并行发生的。
顺序发生的:always块里的语句是顺序执行的。if…else…if是顺序执行的。


3.2 数据类型及其常量和变量

4种基本数据类型:reg型wire型integer型parameter型

3.2.1 常量

(1) 数字
- 整数:<位宽><进制><数字>,例如8’d10101010;
缺省位宽时,默认为32位;缺省进制时,默认为十进制。
二进制整数(b或B);十进制整数(d或D)
十六进制整数(h或H);八进制整数(o或O)
- x和z值:x代表不定值,z代表高阻值。一个x或z等同于十六进制数的4位二进制数状态、八进制数的3位或二进制的1位。”z”也可写成“?”。
- 负数:在位宽表达式前加一个减号,例如:-8‘d5。
- 下画线:分隔开数的表达,以提高可读性,不参与编译。例如:

16’d1010_1010_1010_1010.

(2)参数(parameter)型

用parameter来定义符号常量。格式:paremeter 参数名1=表达式1, 参数名2=表达式2, …

在模块或实例引用时,可通过参数传递改变被引模块中的参数。例如

module Decode(A, F);
    parameter Width = 1, Polarity = 1;
    ....
endmodule

module Top;
wire [3:0]   A4;
wire [4:0]   A5;
wire [15:0]  F16;
wire [31:0]  F32;
Decode #(4,0)   D1(A4, F15)
Decode #(5)   D2(A5, F32);
endmodule

D1中Width和Polarity分别为4, 0。
D2中Width为5,Polarity不变仍然为1。
也可通过defparam来改变另一模块的参数。详见教材

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值