ZYNQ是一个fpga用来硬件编程,外加一个软件编程

正点原子云平台可用的数据库开发_数据

 FPGA是可通过编程来修改其逻辑功能的数字集成电路

第三篇语法篇

第七章 verilog HDL语法

Verilog的简介

可编程逻辑电路:允许用户自行修改内部连接的集成电路,其内部的电路结构可以通过编程数据来设置,写入的编程数据还可以擦除

FPGA是基于查找表的CLB阵列

数字系统设计流程

正点原子云平台可用的数据库开发_Verilog_02

Verilog和c的区别

Verilog是硬件描述语言,在下载到FPGA中后会生成电路,是并行运行的

c语言下载到单片机中之后,是存储器中的一组指令,而单片机处理软件指令是需要取指、译码、执行这个过程是串行执行

FPGA的特点就是运行速度特别快,要有硬件设计的思想

程序框架

Verilog的逻辑值

逻辑0:表示低电平,也就是电路的GND

正点原子云平台可用的数据库开发_数据_03

逻辑1:表示高电平,也就是电路的vcc

正点原子云平台可用的数据库开发_Verilog_04

逻辑x:表示未知,有可能是高电平,也有可能是低电平

正点原子云平台可用的数据库开发_数据_05

逻辑z:表示高阻态,表示外部没有激励信号是一个悬空的状态

正点原子云平台可用的数据库开发_Verilog_06

没有输入驱动 

verilogd的标识符

书写规范:

1、用有意义的有效的名字如 sum、cpu_addr 等。

2、用下划线区分词语组合,如 cpu_addr。

3、采用一些前缀或后缀,比如:时钟采用 clk 前缀:clk_50m,clk_cpu;低电平采用_n 后缀: enable_n;

4、统一缩写,如全局复位信号 rst。

5、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。

6、自定义的标识符不能与保留字(关键词)同名。

7、参数统一采用大写,如定义参数使用 SIZE。

进制

二进制

二进制表示如下:4’b0101 表示 4 位二进制数字 0101;

十进制

4’d2 表示 4 位十进制数字 2(二进制 0010)

十六进制

4’ha 表示 4 位十六进制数字 a(二进制 1010)········

要是没有标识默认位宽就是32位,位宽就是一次可以传输多少位二进制数

默认10进制数

数组类型

1、寄存器类型

寄存器类型是表示一个抽象的数据存储单元,它只能在always和initial语句中被赋值,并且它的值从一个赋值到另一个赋值过程中被保存下来。如果该过程语句描述的是时序逻辑,即 always 语句带有时钟 信号,则该寄存器变量对应为寄存器;如果该过程语句描述的是组合逻辑,即 always 语句不带有时钟信 号,则该寄存器变量对应为硬件连线;寄存器类型的缺省值是 x(未知状态)。 寄存器数据类型有很多种,如 reg、integer、real 等,其中最常用的就是 reg 类型,它的使用方法如 :

//reg define
reg [31:0] delay_cnt; //延时计数器
reg key_flag ; //按键标志

2、线网类型

线网表示 Verilog 结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输 出。如果没有驱动元件连接到线网,线网的缺省值为 z(高阻态)。线网类型同寄存器类型一样也是有很 多种,如 tri 和 wire 等,其中最常用的就是 wire 类型,它的使用方法如下

//wire define
wire data_en; //数据使能信号 
wire [7:0] data ; //数据

3、参数类型

我们再来看下参数类型,参数其实就是一个常量,常被用于定义状态机的状态、数据位宽和延迟大小 等,由于它可以在编译时修改参数的值,因此它又常被用于一些参数可调的模块中,使用户在实例化模块 时,可以根据需要配置参数。在定义参数时,我们可以一次定义多个参数,参数与参数之间需要用逗号隔 开。这里我们需要注意的是参数的定义是局部的,只在当前模块中有效。它的使用方法如下

//parameter define
parameter DATA_WIDTH = 8; //数据位宽为8位

运算符

逻辑运算符与位运算符的差别

逻辑运算符

正点原子云平台可用的数据库开发_寄存器_07

 位运算符

正点原子云平台可用的数据库开发_数据_08

不同位宽的数据进行位运算会将位小的用0补齐 ,

一个数据位宽为4,表示这个数据由4位数组成

正点原子云平台可用的数据库开发_寄存器_09

拼接运算符

正点原子云平台可用的数据库开发_寄存器_10

Verilog程序框架

关键字(小写)

module                    模块开始定义

input                         输入端口定义

output                      输出端口定义

inout                        双向端口定义

parameter               信号的参数定义

wire                        wire信号定义

reg                          reg信号定义

always                   产生reg信号语句的关键字

assign                    产生wire信号的关键字

begin                     语句的起始标志

end                          语句的结束标志

posedge/negedeg      时序电路的标志

case                            case语句的起始标志

default                         case语句的默认·分支标志

endcase                      case语句结束标志

if                                  if/else语句标记

else                            if/else语句标志

for                               for语句标记

endmodule               模块结束定义

      Verilog 高级知识点

模块的结构

每个程序都由4个部分组成

端口定义、io说明、内部信号声明、功能定义

第一行给出了所有端口,第二、三行说明了端口的io功能,5、6是功能定义

正点原子云平台可用的数据库开发_正点原子云平台可用的数据库开发_11

正点原子云平台可用的数据库开发_fpga开发_12

 模块的调用(函数的调用)

正点原子云平台可用的数据库开发_正点原子云平台可用的数据库开发_13