Verilog学习-1

2.1 verilog基础语法

1、verilog是区分大小写的。每个语句必须以分号未结束符。空白符(换行,制表,空格)都没有实际的意义,在编译阶段可忽略。

2、采用"//"进行单行注释,/........./进行跨行注释

3、数值种类:verilog HDL有四种基本的值来表示硬件电路中的电平逻辑。

2.2 verilog 数值表示

0:逻辑0或“假”

1:逻辑1或“真”

x或X:未知,意味着信号数值不确定,即在实际电路里,信号可能为1,可能为0.

z或Z:高阻,意味着信号处于高阻状态,常见于信号(input, reg)没有驱动的逻辑结果。

例如:一个pad的input呈现高阻状态,其逻辑值和上下拉的状态有关,上拉则逻辑为1,下拉则为0.

整数数值的表示方法

数值声明时,合法的基数格式有4种:十进制('d或'D),十六进制('h或'H),二进制('b或'D),八进制('o或'O)。数值可指明位宽,或不指明。

4'b1011; //4bit 数值
32'h3022_c0de; //32bit十六进制的数值 
couter = 'd100;//一般会根据编译器自动分配位宽,常见32bit
2.3 Verilog数据类型

常见2种数据类型:线网(wire)和寄存器(reg)

wire类型

表示硬件单元之间的物理连线,其连接的器件输出端连续驱动。如果没有驱动单元连接到wire型变量,缺省值一般为"Z"(高阻)

wire interrupt;
wire flag1, flag2;
wire gnd = 1'b0;

寄存器reg类型

用来表示存储单元,它会保持数据的 原始值,直到被改写。例如,在always块中,寄存器可能被综合为边沿触发器,在组合逻辑中可能被综合成wire型变量,寄存器不需要驱动源,也不一定需要时钟信号。在仿真时,寄存器的值可在任意时刻通过赋值操作进行改写。

reg rstn;
initial begin
    rstn = 1'b0;
  #100;
    rstn = 1'b1;
end
向量

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

wire [32-1:0] gpio_data;//声明32bit位宽的gpio_data
reg  [3:0]    counter;//声明4bit位宽的counter
wire [8:2]    addr;//声明7bit位宽的addr
wire [0:31]   data;//声明32bit位宽的data,最高有效位0

verilog还支持指定bit位后固定位的向量域选择访问

[bit+ : width]:从起始bit位开始递增,位宽为width
[bit- : width]:从起始bit位开始递减,位宽为width
例如:
A = data[31-:8];等效A = data[31:24];
B = data[0+:8]; 等效B = data[0:7];

对信号进行重新组合成新的向量时,需要借助大括号


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值