FPGA硬件语法实例

FPGA硬件基础

  • 用HDL描述的抽象硬件电路模型,Verilog称为Module
  • FPGA是由许多单元(cells)组成
  • EDA首先将源HDL模型转变为基本的门级网表,称为编译
  • EDA随后为基本门模型分配具体的cell,称为映射
  • 为了检验抽象电路代码是否正确,需要对其进行测试,称为验证,验证需要单独编写一段HDL代码,建立测试用模型,模型称为Testbenth
  • 软件运行抽象模型的方法称为仿真
  • 综合前验证加载测试用户RTL模型,验证的内容主要是测试模型的逻辑功能,综合前验证又称为功能仿真RTL仿真,或者前仿
  • 综合后验证测试装配后的由基本门描述的模型,即网表,验证内容主要是设计模型的时序性能,所以又称为时序仿真或门级仿真后仿

设计流程
在这里插入图片描述

D触发器
在这里插入图片描述
复位信号 rst_n 低电平有效
复位信号rst_n 有效时**(rst_n=0),q=0**
复位信号rst_n无效时**(rst_n=1)**,在时钟 clk 上升沿之后,d 的值赋值给 q

一个always 对应一个 D触发器,所以一个信号不可能在多个always 设计,否则硬件会有冲突

FPGA架构

在这里插入图片描述

在这里插入图片描述

Verilog语法

Verilog

逻辑参数
在这里插入图片描述
数的进制
在这里插入图片描述
标识符
在这里插入图片描述
在这里插入图片描述
数据类型
在这里插入图片描述
寄存器类型
在这里插入图片描述
线网类型
在这里插入图片描述
参数类型
在这里插入图片描述
**要求在paraeter中 的参数必须 全部大写 **

算术运算符
在这里插入图片描述
关系运算符
在这里插入图片描述
逻辑运算符
在这里插入图片描述
条件运算符
在这里插入图片描述
按位运算符
在这里插入图片描述
当位数不相同时,会采用位数扩展,将少位的数进行高位补0。

移位运算符
在这里插入图片描述
移位运算符一般用于乘除运算,尽量不使用 / 和 %

拼接运算符
在这里插入图片描述
运算符优先级
在这里插入图片描述

程序框架

注释
在这里插入图片描述
常用关键字
在这里插入图片描述
模块
在这里插入图片描述
在这里插入图片描述
模块调用
在这里插入图片描述
time_count是子模块,被调用

结构语句

在这里插入图片描述
always
在这里插入图片描述
posedge 上升沿,negedge 下降沿

在这里插入图片描述

赋值语句

在这里插入图片描述
在这里插入图片描述
阻塞赋值:在一个语句块中,如果有多条阻塞赋值语句,则在前面的赋值未完成前,后面的语句不能执行。“阻塞”
非阻塞赋值:块中多条语句并行同时执行

在这里插入图片描述
非阻塞赋值只能给寄存器类型的变量进行赋值,一次只能用在 initial和always 块中

例: 最终结果对比
阻塞赋值: a=0, b=0, c=0
非阻塞赋值:a=0, b=1, c=2

在这里插入图片描述
assign(连续赋值)语句中必须使用阻塞赋值,给wire型变量赋值
reg 型变量必须用非阻塞赋值

在这里插入图片描述
在这里插入图片描述
条件语句
在这里插入图片描述
在这里插入图片描述

时序机设计(状态机)

举例,以密码锁解锁为例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Moore状态机:下一状态取决于当前状态和当前输入,输出仅取决于当前状态
Mealy状态机:下一状态和输出都取决于当前状态和输入

在这里插入图片描述
在这里插入图片描述
1.状态空间定义
在这里插入图片描述
四个状态:SLEEP, STUDY, EAT, AMUSE (二进制编码)
current_state 当前状态 next_state 下一状态
**独热码:**只有一个位置位,译码逻辑简单

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

语法实例应用

程序设计准则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1. 一个 always 只产生一个信号
2. 条件判断只允许使用 if else 和case ,其它的全都不用(包括casex)
3. 含有posedge 和negedge 的,一定是D触发器,是时序电路
4. 设计时,如果你想立即有结果,就使用组合逻辑,如果想要延时一拍,就使用时序逻辑

1. 组合逻辑写法 always@(*),组合逻辑一定要写 else,避免生成锁存器(即 条件语句没有说明全部的条件)
2. 时序逻辑的敏感信号必须是(posedge clk or negedge rst_n)

在这里插入图片描述
对程序调试等有优势,更加方便处理。

信号类型 reg和 wire
用 assign 、例化模块输出的信号用 wire
在这里插入图片描述

位选
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

assign 语句
在这里插入图片描述

模块例化

例化含义
在这里插入图片描述
连线:
clk 连接 clk_100m
rst_n 连接 sys_rst_n
·

例化方法
在这里插入图片描述
参数例化(参数传递)
在这里插入图片描述

模块设计模板

在这里插入图片描述
举例
在这里插入图片描述

else if (en)  begin
    dout <=1;           //dout上升时
end
else  if (end_cnt)  begin
	dout<=0;              //dout下降时
end

== 当 if 中条件 en 变为高电平后,下一句 dout<=1; 是在 en延后一拍变化的 ==


测试文件

编写技巧

一、认识测试文件
在这里插入图片描述
二、测试文件编写流程
在这里插入图片描述
1秒 =109 纳秒
1秒 =1012 皮秒

测试文件模板

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值