![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FPGA学习笔记
嵌入式@hxydj
这个作者很懒,什么都没留下…
展开
-
FPGA学习笔记---Verilog HDL 可综合语句和不可综合语句汇总
作为HDL语言,有两种基本的用途:系统仿真和设计实现。所有的HDL描述都可用于仿真,但并非所有的HDL描述都可综合。 一般综合工具支持的Verilog HDL结构Verilog HDL结构 可综合性说明 module,macromodule √ wire,reg,integer 数据类型 √ parameter √ 端口类型说明 input,output,in...原创 2020-09-09 14:56:07 · 3325 阅读 · 0 评论 -
FPGA学习笔记---任务(task) 和函数 (function)
在 Verilog HDL 语言中,任务(task)和函数(function)可以把一个大的程序模块分解成许多小的任务和函数,以方便调试,使写出的程序结构更清晰。 任务(task)定义格式如下: task <任务名>; //注意无端口列表 端口及数据类型声明; 其他语句; endtask 函数(function...原创 2020-09-09 11:26:00 · 4909 阅读 · 1 评论 -
FPGA学习笔记---3种乘法器的比较
没学FPGA的时候,以为计算乘法和加法一样简单,但是学习之后才发现,要设计一个好的乘法器并不简单。今天就先用一个简单的例子看看乘法是怎样实现的。先看第一种最简单直接的实现方式module mul( //两个8位 二进制乘法操作 out, a, b );parameter size = 8;input [size: 1] a,b;output [2*size:1] out;reg [2...原创 2020-09-03 16:51:25 · 4733 阅读 · 3 评论 -
FPGA学习笔记---用Quartus II生成输入输出框图
在开始学习FPGA的时候,各个模块的代码都会编写,但是将几个模块组合要在一起使用的时候就比较容易犯迷糊,不清楚每个模块都有哪些端口,各个端口该怎么连接。 下面用一个简单的示例来说明一下,如何利用Quartus II的模块框图功能帮助初学者更好的理解模块间的连接关系。现在有一个按键模块,一个LED显示模块,现在要通过按键控制LED灯的亮灭。就需要用一个顶层模块将按键和LED模块连接起来。连接完成后的RTL视图如下:将按键模块的按键输出值送入到LED模块的输入中,然后LE...原创 2020-08-31 14:15:54 · 15083 阅读 · 4 评论 -
Verilog HDL中使用系统任务 $readmemh遇到问题及解决方法
在Verilog HDL程序中有两个系统任务$readmemb和$readmemh,用来从文件中读取数据到存贮器中。这两个系统任务可以在仿真的任何时刻被执行使用,其使用格式共有以下六种:1) $readmemb("<数据文件名>",<存贮器名>);2) $readmemb("<数据文件名>",<存贮器名>,<起始地址>);3) $readmemb("<数据文件名>",<存贮器名>,<起始地址&...原创 2020-08-08 14:39:11 · 12419 阅读 · 2 评论 -
FPGA---多按键消抖检测
在学习了单按键消抖方法后,按键消抖的关键点就是20ms的延时,这一点和单片机按键消抖的思路是一样的。但是FPGA的延时需要通过寄存器计数,这个是比较消耗内部资源的。如果要检测4个按键时,最简单的方法就是将单按键消抖程序例化4次,传入不同的按键接口就行。这样的话就相当于用了4个不同的寄存器对20ms计数,对 FPGA内部资源浪费比较大,那么能不能用一个20ms的寄存器同时判断四个按键呢。 可以参考单按键检测的思路,首先将按键的当前状态和上一个状态存储起来,然后比较按键状态,如果按键状...原创 2020-08-05 16:05:36 · 3833 阅读 · 4 评论 -
FPGA学习笔记---利用连续赋值语句延时功能实现按键消抖
最近一直在学习FPGA,今天在学习延时语句时,发现了连续赋值的一个特点。在连续赋值语句中添加延时时,任何小于延迟值的输入变化都会被滤除而不会体现在输出上。比如 #10B= A; 当A的变化小于10ns时,在输出B上不会体现出来。 突然就想到了利用这个特点是不是就可以消除按键抖动。延时时间为20ms,用连续赋值语句读取按键输入口的值,那么当按键在20ms内抖动时,输出值不会有变化,只有当按键值稳定20ms以上时,输出值才会有变化。这样就是按键消抖了吗?说干就干,就先测试一...原创 2020-07-25 17:57:50 · 2106 阅读 · 0 评论 -
FPGA学习笔记---Verilog延迟语句分析比较
在Verilog语言中经常要用到延时语句,延时语句添加的位置不同,输出的结果就会不同。今天就来分析比较一下延时语句在不同位置时,对赋值语句的影响。一、阻塞式左延时赋值语句文件代码:`timescale 1ns/1nsmodule delay( a, b, sum); input [3:0] a; input [3:0] b; output reg [4:0] sum; //阻塞式左延时赋值语句always @(*) be...原创 2020-07-25 14:54:48 · 2735 阅读 · 1 评论 -
FPGA学习笔记---时序逻辑与组合逻辑分析比较
在学习FPGA使用VerilogHDL语言编程时,开始遇到时序逻辑和组合逻辑时概念一看就明白,但是实际使用时还是不清楚到底要用哪个。现在用就一个例子来体会一下这两者的区别。 首先先看组合逻辑和时序逻辑的定义。看完以后还是感觉云里雾里搞不清楚,那么就不用管它了,直接用例子来说明。 在这里设计一个0---9计数器,clk为输入时钟信号,cin为计数有效信号,也就是说只有当cin为高电平时,计数器才计数一次。cout为计数进位信号,当计数值为9时,计数值再...原创 2020-07-06 14:27:26 · 2128 阅读 · 0 评论 -
一键清理Quartus工程编译垃圾
关于Quartus生成的工程文件后缀名含义可以在官网看查看官网地址如下:https://www.intel.com/content/www/us/en/programmable/quartushelp/current/index.htm#reference/glossary/def_file_types.htm为了方便观看将网页保存为图片格式谷歌翻译中文界面如下:...原创 2020-07-03 11:04:49 · 4400 阅读 · 5 评论 -
FPGA学习笔记---Modelsim使用技巧总结
在学习FPGA时,需要经常在modelsim软件中观察波形,而modelsim波形显示界面在默认设置下看起来不是很方便。现在就总结一下如何在modelsim波形显示界面改变默认显示。首先看一下默认波形显示界面在窗口最左边显示的是波形名称,默认情况下是带路径显示,可以将路径显示取掉,只显示波形名称。可以在菜单栏中选择Format---Toggle Leaf Names,也可以直接点窗口左下角灰色的按钮。这样波就不会显示路径,只显示名称了。默认情况下左边波形名称的高度比较...原创 2020-07-02 16:51:18 · 18872 阅读 · 17 评论 -
FPGA学习笔记---二进制码、独热码、格雷码分析对比
在Verilog学习中常用的编码方式有二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码,对于新手来说,搞不清楚编码为什么要分这么多格式?统一用一种格式不好吗?那么现在就来看看这三种编码的区别和应用。 先看看这三种编码的定义二进制码格雷码 独热码下面看看十进制数0---7用三种编码如何表示 十进制数 二进制 独热码 格雷码 ...原创 2020-07-02 13:53:55 · 4645 阅读 · 0 评论 -
FPGA学习---Modelsim自动仿真
FPGA中的Modelsim自动仿真,就是在Quartus II 软件中调用Modelsim软件进行仿真。用流水灯的工程演示一下自动仿真步骤。 首先打开led工程。编译工程代码没有错误,下面就可以生成仿真文件了。工具栏中选择 Tools --- Options打开的Options选项中选择 EDA Tool Options,然后在右边ModelSim的右边添加仿真软件的按照路径。然后点击OK按钮,退出设置。在工具栏中选择 Processi...原创 2020-06-09 15:56:29 · 2046 阅读 · 0 评论 -
FPGA学习---Quartus II新建工程
用流水灯来演示一下如何新建 FPGA工程。首先新建存放项目的文件夹led在led文件夹中新建3个文件夹par、rtl、sim。par文件夹用于存放工程文件,rtl存放源代码,sim存放仿真文件。然后打开Quartus II 软件。打开Quartus II后,界面上有两个选项,一个新建项目向导,一个打开工程。由于还没有工程文件,所以这里要选择新建工程向导。下来直接点下一步。这里设置工程路径,工程名。点第一个选项后面的显示3个点的按钮,然后文件路径选择原创 2020-06-08 18:00:51 · 4378 阅读 · 0 评论