模拟电路 :工作在模拟信号下的电子电路
数字电路 :工作再数字信号下的电子电路
早期生产的数字集成电路逻辑功能都是固定不变的。
允许用户自行修改内部链接的集成电路:可编程逻辑器件 PLD
一、PLD
内部电路结构可以通过写入编程数据来设置。
写入的逻辑功能可以由使用者通过编程来设定。
PLD分类:
CPLD:复杂可编程逻辑器件
FPGA:现场可编程门阵列
本质差异:电路结构不同
CPLD:基于''乘积项''的与或逻辑
FPGA:基于''查找表''的CLB阵列
二、FPGA
一种可以通过编程来修改其逻辑功能的数字集成电路(芯片)
对单片机编程并不改变其电路内部链接结构,只是根据要求实现的功能来编写运行的程序(指令)
数字系统流程
逻辑设计:
HDL 硬件描述语言 用于描述数字电路结构和功能的语言。
HDL可以在不同层次对数字电路的结构、功能和行为进行描述。
电路设计:
HDL所描述的电路可以通过综合工具将其转换为门级电路网表,然后通过某种工艺和基本元件逐一对应起来再通过布局布线工具转换为电路布线结构
常见的硬件描述语言:
verilog HDL和VHDL
三、verilog
verilog和c语言的区别
verilog是硬件描述语言 在编译下载到FPGA之后会生成路,所以verilog是并行的。
c语言是软件编程语言,编译下载到单片机后是存储器中的一组指令。而且单片机处理软件指令需要取指、译码、执行,这个过程是串行的。
verilog和c语言的区别也是FPGA和单片机/CPU的区别,由于他的并行处理所以fpga速度比较快。
verilogHDL作为一种高级语言 ,和c语言非常的类似。
四、基础语法
逻辑0:表示低电平GND
逻辑1:表示高电平VCC
逻辑X:表示未知,可高可低
逻辑Z:表示高阻态,外部没有激励信号,是一个悬空状态
Verilog数字进制 : 二进制B 八进制O 十进制D 十六H进制
二进制表示:4'b0101 表示4位二进制数字0101
十进制表示:4'd2 表示为4位十进制数字2(二进制0010)
十六进制表示:4'ha 表示为4位十六进制数字a(二进制1010)
注意:默认32位置十进制
可以添加下划线增加可读性
标识符:
用于定义模块名 端口号 信号名
推荐标识符写法:
不建议大小写
普通内部信号建议全部小写
信号命名体现信号的含义、简介、清晰、易懂 sum cpu_addr clk_cpu
数据类型
verilog主要三大数据类型:
寄存器
表示一个抽象的数据存取单元 通过赋值语句改变寄存器的值
寄存器数据类型的关键字是reg 默认初始值为不定值x
reg [31:0] delay_cnt ; //延时计数 中括号表示寄存器的位宽 高位在前
reg key_reg ; 默认位宽为1
reg类型的数据只能在always语句和initial语句中被赋值
如果该过程语句描述的是时序逻辑 即always语句带有时钟信号,则该寄存器变量对应位触发器
如果该过程语句描述的是组合逻辑 即always语句不带有时钟信号,则该寄存器变量对应为硬件连线。
线网
线网数据类型表示结构实体之间的物理连线、
线网类型的变量不能存储值 它的值是由驱动它的元件所决定的。驱动线网类型变量的元件有门、连续赋值语句、assign等。
如果没有驱动元件连接到线网类型的变量上,则变量就是高阻的,即其值为z
线网数据类型包括wire型和tri型 其中wire类型为最常用的类型
wire key_flag ; 默认一位位宽
参数
参数其实就是一个常量 在Veriloghdl 中用parameter定义常量。
我们可以一次定义多个参数,参数与参数之间需要用逗号隔开。
每个参数定义的右边必须是一个常数表达式。
参数型数据常用于定义状态机的状态、数据位宽和延迟大小等。
采用标识符来代表一个常量可以提高程序的可读性和可维护性。
在模块调用 时,可通过参数传递来改变被调用模块中已定义的参数。
运算符
算术运算符
关系运算符
逻辑运算符
条件运算符
位运算符
位运算时:位不一致时前面会补零
移位运算符
两种移位运算都需要填补0 左移位宽增加 右移位宽不变
4'b1001<<2=6'b100100 4'b1001>>1=4'b0100
拼接运算符
运算符优先级: