初识FPGA之笔记整理(One)

通过学习正点原子FPGA课程所整理的笔记One

一、相关简介


1.模拟电路与数字电路的区别

模拟电路:工作在模拟信号下的电子电路。

数字电路:工作在数字信号下的电子电路

模拟电路在时间和数量上的变化连续,而数字电路是离散的。

2.可编程逻辑器件(Programmable Logic Device)

(1)这是一种允许用户自行修改内部连接结构的集成电路(简称PLD)

PLD内部的电路结构可以通过写入编程数据来设置,写入PLD的编程数据还可以重写。

(2)CPLD与FPGA

本质差异:电路结构不同

CPLD:基于“乘积项”的与或逻辑阵列

FPGA:基于“查找表”的CLB阵列【可编程逻辑功能块(Configurable Logic Blocks)CLB是FPGA内的三个基本逻辑单元】

3.硬件描述语言(Haraware Description Language)

数字系统设计流程

逻辑设计(前端)——电路实现(后端)——系统验证

逻辑设计:

描述数字电路结构和功能的语言,HDL可以在不同层次对数字电路结构、功能和行为进行描述

电路实现:

HDL所描述的电路可以通过综合工具——门级电路网表——将其与某种工艺的基本逐一对应起来——通过布局布线工具——电路布线结构

常见的硬件描述语言 Verilog HDL 和 VHDL

Verilog设计方法在FPGA开发/IC设计具有主导地位

在FPGA设计中,还有原理图输入法

4.Verilog和C语言的区别

verilog作为硬件描述语言,编译下载到FPGA后,会生成电路,而且verilog是并行运行的。

c语言作为软件编程语言,编译到单片机后,是存储器的一组指令,单片机处理软件,通过取指、译码、执行,所以c语言是串行执行的。

Verilog与C语言的区别同样也是FPGA与单片机的区别,FPGA由于并行处理,处理速度非常快。


二、Verilog学习

1.逻辑值

逻辑值类型:

0:表示低电平,对应电路中的GND(地),在数字逻辑中代表逻辑假或关闭状态。

1:表示高电平,对应电路中的VCC(电源电压),在数字逻辑中代表逻辑真或开启状态。

x:表示未知状态,可能是高电平或低电平,常见于未初始化信号或总线冲突情况。

z:   表示高阻态,外部没有激励信号,为悬空状态。

重点:
(1)实际电路只有0和1,x主要用于仿真验证
(2) 组合逻辑和时序逻辑对这些值的处理不同

注意:

(1)初始化寄存器变量时应避免x状态
(2) 测试平台可用x状态检测设计响应
(3)注意组合逻辑中可能产生x状态的情况

2.Verilog的数字进制:二进制b、八进制o、十进制d、十六进制h

一般为:b、d、h

二进制:

例如4'b0101,表示4位二进制0101 其中4'代表位宽

十进制:

例如4'd2代表4位十进制2

十六进制:

4'ha代表4位十六进制数字a(1010)

3.标识符(identifier)

用于定义模块名、端口名、信号(可用字母、数字、$符号和下划线组成)

注意:

(1)不建议大小写混合使用

(2)普通内部信号建议全部小写

4.数据类型

(1)Verilog中的三大数据类型:

寄存器数据类型真正对数字电路起作用
线网数据类型真正对数字电路起作用
参数数据类型

(2)寄存器数据类型:

寄存器:一个抽象的数据存储单元  , 通过赋值语句来改变寄存器存储的值

关键字 reg ,默认初始值 为不定值x

reg类型的数据只能在always语句和initial语句中被赋值

//reg define

    reg [31:0]  delay_cnt;
//这里的[31:0]代表是一个32位的寄存器(从0到31为32位,高前低后)
    reg         key_reg;
//下面的reg没有进行赋值,默认位宽为1

注意:如果过程语句为

时序逻辑,即always语句带有时钟信号,则该寄存器变量应为触发器

组合逻辑,即always语句带有时钟信号,则该寄存器变量应为硬件连线

特性时序逻辑组合逻辑
依赖信号时钟边沿触发输入立即变化响应
存储功能是(触发器)
Verilog关键字always @ (posedge clk)always @ (*)或assign
默认无驱动值保持前状态不适用
  • 时序逻辑:用于设计寄存器、状态机、时序控制模块。

  • 组合逻辑:用于设计算术逻辑单元(ALU)、多路选择器等。

(3)线网数据类型:

//wire define

    wire  key_flag;
//默认位宽为1

包括wire和tri型   

常用为wire,表示单驱动信号

tri,用于多驱动信号(如总线冲突时表现为高阻态)

表示结构实体(例如门)之间的物理连线 该变量不能存储值 它的值是由驱动它的元件所决定的

驱动线网类型的变量元件有门、连接赋值语句、assign语句等

如果没有驱动元件连接到线网类型的变量上,则该变量为默认值高阻态 (z)

wire out;
assign out = sel ? a : b;   //多路选择器

(4)参数数据类型

为常量   Verilog HDL中用parameter定义常量

可以一次性定义多个参数    需用逗号隔开

//parameter define 4.3'RGB LCD
    parameter H_SYNC = 11'd4    //行同步
    parameter H_BACK = 11'd2    //行显示后沿
    parameter H_DISP = 11'd480  //行有效数据
    parameter H_FRONT = 11'd2   //行显示前沿
    parameter H_TOTAL = 11'd525 //行扫描周期

参数数据类型用来定义状态机的状态、数据位宽、延迟大小等

采用标识符来代表一常量可增强程序的可读性和可维护性

在模块调用时,可采用参数传递来改变调用模块中已被定义的参数

(5)Verilog的运算符 (注意优先级!)

和C语言一样Verilog有算术运算符、关系运算符、逻辑运算符、条件运算符、位运算符、移位运算符,但Verilog有特殊的拼接运算符

拼接运算符:{} 

// {} define
    c = {a,b[3:0]}
//将a与b拼接起来,作为一个信号


//eg
    reg [3:0] a = 4'b1010; 
    reg [3;0] b = 4'b1100; 
    reg [7:0] c;           
    assign c = {a,b};      //位拼接 c为8'b10101100

(6)关键字及常用关键字


(7)Verilog程序框架

其基本设计单元为“模块”(block)

·描述接口

·描述逻辑功能

Verilog程序端口定义IO说明内部信号声明功能定义

内部功能定义的三种方法:

assign语句描述组合逻辑
always语句组合/时序逻辑
例化实例元件如and#2u1(9,a,b)

注:在always语句中为顺序执行,但在多个always块中是并行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值