野火FPGA学习笔记-08 Verilog HDL语言基础语法

目录

8.3.3、常量

1. 常量是 Verilog 中不变的数值,Verilog 中的常量有三种类型

3. 整数型常量也可以采用基数表示法表示,

4. 基数表示法的基本格式

8.3.4 变量

8.3.6 赋值语句

8.3.12 优先级

8.3.13 位拼接运算符 

 8.3.16 Verilog 语言中的系统任务和系统函数


8.3.3、常量

1. 常量是 Verilog 中不变的数值,Verilog 中的常量有三种类型

(1) 整数型; (2) 实数型; (3) 字符串型。

3. 整数型常量也可以采用基数表示法表示,

例如: (1) 8’hab 表示 8bit 的十六进制数,换算成二进制是 1010_1011;

(2) 8’d171 表示 8bit 的十进制数,换算成二进制是 1010_1011;

(3) 8’o253 表示 8bit 的八进制数,换算成二进制是 1010_1011;

(4) 8’b1010_1011 表示 8bit 的二进制数,二进制就是 1010_1011。

4. 基数表示法的基本格式

(1) [换算为二进制后位宽的总长度][’][数值进制符号][与数值进制符号对应的数值] 其中[位宽的总长度]可有可无,[数值进制符号]中如果是[h]则表示十六进制,如果 是[o]则表示八进制,如果是[b]则表示二进制,如果[d]则表示十进制。当[换算为 二进制后位宽的总长度]比[与数值进制符号对应的数值]的实际位数多,则自动在 [与数值进制符号对应的数值]的左边补足 0,如果位数少,则自动截断[与数值进 制符号对应的数值]左边超出的位数。

(2) 如果将数字写成“’haa”,那么这个十六进制数的[换算为二进制后位宽的总长 度]就取决于[与数值进制符号对应的数值]的长度。

(3) 在基数表示法中如果遇到 x,则在十六进制数中表示 4 个 x,在八进制中表示 3 个 x。

(4) 另外,数字中的下划线没有任何意义,但是可以很好的增强可读性,推荐每 4 个 bit 后加一个下划线,例如:4’b11011011 和 4’b1101_1011 表示的是一样的 值,但是后面的看上去更容易识别。

8.3.4 变量

1. 线网型:表示电路间的物理连接;

2. 寄存器型:Verilog 中一个抽象的数据存储单元。 线网型和寄存器类型具体又包含很多种变量,线网型变量最常用的变量就是 wire,而 寄存器型最常用的变量是 reg。wire 可以看成直接的连接,在可综合的逻辑中会被映射成一 根真实的物理连线;而 reg 具有对某一个时间点状态进行保持的功能,如果在可综合的时 序逻辑中表达,会被映射成一个真实的的物理寄存器,而在 Verilog 仿真器中,寄存器类型 的变量通常要占据一个仿真内存空间。

因此在设计逻辑的时候要明确定义每个信号是 wire 还是 reg 属性。凡是在 always 或 initial 语句中被赋值的变量(赋值号左边的变量),不论表达的是组合逻辑还是时序逻辑, 都一定是 reg 型变量;凡是在 assign 语句中被赋值的变量,一定是 wire 型变量。

testbench中待测试RTL模块的输入永远是reg型

testbench中待测试RTL模块的输出永远是wire型

8.3.6 赋值语句

赋值语句的赋值方式有两种,分别为“<=”(非阻塞赋值,只能用于书序语句中)和“=”(阻塞赋值,顺序执行)。

a=1;b=2;c=3

begin

        a=b;

        c=a;

end

输出结果a=2;b=2;c=2;

a=1;b=2;c=3

begin

        a<=b;

        c<=a;

end

 输出结果a=2;b=2;c=1;

8.3.12 优先级

总的优先级关系为:归约运算符 > 算数运算符 > 移位运算符 > 关系运算符 > “= =” 和“!=”> 按位运算符 > “&&”和“||”> 条件运算符,总的来说是一元运算符 > 二元运 算符 > 三元运算符。

8.3.13 位拼接运算符 

位拼接运算符由一对花括号加逗号组成“{ , }”,拼接的不同数据之间用“,”隔 开。位拼接运算符的作用主要有两种,一种是将位宽较短的数据拼接成一个位宽长的数 据;另一种是可以通过位拼接实现移位的效果。 

 8.3.16 Verilog 语言中的系统任务和系统函数

`timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度

时间单位和时间精度由值 1、10、和 100 以及单位 s、ms、us、ns、ps 和 fs 组成。

时间单位:定义仿真过程所有与时间相关量的单位。

仿真中使用“#数字”表示延时相应时间单位的时间,例#10 表示延时 10 个单位的时间, 即 10ns。

时间精度:决定时间相关量的精度及仿真显示的最小刻度。

`timescale 1ns/10ps 精度 0.01,#10.11 表示延时10.11ns也就是延时 10110ps。

下面这种写法就是错误的,因为时间单位不能比时间精度小。

`timescale 100ps/1ns

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
红绿灯控制程序是一种重要的交通信号控制系统,它为行人和车辆提供安全和有序的通行环境。在EDA(电子设计自动化)课程中,我们可以使用VerilogHDL语言编写一个红绿灯控制程序。 首先,我们需要定义模块的输入和输出。输入可以包括信号灯的控制信号、定时器计数信号以及其他传感器信号。而输出是交通信号灯的显示状态。 然后,我们可以使用状态机的概念来设计红绿灯控制程序。状态机通常包含多个状态和状态之间的转换条件。在这个例子中,我们可以定义两个状态:红灯和绿灯。初始状态可以是红灯。我们还可以定义一个定时器,用于确定每个状态的持续时间。 在状态机中,我们可以根据不同的条件进行状态转换。例如,当红灯状态持续一定的时间后,我们可以通过切换控制信号来使绿灯亮起。同样地,当绿灯状态持续一定的时间后,我们可以切换回红灯状态。 为了实现这一切,我们可以在状态机中使用计数器,递增计数器的值,当计数器到达阈值时,进行状态切换。同时,我们也需要适当地处理输入信号,例如行人过马路的信号,来处理红灯状态的延长或绿灯状态的缩短。 最后,我们需要将设计好的VerilogHDL代码进行编译和合成,并通过仿真或实际硬件进行验证和测试。通过仿真和测试,我们可以确保红绿灯控制程序的正确性和性能。 红绿灯控制程序是交通基础设施中不可或缺的一部分,通过EDA课程的学习,我们可以使用VerilogHDL语言编写出高效可靠的红绿灯控制程序,为我们的城市交通安全提供保障。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值