FPGA开发

Quartus13.0使用

编译下载:

添加引脚:

复制代码
# ----------------   LED   ---------------- #
set_location_assignment PIN_K2 -to led_out[11]
set_location_assignment PIN_J1 -to led_out[10]
set_location_assignment PIN_J2 -to led_out[9]
set_location_assignment PIN_L1 -to led_out[8]
set_location_assignment PIN_L2 -to led_out[7]
set_location_assignment PIN_K1 -to led_out[6]
set_location_assignment PIN_N1 -to led_out[5]
set_location_assignment PIN_N2 -to led_out[4]
set_location_assignment PIN_L3 -to led_out[3]
set_location_assignment PIN_P2 -to led_out[2]
set_location_assignment PIN_P1 -to led_out[1]
set_location_assignment PIN_N3 -to led_out[0]

# ----------------   clk and  rst  ---------------- #
set_location_assignment PIN_E1 -to sys_clk
set_location_assignment PIN_D1 -to sys_rst_n

# ----------------   clk and  rst  ---------------- #
set_location_assignment PIN_E1 -to sys_clk
set_location_assignment PIN_D1 -to sys_rst_n

# --------------------   KRY  ------------------- #
set_location_assignment PIN_R3 -to key1
set_location_assignment PIN_P3 -to key2
set_location_assignment PIN_D1 -to key3
set_location_assignment PIN_K1 -to led3


# --------------------   KRY  ------------------- #
set_location_assignment PIN_K16 -to rx
set_location_assignment PIN_L16 -to tx

字体调整:

文件转换:

一.Verilog 代码

数值种类

标识符:

数据类型:

寄存器变量

reg 31 :0 cnt;

reg: 类型

31 :0 高位和低位,代表32位宽,没有时表示位宽为1

变量名: 后面要加分号

线网数据类型:

wire

参数类型:

类似C语言里面的 #define PI 3.14

用于定义状态 运行参数

parameter size=8;

parameter a=4,b=6;

parameter clock=a+b;

运算符:

程序框架:
注释:
关键字:
程序框架:

module 模块开始 模块名字 (a,b) ; 模块参数 ,结束加分号

intput a,b; //输入信号

output c,d; //输出信号

assign c = a|b; //assign复制语句

assign d = a&b; //会生成实际电路(可综合模块(不可综合模块不能生成电路)

endmodule 模块结束

模块调用:

结构语句:

inital 初始化语句

always 循环执行

触发方式:

沿触发: 通常用来表示时序逻辑

posedge 上升沿触发

negedge 下降沿触发

or 链接多个事件,只要有一个条件就执行一次

电平触发: 通常用来表示组合逻辑

等号右边的数字要全部添加到列表里面,可以用 * 来替代,只要有一个电平发生,就会执行

组合逻辑:输出只取决与改时刻的输入。

时序逻辑:输出不仅取决与当前状态还与上一个状态有关。记忆功能

赋值语句:

阻塞赋值 = : 赋值从上到下一条条赋值语句执行。顺序执行,和C语言一样。

非阻塞赋值 <= : 每条赋值语句同时执行,所有赋值语句同时执行。它会将所有右边全部计算完后再同时赋值给左边。只能给寄存器类型赋值。

组合逻辑和时序逻辑判断:

时序逻辑:就是有一个D触发器,要随着时钟周期触发: always@(posedge clk or negedge res_n) ,但是组合逻辑是通过电平状态来判断的:always@( * )或always@(a or b or ...)

所以再时序逻辑里面,一个时钟到来,要执行所有的事情,赋值是要用 <= 赋值,一次将全部的值赋过去。

而组合逻辑,当触发后依次执行一次,所以用 = 赋值 ,执行一次。

条件语句:

if

case

状态机:

概述:

实现顺序逻辑,实现不同状态进行切换。

状态机设计:
例子:

尽量使用时序逻辑:

语法注意:

1. 端口加 wire 还是reg?

  1. 用这种方式赋值 assign led_out = ,要加 wire 类型。

2.模块的输入输出端口类型都默认为wire型

3.变量放在begin......end之内必须使用reg变量

4.在initial语句中使用必须使用reg变量

6.如果output作为过程赋值语句的左值,则应该用reg类型;如果output作为连续赋值语句的左值,则应该用wire类型

  1. 输入的端口都不用写reg,因为值是外面给的,只有输出要区分是否写reg

8.reg信号一般情况下代表寄存器,wire信号定义, wire信号就是硬件连线

3. 函数和函数调用:

1.在Verilog中,输入值和输出值全部在模块端口进行定义

二.代码实践:

相关推荐
1560820721913 小时前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理
XMAIPC_Robot15 小时前
-40~85℃宽温实测:RK3588 机器人控制器硬件底座,长时间 SLAM 定位稳定性验证
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga
樱木花道長16 小时前
AMD Ross 深度系列 8:FAQ 七问七答(文末附网盘链接)
人工智能·fpga开发
FPGA小迷弟16 小时前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
低慢小uav18 小时前
(已解决)Zynq芯片lwip协议栈,使用tcp作为服务器Service,接收大量数据时,长度接收正常,接收对数据校验,校验和异常分析
网络协议·tcp/ip·fpga开发
szxinmai主板定制专家20 小时前
ARM+FPGA 数控机床控制器:选 CODESYS SoftMotion CNC,还是基于 LinuxCNC 自研搭建?架构、授权、实时性、量产风险深度对比
arm开发·fpga开发·codesys·数据采集卡·linuxcnc·rk3576
女神下凡20 小时前
芯参谋(79):嵌入式学习进阶_(硬件与软件)深入实践指南
arm开发·单片机·嵌入式硬件·学习·fpga开发·设计规范
路上有只喵1 天前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇5
单片机·嵌入式硬件·fpga开发
爱吃汽的小橘1 天前
FPGA/数字IC设计的时序优化
fpga开发
FPGA小迷弟1 天前
FPGA 与无线电:从软件定义无线电到 5G 基带的硬件实现之路
5g·fpga开发·架构·dsp开发·fpga·无线电