github传送门(练习写的代码,约束文件,仿真文件)
文章目录
Vivado
基本流程
关于封装IP核和使用Block Design
Verilog
module / 模块
always块
组合逻辑
时序
Generate块(书上p83)
task / function
其他
仿真
ip核的创建和使用方法:
烧录
BASYS3
按键
防抖方法
数码管
函数
实现固定频率的方法:
数码管数字显示
约束文件
知识点
进位和溢出
Vivado
基本流程
写代码。在sources里添加文件,把写好的模块粘贴进去并保存。
[可选] 写仿真文件 (Simulation)(模板代码)。用来在电脑上测试代码的运行结果是否达到预期,如果没问题就可以下到板子上 (写好仿真文件后在最左边Simulation - Run Simulation)(莽的话可以不用仿真直接上板子)。
综合 (Synthesis)。先检查代码有没有毛病,然后根据代码机器自动生成最优电路图(可以在最左边Synthesis - Open Synthesized Design - Schematics里看到电路图)。
实现 (Implementation)。把综合的结果与现实中的板子具体联系起来(通过约束文件),相当于从软件走到了硬件。
生成比特流文件 (Bitstream)。生成的比特流文件就可以上传到板子上了。
上传到板子上,通过Hardware Manager操作。
关于封装IP核和使用Block Design
千万千万千万不要把IP核导入到源代码所在的工程文件里,测试的时候debug有你哭的。
Verilog
module / 模块
module里的内容都是并发执行的。
不在always和initial块里的代码就是单纯调用这个module的时候才会执行。(如果输入改变了会调用这个module)
always块
多个always块并发执行,也就是说不同的主循环函数并发执行。
always里不能实例化模块
一般组合逻辑电路用阻塞赋值(=),时序逻辑电路用非阻塞赋值(<=)。
组合逻辑
always @(触发器变量)是组合逻辑电路,always @(posedge clk)是时序逻辑电路。
时序
posedge(positive edge) 是上升沿关键字,上升沿指的是变量从0变成1的那个瞬间。对应下降沿(negedge