在线网页代理网址,seo网络优化公司哪家好,赣州网上商城,南昌市做网站02 认识Verilog HDL
对于Verilog的语言的学习#xff0c;我认为没必要一开始就从头到尾认真的学习这个语言#xff0c;把这个语言所有细节都搞清楚也不现实#xff0c;我们能够看懂当前FPGA的代码的程度就可以了#xff0c;随着学习FPGA深度的增加#xff0c;再不断的…
02 认识Verilog HDL
对于Verilog的语言的学习我认为没必要一开始就从头到尾认真的学习这个语言把这个语言所有细节都搞清楚也不现实我们能够看懂当前FPGA的代码的程度就可以了随着学习FPGA深度的增加再不断的去查阅不会的Verilog的语法。例如下面这个流水灯的程序请带着能够看懂这段代码的目的去开始Verilog的入门学习吧module flow_led(input sys_clk , input sys_rst_n, output reg [3:0] led );//reg define
reg [23:0] counter;//*****************************************************
//** main code
//***************************************************** always (posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n)counter 24d0;else if (counter 24d1000_0000)counter counter 1b1;elsecounter 24d0;
endalways (posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n)led 4b0001;else if(counter 24d1000_0000) led[3:0] {led[2:0],led[3]};elseled led;
endendmodule 一. Verilog 简介
Verilog 是一种硬件描述语言FPGA 开发主要有两种语言Verilog 和 VHDL。 而 Verilog 更加容易上手 Verilog 是在 C 语言的基础上发展出来的。其语法也和 C 语言更加的接近入门更加的简单也是目前最多使用的。
特点
1. 语法自由易学易用。2.代码简单。3.发展速度快。3.适合算法级门级设计。二. Verilog 基础语法
1.逻辑值
(1) 0低电平
(2) 1高电平
(3) z : 高阻态
(4) x未知状态
2. 关键字
module endmodule input outpt inout
2.2 变量
Verilog 最常用的 2 种数据类型就是线网wire与寄存器reg。
wire : 直接的连接会被映射成真实的物理连接表示硬件单元之间的物理连线由其连接的器件输出端连续驱动。
**reg**某一时间点状态的保持会被映射成物理寄存器用来表示存储单元它会保持数据原有的值直到被改写
reg [3:0] counter ; //声明4bit位宽的寄存器counter
wire [32-1:0] gpio_data; //声明32bit位宽的线型变量gpio_data2.3 参数
二者之间有区别和联系使用到再详细结介绍。
parameter:
localparam:
2.4 常量
表示格式 [换算成二进制后的总长度][数制进制符号][与数值进制符号对应的数值]
8d171: 位宽为 8十进制的 171.
直接写 100就表示 32d100,模式是 10 进制 32 位宽这是 verliog 中默认的。
3.赋值方式
Verliog 中的赋值方式有两种 阻塞赋值 和 非阻塞赋值。
阻塞赋值
a1;b2;顺序执行当执行完 a1,才去执行 b2;
非阻塞赋值
a1;b2;两条语句是同时执行的。
4.常用的语句
过程结构语句有 2 种initial 与 always 语句。它们是行为级建模的 2 种基本语句。
一个模块中可以包含多个 initial 和 always 语句但 2 种语句不能嵌套使用。
这些语句在模块间并行执行与其在模块的前后顺序没有关系。
但是 initial 语句或 always 语句内部可以理解为是顺序执行的非阻塞赋值除外。
每个 initial 语句或 always 语句都会产生一个独立的控制流执行时间都是从 0 时刻开始。
4.1 always
4.2 initial
只在仿真文件中使用不可综合的。
4.2 if else
和 c 语言中的使用一致。
if():
else():4.3 case
在 c 语言的基础上在结束的时候需要添加一个 endcase。
case() : 语句1 : 语句2default
endcase 4.4 assign 全加器
4.5 (事件控制)
语句执行的条件是信号的值发生特定的变化。
关键字 posedge 指信号发生边沿正向跳变negedge 指信号发生负向边沿跳变未指明跳变方向时则 2 种情况的。
5. 常用的运算符
基础的运算符的使用和 c 语言中大概相同使用到的时候如果不会自己复习一下就好这里说明不常见的运算符但在 Verliog 中经常使用到的。
5.1 位拼接运算符 {}
d { a, b, c} // 将 a,b,c按顺序拼接成了d注意的是a,b,c,d的宽度一定要符合。5.2 条件运算符 ? :
也就是 c 语言中的三目运算符。
表达式1表达式2:表达式3如果表达式 1 为真就执行 2否则执行 3.
6. 系统函数
verliog 中系统预定义一些函数完成特殊的功能以下就是经常使用到的一些系统函数。
·timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度
$display(%d,1); //用于输出类似c语言中的print
$write(\n,1); //用于输出和display一样但是display可以自动换行wirte需要换行符
#1 //表示延时的时间
$stop; //暂停仿真
$finish; //结束仿真
$time; //返回64位的当前时间以反引号 开始的某些标识符是 Verilog 系统编译指令。