Verilog HDL 入门

1 基础语法

1.1 数据类型

1.1.1 基本数值种类

  • 0(逻辑 0 或 "假")

    表示逻辑低电平或布尔值假(False)。
  • 1(逻辑 1 或 "真")

    表示逻辑高电平或布尔值真(True)。
  • x 或 X(未知)

    表示信号的值不确定。在实际电路中,信号可能为 0 或 1,但具体值未知。在仿真中,x 表示信号的值在当前时刻未定义。
  • z 或 Z(高阻)

    表示信号处于高阻抗状态,即信号既不是逻辑 0 也不是逻辑 1。在输入端口没有驱动时,或者在三态逻辑中,当输出被置为高阻抗状态时,信号的值就是 z

1.1.2 整数数值表示方法

  • 基数表示法允许你指定数字的位宽和进制。格式为 <位宽><进制><数字>
  • 例如,4'b1011 表示一个4位宽的二进制数,4'd5 表示一个4位宽的十进制数,4'hA 表示一个4位宽的十六进制数,4'o7 表示一个4位宽的八进制数。
  • 如果不指定位宽,默认为32位,如 hA 等价于 32'hA
  • 如果不指定进制,默认为十进制,如 123 等价于 32'd123

1.2 变量和常量定义

1.2.1 数据类型

线网(wire)

wire 类型表示硬件单元之间的物理连线,由其连接的器件输出端连续驱动。如果没有驱动元件连接到 wire 型变量,缺省值一般为 "Z"(高阻态)。
wire   interrupt ;
wire   flag1, flag2 ;
wire   gnd = 1'b0 ;

寄存器(reg)

reg类型用来表示存储单元,它会保持数据原有的值,直到被改写。

reg    clk_temp;
reg    flag1, flag2 ;

向量

当位宽大于 1 时,wire 或 reg 即可声明为向量的形式。

reg [3:0]      counter ;    //声明4bit位宽的寄存器counter
wire [32-1:0]  gpio_data;   //声明32bit位宽的线型变量gpio_data

1.2.2 常量定义

parameter

用于定义模块端口或模块内部的可重定义参数。


作用域: parameter定义的参数在模块内是可见的,并且可以在模块实例化时重新赋值。
实例化时重定义: 在模块实例化时,可以通过指定参数值来改变parameter定义的常量值。
使用场景: 当需要在不同的模块实例中使用不同的值时,parameter非常有用。

module adder #(parameter WIDTH = 8) (
    input [WIDTH-1:0] a,
    input [WIDTH-1:0] b,
    output [WIDTH:0] sum
);
    // ...
endmodule

// 在实例化时可以改变WIDTH的值
adder #(.WIDTH(16)) my_adder_inst (
    .a(a),
    .b(b),
    .sum(sum)
);



module my_module(
    input wire clk,
    input wire [7:0] data_in,
    output wire [7:0] data_out
);
    parameter N = 8;  // 全局参数
    parameter M = 16;  // 全局参数

    // 使用参数
    wire [N-1:0] intermediate;  // 使用全局参数N
    // ...
endmodule

// 实例化模块时传递参数
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值